diff --git a/Elwig/Models/Graph.cs b/Elwig/Models/Graph.cs index d87ea6d..b536ef1 100644 --- a/Elwig/Models/Graph.cs +++ b/Elwig/Models/Graph.cs @@ -1,12 +1,8 @@ -using Newtonsoft.Json.Linq; using ScottPlot; using System; using System.Collections.Generic; -using System.Diagnostics.Contracts; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Markup; +using System.Text.Json.Nodes; namespace Elwig.Models { public class Graph : ICloneable { @@ -30,7 +26,7 @@ namespace Elwig.Models { DataY = DataGen.Zeros(MaxX - MinX + 1); } - public Graph(string type, int num, JToken graphData, string contracts, int minX, int maxX) { + public Graph(string type, int num, JsonObject graphData, string contracts, int minX, int maxX) { Type = type; Num = num; Contracts = contracts; @@ -52,8 +48,8 @@ namespace Elwig.Models { DataY = dataY; } - private void ParseGraphData(JToken graphData) { - var GraphPoints = graphData.Children().OfType().ToDictionary(p => int.Parse(p.Name[..^2]), p => (double)p.Value); + private void ParseGraphData(JsonObject graphData) { + var GraphPoints = graphData.ToDictionary(p => int.Parse(p.Key[..^2]), p => (double)p.Value?.AsValue()); if (GraphPoints.Keys.Count < 1) { return; @@ -99,19 +95,19 @@ namespace Elwig.Models { } } - public JObject ToJson() { - JObject graph = new(); + public JsonObject ToJson() { + JsonObject graph = new(); if (DataY[0] != DataY[1]) { - graph.Add(new JProperty(DataX[0] + Type.ToLower(), Math.Round(DataY[0], 4))); + graph.Add(new KeyValuePair(DataX[0] + Type.ToLower(), Math.Round(DataY[0], 4))); } for (int i = 1; i < DataX.Length - 1; i++) { if (Math.Round(DataY[i] - DataY[i - 1], 4) != Math.Round(DataY[i + 1] - DataY[i], 4)) { - graph.Add(new JProperty(DataX[i] + Type.ToLower(), Math.Round(DataY[i], 4))); + graph.Add(new KeyValuePair(DataX[i] + Type.ToLower(), Math.Round(DataY[i], 4))); } } if (DataY[^1] != DataY[^2]) { - graph.Add(new JProperty(DataX[^1] + Type.ToLower(), Math.Round(DataY[^1], 4))); + graph.Add(new KeyValuePair(DataX[^1] + Type.ToLower(), Math.Round(DataY[^1], 4))); } return graph; } diff --git a/Elwig/Windows/ChartWindow.xaml.cs b/Elwig/Windows/ChartWindow.xaml.cs index c0bd2cf..9f721e3 100644 --- a/Elwig/Windows/ChartWindow.xaml.cs +++ b/Elwig/Windows/ChartWindow.xaml.cs @@ -1,21 +1,16 @@ -using System; +using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Diagnostics.Contracts; using System.Drawing; using System.Linq; +using System.Text.Json.Nodes; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; using System.Windows.Input; using Elwig.Helpers; using Elwig.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; -using Newtonsoft.Json.Linq; using ScottPlot; using ScottPlot.Plottable; @@ -69,14 +64,14 @@ namespace Elwig.Windows { } PaymentVar paymentVar = paymentVars[0]; - var data = JToken.Parse(paymentVar.Data); + var data = JsonNode.Parse(paymentVar.Data).AsObject(); - var auszahlungsSorten = data["AuszahlungSorten"]; + var auszahlungsSorten = data["AuszahlungSorten"]?.AsObject(); if (auszahlungsSorten == null) { return; } - var Graphs = auszahlungsSorten["Kurven"]; + var Graphs = auszahlungsSorten["Kurven"]?.AsArray(); if (Graphs == null) { return; @@ -86,7 +81,7 @@ namespace Elwig.Windows { int i = 1; foreach (var graph in Graphs) { - GraphsList.Add(new Graph("Oe", i, graph, ParseContracts(auszahlungsSorten, i - 1), 50, 140)); + GraphsList.Add(new Graph("Oe", i, graph?.AsObject(), ParseContracts(auszahlungsSorten, i - 1), 50, 140)); i++; } @@ -98,17 +93,15 @@ namespace Elwig.Windows { RefreshInputs(); } - private String ParseContracts(JToken auszahlungsSorten, int num) { + private String ParseContracts(JsonObject auszahlungsSorten, int num) { List contracts = new(); - foreach (var sorte in auszahlungsSorten.Children().OfType()) { - if (((JProperty)sorte).Name == "Kurven") { - continue; - } - foreach (var attribut in sorte.Values().OfType()) { - foreach (var bindung in attribut.Values().OfType()) { - if ((int)(bindung).Value == num) { - contracts.Add($"{((JProperty)sorte).Name}/{((JProperty)attribut).Name}/{bindung.Name}"); + foreach (var sorte in auszahlungsSorten) { + if (sorte.Key == "Kurven") continue; + foreach (var attribut in sorte.Value.AsObject()) { + foreach (var bindung in attribut.Value.AsObject()) { + if ((int)bindung.Value.AsValue() == num) { + contracts.Add($"{sorte.Key}/{attribut.Key}/{bindung.Key}"); } } } @@ -125,15 +118,14 @@ namespace Elwig.Windows { } PaymentVar paymentVar = paymentVars[0]; - var data = JToken.Parse(paymentVar.Data); + var data = JsonNode.Parse(paymentVar.Data).AsObject(); - var auszahlungsSorten = data["AuszahlungSorten"]; + var auszahlungsSorten = data["AuszahlungSorten"]?.AsObject(); if (auszahlungsSorten == null) { return false; } - var Graphs = auszahlungsSorten["Kurven"]; - + var Graphs = auszahlungsSorten["Kurven"]?.AsObject(); if (Graphs == null) { return false; } @@ -141,26 +133,24 @@ namespace Elwig.Windows { int i = 1; foreach (var graph in Graphs) { if (i == num) { - graph.Remove(); + Graphs.Remove(graph.Key); break; } i++; } - foreach (var sorte in auszahlungsSorten.Children().OfType()) { - if (((JProperty)sorte).Name == "Kurven") { - continue; - } - foreach (var attribut in sorte.Values().OfType()) { - List itemsToRemove = new(); - foreach (var bindung in attribut.Values().OfType()) { - if ((int)bindung.Value == num - 1) { - itemsToRemove.Add(bindung); - } else if ((int)bindung.Value > num - 1) { - bindung.Value = (int)bindung.Value - 1; + foreach (var sorte in auszahlungsSorten) { + if (sorte.Key == "Kurven") continue; + foreach (var attribut in sorte.Value.AsObject()) { + var bindungen = attribut.Value.AsObject(); + foreach (var bindung in bindungen) { + int v = (int)bindung.Value; + if (v == num - 1) { + bindungen.Remove(bindung.Key); + } else if (v > num - 1) { + bindungen[bindung.Key] = v - 1; } } - itemsToRemove.ForEach(i => i.Remove()); } } @@ -671,23 +661,22 @@ namespace Elwig.Windows { } PaymentVar paymentVar = paymentVars[0]; - var data = JToken.Parse(paymentVar.Data); + var data = JsonNode.Parse(paymentVar.Data).AsObject(); var auszahlungsSorten = data["AuszahlungSorten"]; if (auszahlungsSorten == null) { return null; } - var Graphs = auszahlungsSorten["Kurven"]; - + var Graphs = auszahlungsSorten["Kurven"].AsArray(); if (Graphs == null) { return null; } if (IsEditing) { - ((JArray)Graphs)[g.Num - 1] = g.ToJson(); + Graphs[g.Num - 1] = g.ToJson(); } else if(IsCreating) { - ((JArray)Graphs).Add(g.ToJson()); + Graphs.Add(g.ToJson()); } else { return null; }