From 9b2a7c167fb0a126f40e0f1b428e3f48461f5805 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Fri, 15 May 2026 17:33:24 +0200 Subject: [PATCH 01/10] Migrate Newtonsoft usage to System.Text.Json --- .../SAM.Analytical.Grasshopper.Mollier.csproj | 4 +- .../Classes/MollierChartObject.cs | 20 ++++---- .../SAM.Core.Grasshopper.Mollier.csproj | 4 +- .../SAMMollierMollierPointsByPercentage.cs | 2 +- .../SAM.Geometry.Grasshopper.Mollier.csproj | 4 +- .../Classes/AirHandlingUnitResult.cs | 12 ++--- .../SAM.Analytical.Mollier.csproj | 2 +- .../Classes/AdiabaticHumidificationProcess.cs | 5 +- .../Classes/ConstantEnthalpyCurve.cs | 14 +++--- .../Classes/ConstantTemperatureCurve.cs | 14 +++--- .../Classes/ConstantValueCurve.cs | 16 +++--- .../Classes/CoolingProcess.cs | 15 +++--- .../SAM.Core.Mollier/Classes/FanProcess.cs | 5 +- .../Classes/HeatRecoveryProcess.cs | 13 +++-- .../Classes/HeatingProcess.cs | 13 +++-- .../Classes/HumidificationProcess.cs | 13 +++-- .../Classes/IsotermicHumidificationProcess.cs | 5 +- .../SAM.Core.Mollier/Classes/MixingProcess.cs | 13 +++-- .../SAM.Core.Mollier/Classes/MollierCurve.cs | 25 ++++++---- .../SAM.Core.Mollier/Classes/MollierGroup.cs | 20 ++++---- .../SAM.Core.Mollier/Classes/MollierLine.cs | 11 ++--- .../SAM.Core.Mollier/Classes/MollierPoint.cs | 19 ++++--- .../Classes/MollierProcess.cs | 13 +++-- .../SAM.Core.Mollier/Classes/MollierRange.cs | 21 ++++---- .../Classes/MollierSensibleHeatRatioLine.cs | 13 +++-- .../Classes/MollierSettings.cs | 49 +++++++++---------- .../SAM.Core.Mollier/Classes/MollierZone.cs | 29 ++++++----- .../SAM.Core.Mollier/Classes/RoomProcess.cs | 5 +- .../Classes/SpecificProcess.cs | 13 +++-- .../Classes/SteamHumidificationProcess.cs | 5 +- .../Classes/UndefinedProcess.cs | 13 +++-- .../Classes/VisibilitySettings.cs | 40 +++++++++------ .../SAM.Core.Mollier/SAM.Core.Mollier.csproj | 2 +- .../Classes/UICoolingProcess.cs | 14 +++--- .../Classes/UIMollierAppearance.cs | 24 ++++----- .../Classes/UIMollierCurve.cs | 20 ++++---- .../Classes/UIMollierGroup.cs | 14 +++--- .../Classes/UIMollierLabelAppearance.cs | 26 +++++----- .../Classes/UIMollierPoint.cs | 18 +++---- .../Classes/UIMollierPointAppearance.cs | 18 +++---- .../Classes/UIMollierProcess.cs | 20 ++++---- .../Classes/UIMollierZone.cs | 18 +++---- .../SAM.Geometry.Mollier.csproj | 2 +- .../Classes/WeatherMollierPoint.cs | 14 +++--- .../SAM.Weather.Mollier.csproj | 2 +- 45 files changed, 319 insertions(+), 323 deletions(-) diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj index e821333..1b06c07 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj @@ -60,9 +60,7 @@ runtime - - 13.0.3 - + diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs b/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs index b829ac5..23e74ce 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core.Mollier; namespace SAM.Core.Grasshopper.Mollier @@ -18,9 +18,9 @@ public MollierChartObject(IUIMollierObject uIMollierObject, ChartType chartType, this.z = z; } - public MollierChartObject(JObject jObject) + public MollierChartObject(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public MollierChartObject(MollierChartObject mollierChartObject) @@ -65,7 +65,7 @@ public IUIMollierAppearance UIMollierAppearance } } - public bool FromJObject(JObject jObject) + public bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -74,30 +74,30 @@ public bool FromJObject(JObject jObject) if (jObject.ContainsKey("UIMollierObject")) { - uIMollierObject = Core.Query.IJSAMObject< IUIMollierObject >(jObject.Value("UIMollierObject")); + uIMollierObject = Core.Query.IJSAMObject< IUIMollierObject >(jObject["UIMollierObject"] as JsonObject); } if (jObject.ContainsKey("ChartType")) { - chartType = Core.Query.Enum(jObject.Value("ChartType")); + chartType = Core.Query.Enum(jObject["ChartType"]?.GetValue() ?? null); } if (jObject.ContainsKey("Z")) { - z = jObject.Value("Z"); + z = jObject["Z"]?.GetValue() ?? default(double); } return true; } - public JObject ToJObject() + public JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(uIMollierObject != null) { - jObject.Add("UIMollierObject", uIMollierObject.ToJObject()); + jObject.Add("UIMollierObject", uIMollierObject.ToJsonObject()); } jObject.Add("ChartType", chartType.ToString()); diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj index 68b6c5d..00d38b4 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj @@ -48,9 +48,7 @@ runtime - - 13.0.3 - + diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs index 27f83a4..c5f00ff 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using SAM.Core.Mollier; -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Linq; using SAM.Core.Grasshopper; using SAM.Core; diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj index 8fd0d7b..7e24311 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj @@ -43,9 +43,7 @@ runtime - - 13.0.3 - + diff --git a/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs b/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs index 383c310..6429557 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs +++ b/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using System; @@ -24,22 +24,22 @@ public AirHandlingUnitResult(AirHandlingUnitResult airHandlingUnitResult) } - public AirHandlingUnitResult(JObject jObject) + public AirHandlingUnitResult(JsonObject jObject) : base(jObject) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) return false; return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject jObject = base.ToJObject(); + JsonObject jObject = base.ToJsonObject(); if (jObject == null) return null; diff --git a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj index 7132af0..4552c64 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj +++ b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj @@ -44,6 +44,6 @@ - + \ No newline at end of file diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs index c938338..a9a2f31 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class AdiabaticHumidificationProcess : HumidificationProcess @@ -12,7 +11,7 @@ internal AdiabaticHumidificationProcess(MollierPoint start, MollierPoint end) } - public AdiabaticHumidificationProcess(JObject jObject) + public AdiabaticHumidificationProcess(JsonObject jObject) :base(jObject) { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs index 4b0a7d9..ebf685c 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier @@ -28,7 +28,7 @@ public ConstantEnthalpyCurve(ConstantEnthalpyCurve constantEnthalpyCurve) } } - public ConstantEnthalpyCurve(JObject jObject) + public ConstantEnthalpyCurve(JsonObject jObject) : base(jObject) { @@ -42,9 +42,9 @@ public Phase Phase } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = FromJObject(jObject); + bool result = FromJsonObject(jObject); if(!result) { return result; @@ -52,15 +52,15 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("Phase")) { - phase = Core.Query.Enum(jObject.Value("Phase")); + phase = Core.Query.Enum(jObject["Phase"]?.GetValue() ?? null); } return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs index 9d75f25..9fcf2c5 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier @@ -28,7 +28,7 @@ public ConstantTemperatureCurve(ConstantTemperatureCurve constantTemperatureCurv } } - public ConstantTemperatureCurve(JObject jObject) + public ConstantTemperatureCurve(JsonObject jObject) : base(jObject) { @@ -42,9 +42,9 @@ public Phase Phase } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = FromJObject(jObject); + bool result = FromJsonObject(jObject); if(!result) { return result; @@ -52,15 +52,15 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("Phase")) { - phase = Core.Query.Enum(jObject.Value("Phase")); + phase = Core.Query.Enum(jObject["Phase"]?.GetValue() ?? null); } return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs index 112ed84..de16bd5 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier @@ -32,7 +32,7 @@ public ConstantValueCurve(ConstantValueCurve constantValueCurve) } } - public ConstantValueCurve(JObject jObject) + public ConstantValueCurve(JsonObject jObject) : base(jObject) { @@ -54,9 +54,9 @@ public double Value } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = FromJObject(jObject); + bool result = FromJsonObject(jObject); if(!result) { return result; @@ -64,20 +64,20 @@ public virtual bool FromJObject(JObject jObject) if(jObject.ContainsKey("Value")) { - value = jObject.Value("Value"); + value = jObject["Value"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("ChartDataType")) { - chartDataType = Core.Query.Enum(jObject.Value("ChartDataType")); + chartDataType = Core.Query.Enum(jObject["ChartDataType"]?.GetValue() ?? null); } return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs index 675cf42..a5cbdab 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class CoolingProcess : MollierProcess @@ -13,7 +12,7 @@ internal CoolingProcess(MollierPoint start, MollierPoint end, double efficiency this.efficiency = efficiency; } - public CoolingProcess(JObject jObject) + public CoolingProcess(JsonObject jObject) :base(jObject) { @@ -91,24 +90,24 @@ public MollierPoint ApparatusDewPoint() // //return downPoint; //} - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if(!base.FromJObject(jObject)) + if(!base.FromJsonObject(jObject)) { return false; } if(jObject.ContainsKey("Efficiency")) { - efficiency = jObject.Value("Efficiency"); + efficiency = jObject["Efficiency"]?.GetValue() ?? default(double); } return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs index 87d3cfd..a317fcb 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class FanProcess : HeatingProcess @@ -10,7 +9,7 @@ internal FanProcess(MollierPoint start, MollierPoint end) } - public FanProcess(JObject jObject) + public FanProcess(JsonObject jObject) :base(jObject) { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs index 48dc28e..3378ed3 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class HeatRecoveryProcess : MollierProcess @@ -11,7 +10,7 @@ internal HeatRecoveryProcess(MollierPoint start, MollierPoint end) } - public HeatRecoveryProcess(JObject jObject) + public HeatRecoveryProcess(JsonObject jObject) :base(jObject) { @@ -22,9 +21,9 @@ public HeatRecoveryProcess(HeatRecoveryProcess heatRecoveryProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -32,9 +31,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs index c5c0cb0..0748a84 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class HeatingProcess : MollierProcess @@ -10,7 +9,7 @@ internal HeatingProcess(MollierPoint start, MollierPoint end) { } - public HeatingProcess(JObject jObject) + public HeatingProcess(JsonObject jObject) :base(jObject) { @@ -21,9 +20,9 @@ public HeatingProcess(HeatingProcess heatingProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -31,9 +30,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs index 86a0220..ac23b29 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class HumidificationProcess : MollierProcess @@ -10,7 +9,7 @@ internal HumidificationProcess(MollierPoint start, MollierPoint end) } - public HumidificationProcess(JObject jObject) + public HumidificationProcess(JsonObject jObject) :base(jObject) { @@ -21,9 +20,9 @@ public HumidificationProcess(HumidificationProcess humidificationProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -31,9 +30,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs index f40b6f0..6757e25 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class IsothermalHumidificationProcess : HumidificationProcess @@ -12,7 +11,7 @@ internal IsothermalHumidificationProcess(MollierPoint start, MollierPoint end) } - public IsothermalHumidificationProcess(JObject jObject) + public IsothermalHumidificationProcess(JsonObject jObject) :base(jObject) { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs index 0fb1674..da7a5ef 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MixingProcess : MollierProcess @@ -11,7 +10,7 @@ internal MixingProcess(MollierPoint start, MollierPoint end) } - public MixingProcess(JObject jObject) + public MixingProcess(JsonObject jObject) :base(jObject) { @@ -22,9 +21,9 @@ public MixingProcess(MixingProcess mixingProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -32,9 +31,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs index ccb3173..8cbb393 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier @@ -52,9 +52,9 @@ public MollierCurve(MollierCurve mollierCurve) } } - public MollierCurve(JObject jObject) + public MollierCurve(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public MollierPoint Start @@ -91,7 +91,7 @@ public List MollierPoints } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -100,12 +100,17 @@ public virtual bool FromJObject(JObject jObject) if(jObject.ContainsKey("MollierPoints")) { - JArray jArray = jObject.Value("MollierPoints"); + JsonArray jArray = jObject["MollierPoints"] as JsonArray; if(jArray != null) { mollierPoints = new List(); - foreach(JObject jObject_MollierPoint in jArray) + foreach(JsonNode jsonNode_MollierPoint in jArray) { + if (!(jsonNode_MollierPoint is JsonObject jObject_MollierPoint)) + { + continue; + } + mollierPoints.Add(new MollierPoint(jObject_MollierPoint)); } } @@ -114,14 +119,14 @@ public virtual bool FromJObject(JObject jObject) return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(mollierPoints != null) { - JArray jArray = new JArray(); + JsonArray jArray = new JsonArray(); foreach(MollierPoint mollierPoint in mollierPoints) { if(mollierPoint == null) @@ -129,7 +134,7 @@ public virtual JObject ToJObject() continue; } - jArray.Add(mollierPoint.ToJObject()); + jArray.Add(mollierPoint.ToJsonObject()); } jObject.Add("MollierPoints", jArray); diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs index 1da7516..da5188b 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System; using System.Collections; using System.Collections.Generic; @@ -28,9 +28,9 @@ public MollierGroup(MollierGroup mollierGroup) } } - public MollierGroup(JObject jObject) + public MollierGroup(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } @@ -203,7 +203,7 @@ List Objects } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if(jObject == null) { @@ -212,21 +212,21 @@ public virtual bool FromJObject(JObject jObject) if(jObject.ContainsKey("Name")) { - Name = jObject.Value("Name"); + Name = jObject["Name"]?.GetValue() ?? null; } if(jObject.ContainsKey("Objects")) { - List mollierGroupables = Core.Create.IJSAMObjects(jObject.Value("Objects")); + List mollierGroupables = Core.Create.IJSAMObjects(jObject["Objects"] as JsonArray); mollierGroupables?.ForEach(x => Add(x)); } return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(Name != null) @@ -234,10 +234,10 @@ public virtual JObject ToJObject() jObject.Add("Name", Name); } - JArray jArray = new JArray(); + JsonArray jArray = new JsonArray(); foreach (IMollierGroupable mollierGroupable in this) { - jArray.Add(mollierGroupable.ToJObject()); + jArray.Add(mollierGroupable.ToJsonObject()); } jObject.Add("Objects", jArray); diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs index 987cc9a..57a266a 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class MollierLine : MollierCurve @@ -16,9 +15,9 @@ public MollierLine(MollierLine mollierLine) } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = base.FromJObject(jObject); + bool result = base.FromJsonObject(jObject); if (!result) { return false; @@ -27,9 +26,9 @@ public virtual bool FromJObject(JObject jObject) return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs index 8e4bb2d..5531448 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierPoint : IMollierPoint @@ -28,9 +27,9 @@ public MollierPoint(double dryBulbTemperature, double humidityRatio, double pres this.pressure = pressure; } - public MollierPoint(JObject jObject) + public MollierPoint(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } ///// @@ -142,16 +141,16 @@ public double RelativeHumidity } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if(jObject == null) { return false; } - dryBulbTemperature = jObject.ContainsKey("DryBulbTemperature") ? jObject.Value("DryBulbTemperature") : double.NaN; - humidityRatio = jObject.ContainsKey("HumidityRatio") ? jObject.Value("HumidityRatio") : double.NaN; - pressure = jObject.ContainsKey("Pressure") ? jObject.Value("Pressure") : double.NaN; + dryBulbTemperature = jObject.ContainsKey("DryBulbTemperature") ? jObject["DryBulbTemperature"]?.GetValue() ?? default(double) : double.NaN; + humidityRatio = jObject.ContainsKey("HumidityRatio") ? jObject["HumidityRatio"]?.GetValue() ?? default(double) : double.NaN; + pressure = jObject.ContainsKey("Pressure") ? jObject["Pressure"]?.GetValue() ?? default(double) : double.NaN; return true; } @@ -161,9 +160,9 @@ public virtual bool IsValid() return !double.IsNaN(dryBulbTemperature) && !double.IsNaN(humidityRatio) && !double.IsNaN(pressure) && !double.IsInfinity(dryBulbTemperature) && !double.IsInfinity(humidityRatio) && !double.IsInfinity(pressure); } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(!double.IsNaN(dryBulbTemperature)) diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs index bdbd898..b4db1da 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class MollierProcess : MollierCurve, IMollierProcess @@ -16,7 +15,7 @@ public MollierProcess(MollierProcess mollierProcess) } - public MollierProcess(JObject jObject) + public MollierProcess(JsonObject jObject) :base(jObject) { @@ -35,9 +34,9 @@ public virtual void Scale(double factor) mollierPoints[1] = new MollierPoint(Start.DryBulbTemperature - (dryBulbTemperatureDifference * factor), Start.HumidityRatio - (humidityRatioDifference * factor), Start.Pressure); } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = base.FromJObject(jObject); + bool result = base.FromJsonObject(jObject); if (!result) { return false; @@ -46,9 +45,9 @@ public virtual bool FromJObject(JObject jObject) return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs index 6523205..73a6bae 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierRange : IJSAMObject @@ -19,9 +18,9 @@ public MollierRange(MollierRange mollierRange) humidityRatioRange = mollierRange?.humidityRatioRange == null ? null : new Range(mollierRange.humidityRatioRange); } - public MollierRange(JObject jObject) + public MollierRange(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public double DryBulbTemperature_Max @@ -77,7 +76,7 @@ public bool IsValid() return dryBulbTemperatureRange != null && humidityRatioRange != null && !double.IsNaN(dryBulbTemperatureRange.Max) && !double.IsNaN(dryBulbTemperatureRange.Min) && !double.IsNaN(humidityRatioRange.Max) && !double.IsNaN(humidityRatioRange.Min); } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if(jObject == null) { @@ -86,30 +85,30 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("DryBulbTemperatureRange")) { - dryBulbTemperatureRange = new Range(jObject.Value("DryBulbTemperatureRange")); + dryBulbTemperatureRange = new Range(jObject["DryBulbTemperatureRange"] as JsonObject); } if (jObject.ContainsKey("HumidityRatioRange")) { - humidityRatioRange = new Range(jObject.Value("HumidityRatioRange")); + humidityRatioRange = new Range(jObject["HumidityRatioRange"] as JsonObject); } return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(dryBulbTemperatureRange != null) { - jObject.Add("DryBulbTemperatureRange", dryBulbTemperatureRange.ToJObject()); + jObject.Add("DryBulbTemperatureRange", dryBulbTemperatureRange.ToJsonObject()); } if (humidityRatioRange != null) { - jObject.Add("HumidityRatioRange", humidityRatioRange.ToJObject()); + jObject.Add("HumidityRatioRange", humidityRatioRange.ToJsonObject()); } return jObject; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs index 07501fa..6a15766 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierSensibleHeatRatioLine : MollierLine @@ -31,9 +30,9 @@ public double SensibleHeatRatio } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - bool result = base.FromJObject(jObject); + bool result = base.FromJsonObject(jObject); if (!result) { return false; @@ -41,15 +40,15 @@ public virtual bool FromJObject(JObject jObject) if(jObject.ContainsKey("SensibleHeatRatio")) { - sensibleHeatRatio = jObject.Value(sensibleHeatRatio); + sensibleHeatRatio = jObject["SensibleHeatRatio"]?.GetValue() ?? default(double); } return result; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs index 2074995..711e004 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierSettings : IJSAMObject @@ -61,84 +60,84 @@ public MollierSettings(MollierSettings mollierSettings) } } - public MollierSettings(JObject jObject) + public MollierSettings(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } - public bool FromJObject(JObject jObject) + public bool FromJsonObject(JsonObject jObject) { if (jObject.ContainsKey("ChartType")) { - ChartType = Core.Query.Enum(jObject.Value("ChartType")); + ChartType = Core.Query.Enum(jObject["ChartType"]?.GetValue() ?? null); } if (jObject.ContainsKey("Pressure")) { - Pressure = jObject.Value("Pressure"); + Pressure = jObject["Pressure"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("MollierRange")) { - MollierRange = new MollierRange(jObject.Value("MollierRange")); + MollierRange = new MollierRange(jObject["MollierRange"] as JsonObject); } if (jObject.ContainsKey("HumidityRatio_Interval")) { - HumidityRatio_Interval = jObject.Value("HumidityRatio_Interval"); + HumidityRatio_Interval = jObject["HumidityRatio_Interval"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("DryBulbTemperature_Interval")) { - DryBulbTemperature_Interval = jObject.Value("DryBulbTemperature_Interval"); + DryBulbTemperature_Interval = jObject["DryBulbTemperature_Interval"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("DensityRange")) { - DensityRange = new Range(jObject.Value("DensityRange")); + DensityRange = new Range(jObject["DensityRange"] as JsonObject); } if (jObject.ContainsKey("Density_Interval")) { - Density_Interval = jObject.Value("Density_Interval"); + Density_Interval = jObject["Density_Interval"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("EnthalpyRange")) { - EnthalpyRange = new Range(jObject.Value("EnthalpyRange")); + EnthalpyRange = new Range(jObject["EnthalpyRange"] as JsonObject); } if (jObject.ContainsKey("Enthalpy_Interval")) { - Enthalpy_Interval = jObject.Value("Enthalpy_Interval"); + Enthalpy_Interval = jObject["Enthalpy_Interval"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("SpecificVolumeRange")) { - SpecificVolumeRange = new Range(jObject.Value("SpecificVolumeRange")); + SpecificVolumeRange = new Range(jObject["SpecificVolumeRange"] as JsonObject); } if (jObject.ContainsKey("SpecificVolume_Interval")) { - SpecificVolume_Interval = jObject.Value("SpecificVolume_Interval"); + SpecificVolume_Interval = jObject["SpecificVolume_Interval"]?.GetValue() ?? default(double); } if (jObject.ContainsKey("WetBulbTemperatureRange")) { - WetBulbTemperatureRange = new Range(jObject.Value("WetBulbTemperatureRange")); + WetBulbTemperatureRange = new Range(jObject["WetBulbTemperatureRange"] as JsonObject); } if (jObject.ContainsKey("WetBulbTemperature_Interval")) { - WetBulbTemperature_Interval = jObject.Value("WetBulbTemperature_Interval"); + WetBulbTemperature_Interval = jObject["WetBulbTemperature_Interval"]?.GetValue() ?? default(double); } return true; } - public JObject ToJObject() + public JsonObject ToJsonObject() { - JObject result = new JObject(); + JsonObject result = new JsonObject(); result.Add("_type", Core.Query.FullTypeName(this)); result.Add("ChartType", ChartType.ToString()); @@ -150,7 +149,7 @@ public JObject ToJObject() if(MollierRange != null) { - result.Add("MollierRange", MollierRange.ToJObject()); + result.Add("MollierRange", MollierRange.ToJsonObject()); } if (!double.IsNaN(HumidityRatio_Interval)) @@ -165,7 +164,7 @@ public JObject ToJObject() if (DensityRange != null) { - result.Add("DensityRange", DensityRange.ToJObject()); + result.Add("DensityRange", DensityRange.ToJsonObject()); } if (!double.IsNaN(Density_Interval)) @@ -175,7 +174,7 @@ public JObject ToJObject() if (EnthalpyRange != null) { - result.Add("EnthalpyRange", EnthalpyRange.ToJObject()); + result.Add("EnthalpyRange", EnthalpyRange.ToJsonObject()); } if (!double.IsNaN(Enthalpy_Interval)) @@ -185,7 +184,7 @@ public JObject ToJObject() if (SpecificVolumeRange != null) { - result.Add("SpecificVolumeRange", SpecificVolumeRange.ToJObject()); + result.Add("SpecificVolumeRange", SpecificVolumeRange.ToJsonObject()); } if (!double.IsNaN(SpecificVolume_Interval)) @@ -195,7 +194,7 @@ public JObject ToJObject() if (WetBulbTemperatureRange != null) { - result.Add("WetBulbTemperatureRange", WetBulbTemperatureRange.ToJObject()); + result.Add("WetBulbTemperatureRange", WetBulbTemperatureRange.ToJsonObject()); } if (!double.IsNaN(WetBulbTemperature_Interval)) diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs index d18c566..e5042ff 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier @@ -28,9 +28,9 @@ public MollierZone(MollierZone mollierZone) mollierPoints.Add(new MollierPoint(point)); } } - public MollierZone(JObject jObject) + public MollierZone(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public MollierPoint GetCenter() @@ -60,7 +60,7 @@ public List MollierPoints } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if(jObject == null) { @@ -70,13 +70,18 @@ public virtual bool FromJObject(JObject jObject) { mollierPoints = new List(); - //mollierPoints = Core.Create.IJSAMObjects(jObject.Value("MollierPoints")); + //mollierPoints = Core.Create.IJSAMObjects(jObject["MollierPoints"] as JsonArray); - JArray jArray = jObject.Value("MollierPoints"); + JsonArray jArray = jObject["MollierPoints"] as JsonArray; if(jArray != null) { - foreach (JObject jObject_MollierPoint in jArray) + foreach (JsonNode jsonNode_MollierPoint in jArray) { + if (!(jsonNode_MollierPoint is JsonObject jObject_MollierPoint)) + { + continue; + } + if(jObject_MollierPoint == null) { continue; @@ -90,17 +95,17 @@ public virtual bool FromJObject(JObject jObject) return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if(mollierPoints != null) { - JArray jArray = new JArray(); - //mollierPoints.ForEach(x => jArray.Add(x.ToJObject())); + JsonArray jArray = new JsonArray(); + //mollierPoints.ForEach(x => jArray.Add(x.ToJsonObject())); foreach(MollierPoint point in mollierPoints) { - jArray.Add(point.ToJObject()); + jArray.Add(point.ToJsonObject()); } jObject.Add("MollierPoints", jArray); diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs index 810bb65..50e52ad 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class RoomProcess : SpecificProcess @@ -12,7 +11,7 @@ internal RoomProcess(MollierPoint start, MollierPoint end) } - public RoomProcess(JObject jObject) + public RoomProcess(JsonObject jObject) : base(jObject) { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs index 206bf32..cccd2b9 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class SpecificProcess : MollierProcess @@ -10,7 +9,7 @@ internal SpecificProcess(MollierPoint start, MollierPoint end) } - public SpecificProcess(JObject jObject) + public SpecificProcess(JsonObject jObject) : base(jObject) { @@ -21,9 +20,9 @@ public SpecificProcess(SpecificProcess specificMollierProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -31,9 +30,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs index c85b1f3..e0a222b 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { @@ -14,7 +13,7 @@ internal SteamHumidificationProcess(MollierPoint start, MollierPoint end) } - public SteamHumidificationProcess(JObject jObject) + public SteamHumidificationProcess(JsonObject jObject) :base(jObject) { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs index 17c0a5e..28c464d 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; - +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class UndefinedProcess : MollierProcess @@ -11,7 +10,7 @@ internal UndefinedProcess(MollierPoint start, MollierPoint end) } - public UndefinedProcess(JObject jObject) + public UndefinedProcess(JsonObject jObject) :base(jObject) { @@ -22,9 +21,9 @@ public UndefinedProcess(UndefinedProcess undefinedProcess) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if (!base.FromJObject(jObject)) + if (!base.FromJsonObject(jObject)) { return false; } @@ -32,9 +31,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return result; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs index 8b284d2..61b30f4 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using System.Collections.Generic; using System; using System.Linq; @@ -26,12 +26,12 @@ public VisibilitySettings(VisibilitySettings visibilitySettings) } } - public VisibilitySettings(JObject jObject) + public VisibilitySettings(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } - public bool FromJObject(JObject jObject) + public bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -42,19 +42,29 @@ public bool FromJObject(JObject jObject) if (jObject.ContainsKey("Templates")) { dictionary = new Dictionary>(); - JArray jArray = jObject.Value("Templates"); - foreach (JObject jObject_Temp in jArray) + JsonArray jArray = jObject["Templates"] as JsonArray; + foreach (JsonNode jsonNode_Temp in jArray) { + if (!(jsonNode_Temp is JsonObject jObject_Temp)) + { + continue; + } + if (!jObject_Temp.ContainsKey("TemplateName") || !jObject_Temp.ContainsKey("VisibilitySettings")) { continue; } - string templateName = jObject_Temp.Value("TemplateName"); - JArray jArray_VisibilitySettings = jObject_Temp.Value("VisibilitySettings"); + string templateName = jObject_Temp["TemplateName"]?.GetValue() ?? null; + JsonArray jArray_VisibilitySettings = jObject_Temp["VisibilitySettings"] as JsonArray; - foreach (JObject jObject_VisibilitySetting in jArray_VisibilitySettings) + foreach (JsonNode jsonNode_VisibilitySetting in jArray_VisibilitySettings) { + if (!(jsonNode_VisibilitySetting is JsonObject jObject_VisibilitySetting)) + { + continue; + } + if (!dictionary.TryGetValue(templateName, out List visibilitySettings)) { visibilitySettings = new List(); @@ -69,25 +79,25 @@ public bool FromJObject(JObject jObject) return true; } - public JObject ToJObject() + public JsonObject ToJsonObject() { - JObject result = new JObject(); + JsonObject result = new JsonObject(); if (dictionary != null) { - JArray jArray = new JArray(); + JsonArray jArray = new JsonArray(); foreach (KeyValuePair> keyValuePair in dictionary) { - JObject jObject_Template = new JObject(); + JsonObject jObject_Template = new JsonObject(); string templateName = keyValuePair.Key; jObject_Template.Add("TemplateName", templateName); - JArray jArray_VisibilitySettings = new JArray(); + JsonArray jArray_VisibilitySettings = new JsonArray(); foreach (IVisibilitySetting visibilitySetting in keyValuePair.Value) { - jArray_VisibilitySettings.Add(visibilitySetting.ToJObject()); + jArray_VisibilitySettings.Add(visibilitySetting.ToJsonObject()); } jObject_Template.Add("VisibilitySettings", jArray_VisibilitySettings); diff --git a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj index f7df4dc..796b2a5 100644 --- a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj +++ b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj @@ -35,7 +35,7 @@ - + diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs index 3b9e473..afd4e46 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System.Drawing; @@ -29,7 +29,7 @@ public UICoolingProcess(UICoolingProcess uICoolingProcess) } } - public UICoolingProcess(JObject jObject) + public UICoolingProcess(JsonObject jObject) : base(jObject) { } @@ -42,24 +42,24 @@ public bool Realistic } } - public bool FromJObject(JObject jObject) + public bool FromJsonObject(JsonObject jObject) { - if(!base.FromJObject(jObject)) + if(!base.FromJsonObject(jObject)) { return false; } if(jObject.ContainsKey("Realistic")) { - realistic = jObject.Value("Realistic"); + realistic = jObject["Realistic"]?.GetValue() ?? default(bool); } return true; } - public JObject ToJObject() + public JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs index c6a7aa9..6cc6db2 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; @@ -54,9 +54,9 @@ public UIMollierAppearance(UIMollierAppearance uIMollierAppearance, Color color) Color = color; } - public UIMollierAppearance(JObject jObject) + public UIMollierAppearance(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public string Label @@ -79,7 +79,7 @@ public string Label } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -88,7 +88,7 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("Color")) { - JObject jObject_Color = jObject.Value("Color"); + JsonObject jObject_Color = jObject["Color"] as JsonObject; if (jObject_Color != null) { SAMColor sAMColor = new SAMColor(jObject_Color); @@ -101,35 +101,35 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("UIMollierLabelAppearance")) { - UIMollierLabelAppearance = new UIMollierLabelAppearance(jObject.Value("UIMollierLabelAppearance")); + UIMollierLabelAppearance = new UIMollierLabelAppearance(jObject["UIMollierLabelAppearance"] as JsonObject); } if (jObject.ContainsKey("Visible")) { - Visible = jObject.Value("Visible"); + Visible = jObject["Visible"]?.GetValue() ?? default(bool); } if (jObject.ContainsKey("Size")) { - Size = jObject.Value("Size"); + Size = jObject["Size"]?.GetValue() ?? default(int); } return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if (Color != Color.Empty) { - jObject.Add("Color", (new SAMColor(Color)).ToJObject()); + jObject.Add("Color", (new SAMColor(Color)).ToJsonObject()); } if (UIMollierLabelAppearance != null) { - jObject.Add("UIMollierLabelAppearance", UIMollierLabelAppearance.ToJObject()); + jObject.Add("UIMollierLabelAppearance", UIMollierLabelAppearance.ToJsonObject()); } jObject.Add("Visible", Visible); diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs index 6ba4150..4fb2597 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Collections.Generic; @@ -98,9 +98,9 @@ public UIMollierCurve(MollierCurve mollierCurve, UIMollierAppearance uIMollierAp this.uIMollierAppearance = uIMollierAppearance?.Clone(); } - public UIMollierCurve(JObject jObject) + public UIMollierCurve(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public System.Guid Guid @@ -111,7 +111,7 @@ public System.Guid Guid } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -120,12 +120,12 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("MollierCurve")) { - mollierCurve = Core.Query.IJSAMObject(jObject.Value("MollierCurve")) as MollierCurve; + mollierCurve = Core.Query.IJSAMObject(jObject["MollierCurve"] as JsonObject) as MollierCurve; } if (jObject.ContainsKey("UIMollierAppearance")) { - uIMollierAppearance = Core.Query.IJSAMObject(jObject.Value("UIMollierAppearance")) as UIMollierAppearance; + uIMollierAppearance = Core.Query.IJSAMObject(jObject["UIMollierAppearance"] as JsonObject) as UIMollierAppearance; } if (jObject.ContainsKey("Guid")) @@ -136,19 +136,19 @@ public virtual bool FromJObject(JObject jObject) return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = new JObject(); + JsonObject result = new JsonObject(); result.Add("_type", Core.Query.FullTypeName(this)); if (mollierCurve != null) { - result.Add("MollierCurve", mollierCurve.ToJObject()); + result.Add("MollierCurve", mollierCurve.ToJsonObject()); } if (uIMollierAppearance != null) { - result.Add("UIMollierAppearance", uIMollierAppearance.ToJObject()); + result.Add("UIMollierAppearance", uIMollierAppearance.ToJsonObject()); } if (guid != System.Guid.Empty) diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs index eaa31d0..0510997 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System.Drawing; @@ -61,16 +61,16 @@ public System.Guid Guid } } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if(jObject == null || !base.FromJObject(jObject)) + if(jObject == null || !base.FromJsonObject(jObject)) { return false; } if (jObject.ContainsKey("UIMollierAppearance")) { - uIMollierAppearance = Core.Query.IJSAMObject(jObject.Value("UIMollierAppearance")) as UIMollierAppearance; + uIMollierAppearance = Core.Query.IJSAMObject(jObject["UIMollierAppearance"] as JsonObject) as UIMollierAppearance; } if (jObject.ContainsKey("Guid")) @@ -81,9 +81,9 @@ public override bool FromJObject(JObject jObject) return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { @@ -92,7 +92,7 @@ public override JObject ToJObject() if (uIMollierAppearance != null) { - result.Add("UIMollierAppearance", uIMollierAppearance.ToJObject()); + result.Add("UIMollierAppearance", uIMollierAppearance.ToJsonObject()); } if (guid != System.Guid.Empty) diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs index 17a7e26..6761f3e 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; @@ -76,12 +76,12 @@ public UIMollierLabelAppearance(UIMollierLabelAppearance uIMollierLabelAppearanc Color = color; } - public UIMollierLabelAppearance(JObject jObject) + public UIMollierLabelAppearance(JsonObject jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { if (jObject == null) { @@ -90,7 +90,7 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("Color")) { - JObject jObject_Color = jObject.Value("Color"); + JsonObject jObject_Color = jObject["Color"] as JsonObject; if (jObject_Color != null) { SAMColor sAMColor = new SAMColor(jObject_Color); @@ -103,35 +103,35 @@ public virtual bool FromJObject(JObject jObject) if (jObject.ContainsKey("Text")) { - Text = jObject.Value("Text"); + Text = jObject["Text"]?.GetValue() ?? null; } if (jObject.ContainsKey("Visible")) { - Visible = jObject.Value("Visible"); + Visible = jObject["Visible"]?.GetValue() ?? default(bool); } if (jObject.ContainsKey("Size")) { - Size = jObject.Value("Size"); + Size = jObject["Size"]?.GetValue() ?? default(int); } if (jObject.ContainsKey("Vector2D")) { - Vector2D = new Vector2D(jObject.Value("Vector2D")); + Vector2D = new Vector2D(jObject["Vector2D"] as JsonObject); } return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject jObject = new JObject(); + JsonObject jObject = new JsonObject(); jObject.Add("_type", Core.Query.FullTypeName(this)); if (Color != Color.Empty) { - jObject.Add("Color", (new SAMColor(Color)).ToJObject()); + jObject.Add("Color", (new SAMColor(Color)).ToJsonObject()); } if (Text != null) @@ -145,7 +145,7 @@ public virtual JObject ToJObject() if (Vector2D != null) { - jObject.Add("Vector2D", Vector2D.ToJObject()); + jObject.Add("Vector2D", Vector2D.ToJsonObject()); } return jObject; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs index daa23d0..4d5ae40 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; @@ -75,10 +75,10 @@ public UIMollierPoint(UIMollierPoint uIMollierPoint) } } - public UIMollierPoint(JObject jObject) + public UIMollierPoint(JsonObject jObject) : base(jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public UIMollierPoint(UIMollierProcess uIMollierProcess, ProcessReferenceType processReferenceType) @@ -95,16 +95,16 @@ public System.Guid Guid } } - public virtual bool FromJObject(JObject jObject) + public virtual bool FromJsonObject(JsonObject jObject) { - if (jObject == null || !base.FromJObject(jObject)) + if (jObject == null || !base.FromJsonObject(jObject)) { return false; } if (jObject.ContainsKey("UIMollierPointAppearance")) { - uIMollierPointAppearance = new UIMollierPointAppearance(jObject.Value("UIMollierPointAppearance")); + uIMollierPointAppearance = new UIMollierPointAppearance(jObject["UIMollierPointAppearance"] as JsonObject); } if (jObject.ContainsKey("Guid")) @@ -115,9 +115,9 @@ public virtual bool FromJObject(JObject jObject) return true; } - public virtual JObject ToJObject() + public virtual JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { return null; @@ -125,7 +125,7 @@ public virtual JObject ToJObject() if (uIMollierPointAppearance != null) { - result.Add("UIMollierPointAppearance", uIMollierPointAppearance.ToJObject()); + result.Add("UIMollierPointAppearance", uIMollierPointAppearance.ToJsonObject()); } if (guid != System.Guid.Empty) diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs index 94cf607..416416b 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using System.Drawing; @@ -66,14 +66,14 @@ public UIMollierPointAppearance(UIMollierPointAppearance uIMollierPointAppearanc } } - public UIMollierPointAppearance(JObject jObject) + public UIMollierPointAppearance(JsonObject jObject) : base(jObject) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - bool result = base.FromJObject(jObject); + bool result = base.FromJsonObject(jObject); if (!result) { return result; @@ -81,7 +81,7 @@ public override bool FromJObject(JObject jObject) if (jObject.ContainsKey("BorderColor")) { - JObject jObject_Color = jObject.Value("BorderColor"); + JsonObject jObject_Color = jObject["BorderColor"] as JsonObject; if (jObject_Color != null) { SAMColor sAMColor = new SAMColor(jObject_Color); @@ -94,15 +94,15 @@ public override bool FromJObject(JObject jObject) if (jObject.ContainsKey("BorderSize")) { - BorderSize = jObject.Value("BorderSize"); + BorderSize = jObject["BorderSize"]?.GetValue() ?? default(int); } return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return result; @@ -110,7 +110,7 @@ public override JObject ToJObject() if (BorderColor != Color.Empty) { - result.Add("BorderColor", (new SAMColor(BorderColor)).ToJObject()); + result.Add("BorderColor", (new SAMColor(BorderColor)).ToJsonObject()); } result.Add("BorderSize", BorderSize); diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs index b1d34d3..fa202ae 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; @@ -79,15 +79,15 @@ public UIMollierProcess(UIMollierProcess uIMollierProcess) } } - public UIMollierProcess(JObject jObject) + public UIMollierProcess(JsonObject jObject) :base(jObject) { } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - bool result = base.FromJObject(jObject); + bool result = base.FromJsonObject(jObject); if (!result) { return false; @@ -95,20 +95,20 @@ public override bool FromJObject(JObject jObject) if (jObject.ContainsKey("UIMollierPointAppearance_Start")) { - uIMollierPointAppearance_Start = Core.Query.IJSAMObject(jObject.Value("UIMollierPointAppearance_Start")) as UIMollierPointAppearance; + uIMollierPointAppearance_Start = Core.Query.IJSAMObject(jObject["UIMollierPointAppearance_Start"] as JsonObject) as UIMollierPointAppearance; } if (jObject.ContainsKey("UIMollierPointAppearance_End")) { - uIMollierPointAppearance_End = Core.Query.IJSAMObject(jObject.Value("UIMollierPointAppearance_End")) as UIMollierPointAppearance; + uIMollierPointAppearance_End = Core.Query.IJSAMObject(jObject["UIMollierPointAppearance_End"] as JsonObject) as UIMollierPointAppearance; } return true; } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return null; @@ -116,12 +116,12 @@ public override JObject ToJObject() if (uIMollierPointAppearance_Start != null) { - result.Add("UIMollierPointAppearance_Start", uIMollierPointAppearance_Start.ToJObject()); + result.Add("UIMollierPointAppearance_Start", uIMollierPointAppearance_Start.ToJsonObject()); } if (uIMollierPointAppearance_End != null) { - result.Add("UIMollierPointAppearance_End", uIMollierPointAppearance_End.ToJObject()); + result.Add("UIMollierPointAppearance_End", uIMollierPointAppearance_End.ToJsonObject()); } return result; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs index 555fca3..408d357 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; @@ -45,10 +45,10 @@ public UIMollierZone(MollierZone mollierZone, UIMollierAppearance uIMollierAppea this.uIMollierAppearance = uIMollierAppearance?.Clone(); } - public UIMollierZone(JObject jObject) + public UIMollierZone(JsonObject jObject) : base(jObject) { - FromJObject(jObject); + FromJsonObject(jObject); } public IUIMollierAppearance UIMollierAppearance @@ -72,16 +72,16 @@ public System.Guid Guid } } - public bool FromJObject(JObject jObject) + public bool FromJsonObject(JsonObject jObject) { - if (jObject == null || !base.FromJObject(jObject)) + if (jObject == null || !base.FromJsonObject(jObject)) { return false; } if (jObject.ContainsKey("UIMollierAppearance")) { - uIMollierAppearance = new UIMollierAppearance(jObject.Value("UIMollierAppearance")); + uIMollierAppearance = new UIMollierAppearance(jObject["UIMollierAppearance"] as JsonObject); } if(jObject.ContainsKey("Guid")) @@ -92,9 +92,9 @@ public bool FromJObject(JObject jObject) return true; } - public JObject ToJObject() + public JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if (result == null) { @@ -103,7 +103,7 @@ public JObject ToJObject() if (uIMollierAppearance != null) { - result.Add("UIMollierAppearance", uIMollierAppearance.ToJObject()); + result.Add("UIMollierAppearance", uIMollierAppearance.ToJsonObject()); } if(guid != System.Guid.Empty) diff --git a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj index 586c522..cd62e6f 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj +++ b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj @@ -27,7 +27,7 @@ - + diff --git a/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs b/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs index 1a6943f..1e90b1f 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs +++ b/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json.Linq; +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System; @@ -23,7 +23,7 @@ public WeatherMollierPoint(WeatherMollierPoint weatherMollierPoint) } } - public WeatherMollierPoint(JObject jObject) + public WeatherMollierPoint(JsonObject jObject) : base(jObject) { @@ -37,9 +37,9 @@ public DateTime DateTime } } - public override JObject ToJObject() + public override JsonObject ToJsonObject() { - JObject result = base.ToJObject(); + JsonObject result = base.ToJsonObject(); if(result == null) { return null; @@ -50,16 +50,16 @@ public override JObject ToJObject() return result; } - public override bool FromJObject(JObject jObject) + public override bool FromJsonObject(JsonObject jObject) { - if(!base.FromJObject(jObject)) + if(!base.FromJsonObject(jObject)) { return false; } if(jObject.ContainsKey("DateTime")) { - dateTime = jObject.Value("DateTime"); + dateTime = jObject["DateTime"]?.GetValue() ?? default(DateTime); } return true; diff --git a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj index 307285a..77c57ad 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj +++ b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj @@ -29,6 +29,6 @@ - + \ No newline at end of file From af7c12e428d09634013ce1706537bab7139c9a09 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Fri, 15 May 2026 22:00:45 +0200 Subject: [PATCH 02/10] CI: prefer sow/2026-Q2 for dep clones + trigger on it During the SAM-BIM Newtonsoft.Json -> System.Text.Json migration the quarterly sow/2026-Q2 branch carries the binary-breaking change. CI needs to consume the migrated SAM (and any sibling dep) from sow/2026-Q2, not from master, until the quarter-end merge. - Add "sow/2026-Q2" to push/pull_request branch triggers - For each dep clone, ls-remote sow/2026-Q2 and prefer it when present; fall back to default branch (e.g. master) otherwise. After the quarter merges back to master, this fallback naturally restores prior behaviour. Co-Authored-By: Claude Opus 4.7 --- .github/workflows/build.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a5c2f2c..4bba87b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Build (Windows) on: push: - branches: [ "master", "main" ] + branches: [ "master", "main", "sow/2026-Q2" ] pull_request: - branches: [ "master", "main" ] + branches: [ "master", "main", "sow/2026-Q2" ] workflow_dispatch: jobs: @@ -55,8 +55,15 @@ jobs: $deps = $buildOrder[0..($buildOrder.Count-2)] foreach ($r in $deps) { if (Test-Path $r) { continue } - Write-Host "Cloning https://github.com/$org/$r.git" - git clone --depth 1 "https://github.com/$org/$r.git" $r + $preferredBranch = 'sow/2026-Q2' + $hasPreferred = (git ls-remote --heads "https://github.com/$org/$r.git" $preferredBranch 2>$null | Out-String).Trim() + if ($hasPreferred) { + Write-Host "Cloning $org/$r @ $preferredBranch" + git clone --depth 1 --branch $preferredBranch "https://github.com/$org/$r.git" $r + } else { + Write-Host "Cloning $org/$r @ default branch" + git clone --depth 1 "https://github.com/$org/$r.git" $r + } } # Ensure ReferencePath exists even before SAM_Windows builds From e06386a6d93b36aa9ceae26c9f230ff01976b307 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Fri, 15 May 2026 22:05:31 +0200 Subject: [PATCH 03/10] CI: cascade dep clones to PR head_ref -> sow/2026-Q2 -> default Refines the previous workflow patch so CI on the migration PR can succeed before anything has been merged. Each dep repo is cloned from: 1. github.head_ref (feature/remove-newtonsoft on these PRs) - has the migration right now on every dep 2. sow/2026-Q2 - source of truth after these PRs merge 3. default branch - source of truth after quarter-end merge Co-Authored-By: Claude Opus 4.7 --- .github/workflows/build.yml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4bba87b..80a8458 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -55,17 +55,27 @@ jobs: $deps = $buildOrder[0..($buildOrder.Count-2)] foreach ($r in $deps) { if (Test-Path $r) { continue } - $preferredBranch = 'sow/2026-Q2' - $hasPreferred = (git ls-remote --heads "https://github.com/$org/$r.git" $preferredBranch 2>$null | Out-String).Trim() - if ($hasPreferred) { - Write-Host "Cloning $org/$r @ $preferredBranch" - git clone --depth 1 --branch $preferredBranch "https://github.com/$org/$r.git" $r - } else { + $headRef = '${{ github.head_ref }}' + $candidates = @() + if ($headRef) { $candidates += $headRef } + $candidates += 'sow/2026-Q2' + $cloned = $false + foreach ($cand in $candidates) { + $has = (git ls-remote --heads "https://github.com/$org/$r.git" $cand 2>$null | Out-String).Trim() + if ($has) { + Write-Host "Cloning $org/$r @ $cand" + git clone --depth 1 --branch $cand "https://github.com/$org/$r.git" $r + $cloned = $true + break + } + } + if (-not $cloned) { Write-Host "Cloning $org/$r @ default branch" git clone --depth 1 "https://github.com/$org/$r.git" $r } } + # Ensure ReferencePath exists even before SAM_Windows builds New-Item -ItemType Directory -Force -Path "SAM_Windows\build" | Out-Null From 7ff43928d69370f3098959a395e96e1101d91511 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Fri, 15 May 2026 22:38:58 +0200 Subject: [PATCH 04/10] Add SPDX + copyright header to migration-touched files The SPDX-check workflow requires the top 6 lines of every changed .cs file to contain both: // SPDX-License-Identifier: LGPL-3.0-or-later // Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors (with an en-dash between the years). Migration commits modified existing files without preserving the header. Prepend the two lines now. Co-Authored-By: Claude Opus 4.7 --- .../Classes/MollierChartObject.cs | 4 +++- .../Component/SAMMollierMollierPointsByPercentage.cs | 4 +++- .../SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs | 4 +++- .../Classes/AdiabaticHumidificationProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs | 4 +++- .../SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs | 4 +++- .../Classes/IsotermicHumidificationProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs | 4 +++- .../SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs | 4 +++- .../SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs | 4 +++- SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs | 4 +++- .../SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs | 4 +++- .../SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs | 4 +++- .../SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs | 4 +++- SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs | 4 +++- .../SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs | 4 +++- 38 files changed, 114 insertions(+), 38 deletions(-) diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs b/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs index 23e74ce..a712b62 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/Classes/MollierChartObject.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core.Mollier; namespace SAM.Core.Grasshopper.Mollier diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs index c5f00ff..409b70c 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Component/SAMMollierMollierPointsByPercentage.cs @@ -1,4 +1,6 @@ -using Grasshopper.Kernel; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using Grasshopper.Kernel; using SAM.Geometry.Grasshopper.Mollier.Properties; using System; using System.Collections.Generic; diff --git a/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs b/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs index 6429557..3ff1b2f 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs +++ b/SAM_Mollier/SAM.Analytical.Mollier/Classes/AirHandlingUnitResult.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using System; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs index a9a2f31..9f5dc77 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/AdiabaticHumidificationProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class AdiabaticHumidificationProcess : HumidificationProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs index ebf685c..95e59c7 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantEnthalpyCurve.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs index 9fcf2c5..d374e96 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantTemperatureCurve.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs index de16bd5..273bfd3 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/ConstantValueCurve.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs index a5cbdab..4574362 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/CoolingProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class CoolingProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs index a317fcb..ed72c8f 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/FanProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class FanProcess : HeatingProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs index 3378ed3..788bece 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatRecoveryProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class HeatRecoveryProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs index 0748a84..aa0dfa1 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HeatingProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class HeatingProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs index ac23b29..7095d25 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/HumidificationProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class HumidificationProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs index 6757e25..06dc20f 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/IsotermicHumidificationProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class IsothermalHumidificationProcess : HumidificationProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs index da7a5ef..d4f9c20 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MixingProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MixingProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs index 8cbb393..9e922cf 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierCurve.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs index da5188b..089203c 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierGroup.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System; using System.Collections; using System.Collections.Generic; diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs index 57a266a..c8b5787 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierLine.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class MollierLine : MollierCurve diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs index 5531448..45b7484 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierPoint.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierPoint : IMollierPoint diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs index b4db1da..8ae98d8 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class MollierProcess : MollierCurve, IMollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs index 73a6bae..048654b 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierRange.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierRange : IJSAMObject diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs index 6a15766..e8b2fda 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSensibleHeatRatioLine.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierSensibleHeatRatioLine : MollierLine diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs index 711e004..471bdfd 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierSettings.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class MollierSettings : IJSAMObject diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs index e5042ff..c1993f2 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/MollierZone.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; namespace SAM.Core.Mollier diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs index 50e52ad..fec5e13 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/RoomProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class RoomProcess : SpecificProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs index cccd2b9..56d0bd2 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/SpecificProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public abstract class SpecificProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs index e0a222b..6af5b4f 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/SteamHumidificationProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs index 28c464d..7674e7f 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/UndefinedProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; namespace SAM.Core.Mollier { public class UndefinedProcess : MollierProcess diff --git a/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs b/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs index 61b30f4..8982628 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Classes/VisibilitySettings.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using System.Collections.Generic; using System; using System.Linq; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs index afd4e46..f4455d5 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UICoolingProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs index 6cc6db2..3fa445c 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierAppearance.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs index 4fb2597..a440e75 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierCurve.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Collections.Generic; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs index 0510997..d671b3a 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierGroup.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs index 6761f3e..b44ac31 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierLabelAppearance.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs index 4d5ae40..d1a889c 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPoint.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs index 416416b..575d81c 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierPointAppearance.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs index fa202ae..a3249a4 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierProcess.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs index 408d357..b7e57f2 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Classes/UIMollierZone.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core; using SAM.Core.Mollier; using System.Drawing; diff --git a/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs b/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs index 1e90b1f..d696c5d 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs +++ b/SAM_Mollier/SAM.Weather.Mollier/Classes/WeatherMollierPoint.cs @@ -1,4 +1,6 @@ -using System.Text.Json.Nodes; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors +using System.Text.Json.Nodes; using SAM.Core.Mollier; using System; From 22774184cd175bb9372f8cb54abcbb7e49eae909 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Fri, 15 May 2026 22:51:29 +0200 Subject: [PATCH 05/10] CI: harmonize spdx-check.yml with org-canonical Version A template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the older spdx-check.yml (literal en-dash grep, top 6 lines, PR-only trigger) with the modern template shipped on SAM core: - grep -qE with [-–] char class — accepts both hyphen-minus and en-dash - 20-line lookback (was 6) - BOM and CR stripping - mapfile + diff-filter for cleaner change detection - Adds workflow_dispatch trigger Co-Authored-By: Claude Opus 4.7 --- .github/workflows/spdx-check.yml | 81 +++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/.github/workflows/spdx-check.yml b/.github/workflows/spdx-check.yml index 269d562..e386bd3 100644 --- a/.github/workflows/spdx-check.yml +++ b/.github/workflows/spdx-check.yml @@ -2,44 +2,89 @@ name: SPDX + Copyright header check on: pull_request: + workflow_dispatch: jobs: spdx: runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + steps: - - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v5 with: fetch-depth: 0 - name: Check header in changed .cs files + shell: bash run: | - set -e - BASE="${{ github.event.pull_request.base.sha }}" - HEAD="${{ github.event.pull_request.head.sha }}" + set -euo pipefail + + if [ "${{ github.event_name }}" = "pull_request" ]; then + BASE="${{ github.event.pull_request.base.sha }}" + HEAD="${{ github.event.pull_request.head.sha }}" + else + HEAD="${{ github.sha }}" + BASE="$(git rev-parse "${HEAD}^" 2>/dev/null || true)" + fi - FILES=$(git diff --name-only "$BASE" "$HEAD" -- '*.cs' || true) + echo "Base SHA: ${BASE:-}" + echo "Head SHA: $HEAD" + echo - if [ -z "$FILES" ]; then + if [ -z "${BASE:-}" ]; then + mapfile -t files < <(git ls-files '*.cs') + else + mapfile -t files < <(git diff --diff-filter=ACMR --name-only "$BASE" "$HEAD" -- '*.cs' || true) + fi + + if [ "${#files[@]}" -eq 0 ]; then echo "No C# files changed." exit 0 fi - MISSING="" - for f in $FILES; do - HEADBLOCK=$(head -n 6 "$f") + echo "Changed C# files:" + printf ' - %s\n' "${files[@]}" + echo + + missing=() + + for f in "${files[@]}"; do + if [ ! -f "$f" ]; then + echo "Skipping missing file: $f" + continue + fi + + headblock="$(head -n 20 "$f" | sed '1s/^\xEF\xBB\xBF//' | tr -d '\r')" + + echo "Checking: $f" + + if ! grep -q "SPDX-License-Identifier: LGPL-3.0-or-later" <<< "$headblock"; then + echo " Missing SPDX line" + missing+=("$f") + continue + fi + + if ! grep -qE "Copyright \(c\) 2020[-–]2026 Michal Dengusiak & Jakub Ziolkowski and contributors" <<< "$headblock"; then + echo " Missing copyright line" + missing+=("$f") + continue + fi - echo "$HEADBLOCK" | grep -q "// SPDX-License-Identifier: LGPL-3.0-or-later" || MISSING="$MISSING $f" - echo "$HEADBLOCK" | grep -q "// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors" || MISSING="$MISSING $f" + echo " OK" done - if [ -n "$MISSING" ]; then - echo "❌ Missing required header in:" - for f in $MISSING; do echo " - $f"; done - echo "" - echo "Each changed .cs file must start with:" + echo + if [ "${#missing[@]}" -gt 0 ]; then + echo "Missing required header in:" + printf ' - %s\n' "${missing[@]}" + echo + echo "Each checked .cs file must contain within the first 20 lines:" echo "// SPDX-License-Identifier: LGPL-3.0-or-later" - echo "// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors" + echo "// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors" exit 1 fi - echo "✅ SPDX + copyright headers OK." + echo "SPDX + copyright headers OK." \ No newline at end of file From f75dca0afe448f0507a4e0987ddbc2b943a4f2dc Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Wed, 20 May 2026 09:56:55 +0200 Subject: [PATCH 06/10] Pin System.Text.Json to 8.0.5 Aligns the repo with the SAM-BIM workspace-wide pin to the LTS-aligned System.Text.Json 8.0.5, replacing the previously pinned 10.0.8 preview. --- .../SAM.Analytical.Grasshopper.Mollier.csproj | 2 +- .../SAM.Core.Grasshopper.Mollier.csproj | 2 +- .../SAM.Geometry.Grasshopper.Mollier.csproj | 2 +- .../SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj | 3 ++- SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj | 2 +- SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj | 3 ++- SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj | 3 ++- 7 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj index 1b06c07..3bd93c2 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj @@ -60,7 +60,7 @@ runtime - + diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj index 00d38b4..b93afac 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj @@ -48,7 +48,7 @@ runtime - + diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj index 7e24311..5e790a7 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj @@ -43,7 +43,7 @@ runtime - + diff --git a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj index 4552c64..3dac1c1 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj +++ b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj @@ -3,6 +3,7 @@ netstandard2.0 Library false + false SAM.Analytical.Mollier SAM.Analytical.Mollier Copyright © 2022 @@ -44,6 +45,6 @@ - + \ No newline at end of file diff --git a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj index 796b2a5..4345ced 100644 --- a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj +++ b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj @@ -35,7 +35,7 @@ - + diff --git a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj index cd62e6f..dee7079 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj +++ b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj @@ -3,6 +3,7 @@ netstandard2.0 Library false + false true true SAM.Geometry.Mollier @@ -27,7 +28,7 @@ - + diff --git a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj index 77c57ad..f2604e5 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj +++ b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj @@ -3,6 +3,7 @@ netstandard2.0 Library false + false SAM.Weather.Mollier SAM.Weather.Mollier Copyright © 2022 @@ -29,6 +30,6 @@ - + \ No newline at end of file From 1ce23a67ff148236e8b391613ac02f317a689425 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Wed, 20 May 2026 13:34:46 +0200 Subject: [PATCH 07/10] fix: pin AssemblyVersion/FileVersion to 1.0.0.0 (#3) * fix: pin AssemblyVersion/FileVersion to 1.0.0.0 (drop 1.0.* wildcard) Eliminates CS1607 warnings and restores deterministic builds. Aligns with the workspace's existing fixed-version files. Scope: AssemblyInfo.cs + .csproj version attributes only. The // commented-out template example is left intact for documentation. * fix: add SPDX + copyright header to modified AssemblyInfo.cs and refresh .csproj Satisfies the spdx-check workflow which requires every changed .cs file to declare the LGPL-3.0-or-later SPDX identifier and the 2020-2026 attribution in its first 20 lines. Also updates the stale 'Copyright (c) 2020' line in .csproj files to match the SPDX header style. --- .../Properties/AssemblyInfo.cs | 8 +++++--- .../Properties/AssemblyInfo.cs | 8 +++++--- SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj | 6 +++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs index e375edf..b7856c2 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,6 @@ -/* +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors +/* * This file is part of the Sustaiable Analytical Model (SAM) * Copyright (c) 2020, the respective contributors. All rights reserved. * @@ -53,5 +55,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs index 7b18ef1..db0dc29 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,6 @@ -/* +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors +/* * This file is part of the Sustaiable Analytical Model (SAM) * Copyright (c) 2020, the respective contributors. All rights reserved. * @@ -53,5 +55,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj index 4345ced..390cb15 100644 --- a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj +++ b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj @@ -6,9 +6,9 @@ false SAM SAM - Copyright © 2020 - 1.0.%2a - 1.0.%2a + Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors + 1.0.0.0 + 1.0.0.0 false false From 32d286f396c65519bdfdd833732cf98936bf9fa9 Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Wed, 20 May 2026 21:13:27 +0200 Subject: [PATCH 08/10] build: Directory.Build.props for centralised SAMVersion stamping (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * build: Directory.Build.props for centralised SAMVersion stamping Mirrors SAM-BIM/SAM#7. Stage 2 of the AssemblyVersion versioning migration. * fix: replace literal u{2013} escape with actual en-dash in SPDX header PowerShell 5.1 doesn't support backtick-u escape sequences; the apply-stage2.ps1 script leaked them as literal text in 'Copyright (c) 2020u{2013}2026'. * fix: relax SAMVersion.g.cs Target condition to != 'true' Codex P1 on SAM_LadybugTools#4: classic (non-SDK) csprojs don't set GenerateAssemblyInfo at all, so the previous '== false' condition skipped them. Switching to '!= true' catches both GenerateAssemblyInfo=false (SDK projects with legacy AssemblyInfo.cs) AND empty (classic projects). * ci: Codex P2 fixes — four-part SAMVersion, prefer head_ref for sow PRs - Append .0 so SAMVersion is 4-part (AssemblyFileVersion expects 4 parts). - Prefer github.head_ref when it matches sow/yyyy-Qx (release-promotion PRs). - Mirrors SAM sow/2026-Q2 6d87d98e. --- .github/workflows/build.yml | 40 ++++++++++++++++++- Directory.Build.props | 39 ++++++++++++++++++ .../Kernel/AssemblyInfo.cs | 5 ++- .../Properties/AssemblyInfo.cs | 3 -- .../SAM.Analytical.Grasshopper.Mollier.csproj | 1 - .../Kernel/AssemblyInfo.cs | 5 ++- .../Properties/AssemblyInfo.cs | 3 -- .../SAM.Core.Grasshopper.Mollier.csproj | 1 - .../Properties/AssemblyInfo.cs | 8 ++-- .../SAM.Geometry.Grasshopper.Mollier.csproj | 1 - .../Properties/AssemblyInfo.cs | 8 ++-- .../SAM.Weather.Grasshopper.Mollier.csproj | 1 - .../Properties/AssemblyInfo.cs | 5 ++- .../SAM.Analytical.Mollier.csproj | 3 -- .../Properties/AssemblyInfo.cs | 5 ++- .../SAM.Core.Mollier/SAM.Core.Mollier.csproj | 3 -- .../Properties/AssemblyInfo.cs | 5 ++- .../SAM.Geometry.Mollier.csproj | 3 -- .../Properties/AssemblyInfo.cs | 5 ++- .../SAM.Weather.Mollier.csproj | 3 -- 20 files changed, 109 insertions(+), 38 deletions(-) create mode 100644 Directory.Build.props diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80a8458..69e05ef 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Build (Windows) on: push: - branches: [ "master", "main", "sow/2026-Q2" ] + branches: [ "master", "main", "sow/**" ] pull_request: - branches: [ "master", "main", "sow/2026-Q2" ] + branches: [ "master", "main", "sow/**" ] workflow_dispatch: jobs: @@ -35,6 +35,36 @@ jobs: - name: Setup MSBuild uses: microsoft/setup-msbuild@v2 + - name: Compute SAMVersion + id: ver + shell: pwsh + run: | + $ErrorActionPreference = 'Stop' + # Prefer head_ref when its a sow branch (release-promotion PRs from sow/* to main), + # else use base_ref on PR events / ref_name on push events. + $headRef = '${{ github.head_ref }}' + $baseRef = '${{ github.base_ref }}' + $refName = '${{ github.ref_name }}' + if ($headRef -match '^sow/\d{4}-Q\d$') { + $ref = $headRef + } elseif ('${{ github.event_name }}' -eq 'pull_request') { + $ref = $baseRef + } else { + $ref = $refName + } + # .NET AssemblyVersion components are UInt16 (max 65535). Cap to 60000 for headroom. + $run = ${{ github.run_number }} % 60000 + if ($ref -match 'sow/(\d{4})-Q(\d)') { + $v = "$($Matches[1]).$($Matches[2]).$run.0" + $src = "branch '$ref'" + } else { + $now = (Get-Date).ToUniversalTime() + $quarter = [int][Math]::Ceiling($now.Month / 3.0) + $v = "$($now.Year).$quarter.$run.0" + $src = "date $($now.ToString('yyyy-MM-dd')) (ref '$ref' not sow/yyyy-Qx)" + } + Write-Host "SAMVersion = $v (from $src)" + "samversion=$v" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8 - name: Clone dependency repos (siblings) shell: pwsh @@ -56,8 +86,13 @@ jobs: foreach ($r in $deps) { if (Test-Path $r) { continue } $headRef = '${{ github.head_ref }}' + $baseRef = '${{ github.base_ref }}' + $refName = '${{ github.ref_name }}' $candidates = @() if ($headRef) { $candidates += $headRef } + # Current sow branch: base_ref on PR events, ref_name on push events. + $sowRef = if ($baseRef -match '^sow/') { $baseRef } elseif ($refName -match '^sow/') { $refName } else { '' } + if ($sowRef -and $sowRef -ne $headRef) { $candidates += $sowRef } $candidates += 'sow/2026-Q2' $cloned = $false foreach ($cand in $candidates) { @@ -94,6 +129,7 @@ jobs: '/v:m' '/p:Configuration=Release' '/p:UseSharedCompilation=false' + '/p:SAMVersion=${{ steps.ver.outputs.samversion }}' '/p:RunPostBuildEvent=OnOutputUpdated' "/p:ReferencePath=$windowsRef" ) diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..9841655 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,39 @@ + + + + + 1.0.0.0 + $(SAMVersion) + $(SAMVersion) + true + + + + + + <_SAMVersionLine Include="// <auto-generated />" /> + <_SAMVersionLine Include="[assembly: System.Reflection.AssemblyVersionAttribute("$(SAMVersion)")]" /> + <_SAMVersionLine Include="[assembly: System.Reflection.AssemblyFileVersionAttribute("$(SAMVersion)")]" /> + + + + + + + + + + diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Kernel/AssemblyInfo.cs b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Kernel/AssemblyInfo.cs index 3ca0dde..f24ae9b 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Kernel/AssemblyInfo.cs +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Kernel/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using Grasshopper.Kernel; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using Grasshopper.Kernel; using System; using System.Drawing; diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs index b7856c2..9eade6c 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -54,6 +54,3 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj index 3bd93c2..e7cc95d 100644 --- a/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Analytical.Grasshopper.Mollier/SAM.Analytical.Grasshopper.Mollier.csproj @@ -10,7 +10,6 @@ false true true - false false false diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/Kernel/AssemblyInfo.cs b/Grasshopper/SAM.Core.Grasshopper.Mollier/Kernel/AssemblyInfo.cs index 241983d..17af13f 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/Kernel/AssemblyInfo.cs +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/Kernel/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using Grasshopper.Kernel; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using Grasshopper.Kernel; using System; using System.Drawing; diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs index db0dc29..b2fc33a 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -54,6 +54,3 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj index b93afac..09bc382 100644 --- a/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Core.Grasshopper.Mollier/SAM.Core.Grasshopper.Mollier.csproj @@ -10,7 +10,6 @@ false true true - false false false diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Properties/AssemblyInfo.cs index 924029c..6d7db6d 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using System.Reflection; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -31,6 +34,3 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj index 5e790a7..313114a 100644 --- a/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Geometry.Grasshopper.Mollier/SAM.Geometry.Grasshopper.Mollier.csproj @@ -11,7 +11,6 @@ false true true - false false false diff --git a/Grasshopper/SAM.Weather.Grasshopper.Mollier/Properties/AssemblyInfo.cs b/Grasshopper/SAM.Weather.Grasshopper.Mollier/Properties/AssemblyInfo.cs index ddc830f..aea9229 100644 --- a/Grasshopper/SAM.Weather.Grasshopper.Mollier/Properties/AssemblyInfo.cs +++ b/Grasshopper/SAM.Weather.Grasshopper.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using System.Reflection; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System.Reflection; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -30,6 +33,3 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Grasshopper/SAM.Weather.Grasshopper.Mollier/SAM.Weather.Grasshopper.Mollier.csproj b/Grasshopper/SAM.Weather.Grasshopper.Mollier/SAM.Weather.Grasshopper.Mollier.csproj index 44cf5c0..4820b10 100644 --- a/Grasshopper/SAM.Weather.Grasshopper.Mollier/SAM.Weather.Grasshopper.Mollier.csproj +++ b/Grasshopper/SAM.Weather.Grasshopper.Mollier/SAM.Weather.Grasshopper.Mollier.csproj @@ -9,7 +9,6 @@ $([MSBuild]::ValueOrDefault('$(RhinoDebugPluginsDir)', '$(RhinoDefaultPluginsDir)')) Library false - false false false diff --git a/SAM_Mollier/SAM.Analytical.Mollier/Properties/AssemblyInfo.cs b/SAM_Mollier/SAM.Analytical.Mollier/Properties/AssemblyInfo.cs index 0980704..f8aa9e3 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/Properties/AssemblyInfo.cs +++ b/SAM_Mollier/SAM.Analytical.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using System.Reflection; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj index 3dac1c1..7483b3a 100644 --- a/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj +++ b/SAM_Mollier/SAM.Analytical.Mollier/SAM.Analytical.Mollier.csproj @@ -3,12 +3,9 @@ netstandard2.0 Library false - false SAM.Analytical.Mollier SAM.Analytical.Mollier Copyright © 2022 - 1.0.0.0 - 1.0.0.0 false false diff --git a/SAM_Mollier/SAM.Core.Mollier/Properties/AssemblyInfo.cs b/SAM_Mollier/SAM.Core.Mollier/Properties/AssemblyInfo.cs index 98164ff..75bf415 100644 --- a/SAM_Mollier/SAM.Core.Mollier/Properties/AssemblyInfo.cs +++ b/SAM_Mollier/SAM.Core.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -/* +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +/* * This file is part of the Sustaiable Analytical Model (SAM) * Copyright (c) 2020, the respective contributors. All rights reserved. * diff --git a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj index 390cb15..8dc7aed 100644 --- a/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj +++ b/SAM_Mollier/SAM.Core.Mollier/SAM.Core.Mollier.csproj @@ -2,13 +2,10 @@ netstandard2.0 Library - false false SAM SAM Copyright (c) 2020-2026 Michal Dengusiak & Jakub Ziolkowski and contributors - 1.0.0.0 - 1.0.0.0 false false diff --git a/SAM_Mollier/SAM.Geometry.Mollier/Properties/AssemblyInfo.cs b/SAM_Mollier/SAM.Geometry.Mollier/Properties/AssemblyInfo.cs index 6a49c9e..c067996 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/Properties/AssemblyInfo.cs +++ b/SAM_Mollier/SAM.Geometry.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using System.Reflection; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] diff --git a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj index dee7079..233dda3 100644 --- a/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj +++ b/SAM_Mollier/SAM.Geometry.Mollier/SAM.Geometry.Mollier.csproj @@ -3,14 +3,11 @@ netstandard2.0 Library false - false true true SAM.Geometry.Mollier SAM.Geometry.Mollier Copyright © 2024 - 1.0.0.0 - 1.0.0.0 false false diff --git a/SAM_Mollier/SAM.Weather.Mollier/Properties/AssemblyInfo.cs b/SAM_Mollier/SAM.Weather.Mollier/Properties/AssemblyInfo.cs index f2579b4..4a99e90 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/Properties/AssemblyInfo.cs +++ b/SAM_Mollier/SAM.Weather.Mollier/Properties/AssemblyInfo.cs @@ -1,4 +1,7 @@ -using System.Reflection; +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright (c) 2020–2026 Michal Dengusiak & Jakub Ziolkowski and contributors + +using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj index f2604e5..1d05e45 100644 --- a/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj +++ b/SAM_Mollier/SAM.Weather.Mollier/SAM.Weather.Mollier.csproj @@ -3,12 +3,9 @@ netstandard2.0 Library false - false SAM.Weather.Mollier SAM.Weather.Mollier Copyright © 2022 - 1.0.0.0 - 1.0.0.0 false false From 5665992757a399fd6e5c9f45932aad297ce2020c Mon Sep 17 00:00:00 2001 From: Michal Dengusiak Date: Thu, 21 May 2026 10:19:12 +0200 Subject: [PATCH 09/10] build: emit AssemblyInformationalVersion for non-SDK projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors SAM sow/2026-Q2. Adds AssemblyInformationalVersion attribute generation to Path D's SAMVersion.g.cs Target — covers Grasshopper / Tas-bridge assemblies that have GenerateAssemblyInfo=false, so they also get the CI commit SHA stamp in their ProductVersion field. SDK projects pick up InformationalVersion via PropertyGroup auto-gen as before. Local dev builds unchanged. --- Directory.Build.props | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 9841655..b6b921f 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,10 +1,17 @@ - + 1.0.0.0 $(SAMVersion) $(SAMVersion) + + $(SAMVersion)+$(SAMSourceRevision) true @@ -23,6 +30,9 @@ <_SAMVersionLine Include="// <auto-generated />" /> <_SAMVersionLine Include="[assembly: System.Reflection.AssemblyVersionAttribute("$(SAMVersion)")]" /> <_SAMVersionLine Include="[assembly: System.Reflection.AssemblyFileVersionAttribute("$(SAMVersion)")]" /> + + <_SAMVersionLine Include="[assembly: System.Reflection.AssemblyInformationalVersionAttribute("$(InformationalVersion)")]" Condition="'$(InformationalVersion)' != ''" /> Date: Thu, 21 May 2026 12:51:58 +0200 Subject: [PATCH 10/10] build: emit AssemblyInformationalVersion for non-SDK projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors SAM sow/2026-Q2. Adds AssemblyInformationalVersion attribute generation to Path D's SAMVersion.g.cs Target — covers Grasshopper / Tas-bridge assemblies that have GenerateAssemblyInfo=false, so they also get the CI commit SHA stamp in their ProductVersion field. SDK projects pick up InformationalVersion via PropertyGroup auto-gen as before. Local dev builds unchanged. --- Directory.Build.props | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Directory.Build.props b/Directory.Build.props index b6b921f..509f4c6 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,6 +12,14 @@ that and don't overwrite. Local dev builds leave both empty -> no SHA attribute emitted. --> $(SAMVersion)+$(SAMSourceRevision) + + false true