Skip to content

Commit ff732b7

Browse files
Updated SysML build project
1 parent fe1d266 commit ff732b7

18 files changed

Lines changed: 314 additions & 60 deletions

build/MTConnect.NET-SysML-Import/CSharp/ClassModel.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -134,22 +134,25 @@ public string RenderInterface()
134134

135135
public string RenderDescriptions()
136136
{
137-
var templateFilename = $"ModelDescriptions.scriban";
138-
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csharp", "templates", templateFilename);
139-
if (HasDescriptions && File.Exists(templatePath))
137+
if (Properties != null && Properties.Count > 0)
140138
{
141-
try
139+
var templateFilename = $"ModelDescriptions.scriban";
140+
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csharp", "templates", templateFilename);
141+
if (HasDescriptions && File.Exists(templatePath))
142142
{
143-
var templateContents = File.ReadAllText(templatePath);
144-
if (templateContents != null)
143+
try
145144
{
146-
var template = Template.Parse(templateContents);
147-
return template.Render(this);
145+
var templateContents = File.ReadAllText(templatePath);
146+
if (templateContents != null)
147+
{
148+
var template = Template.Parse(templateContents);
149+
return template.Render(this);
150+
}
151+
}
152+
catch (Exception ex)
153+
{
154+
Console.WriteLine(ex.Message);
148155
}
149-
}
150-
catch (Exception ex)
151-
{
152-
Console.WriteLine(ex.Message);
153156
}
154157
}
155158

build/MTConnect.NET-SysML-Import/CSharp/ComponentType.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
using MTConnect.SysML.Xmi;
44
using MTConnect.SysML.Xmi.UML;
55
using Scriban;
6-
using System;
7-
using System.IO;
8-
using System.Linq;
96

107
namespace MTConnect.SysML.CSharp
118
{

build/MTConnect.NET-SysML-Import/CSharp/CompositionType.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
using MTConnect.SysML.Xmi;
44
using MTConnect.SysML.Xmi.UML;
55
using Scriban;
6-
using System;
7-
using System.IO;
8-
using System.Linq;
96

107
namespace MTConnect.SysML.CSharp
118
{

build/MTConnect.NET-SysML-Import/CSharp/CuttingToolMeasurementModel.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
using MTConnect.NET_SysML_Import.CSharp;
22
using MTConnect.SysML.Models.Assets;
3-
using MTConnect.SysML.Models.Observations;
43
using Scriban;
5-
using System;
6-
using System.IO;
7-
using System.Linq;
84

95
namespace MTConnect.SysML.CSharp
106
{
11-
public class CuttingToolMeasurementModel : MTConnectCuttingToolMeasurementModel, ITemplateModel
7+
public class CuttingToolMeasurementModel : MTConnectMeasurementModel, ITemplateModel
128
{
139
public string Namespace => NamespaceHelper.GetNamespace(Id);
1410

1511
public string XmlDescription { get; set; }
1612

1713

18-
public static CuttingToolMeasurementModel Create(MTConnectCuttingToolMeasurementModel importModel)
14+
public static CuttingToolMeasurementModel Create(MTConnectMeasurementModel importModel)
1915
{
2016
if (importModel != null)
2117
{

build/MTConnect.NET-SysML-Import/CSharp/EnumModel.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,22 +119,25 @@ public string RenderModel()
119119

120120
public string RenderDescriptions()
121121
{
122-
var templateFilename = $"EnumDescriptions.scriban";
123-
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csharp", "templates", templateFilename);
124-
if (File.Exists(templatePath))
122+
if (Values != null && Values.Count > 0)
125123
{
126-
try
124+
var templateFilename = $"EnumDescriptions.scriban";
125+
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csharp", "templates", templateFilename);
126+
if (File.Exists(templatePath))
127127
{
128-
var templateContents = File.ReadAllText(templatePath);
129-
if (templateContents != null)
128+
try
130129
{
131-
var template = Template.Parse(templateContents);
132-
return template.Render(this);
130+
var templateContents = File.ReadAllText(templatePath);
131+
if (templateContents != null)
132+
{
133+
var template = Template.Parse(templateContents);
134+
return template.Render(this);
135+
}
136+
}
137+
catch (Exception ex)
138+
{
139+
Console.WriteLine(ex.Message);
133140
}
134-
}
135-
catch (Exception ex)
136-
{
137-
Console.WriteLine(ex.Message);
138141
}
139142
}
140143

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using MTConnect.NET_SysML_Import.CSharp;
2+
using MTConnect.SysML.Models.Assets;
3+
using Scriban;
4+
5+
namespace MTConnect.SysML.CSharp
6+
{
7+
public class MeasurementModel : MTConnectMeasurementModel, ITemplateModel
8+
{
9+
public string Namespace => NamespaceHelper.GetNamespace(Id);
10+
11+
public string XmlDescription { get; set; }
12+
13+
14+
public static MeasurementModel Create(MTConnectMeasurementModel importModel)
15+
{
16+
if (importModel != null)
17+
{
18+
var type = typeof(MeasurementModel);
19+
20+
var importProperties = importModel.GetType().GetProperties();
21+
var exportProperties = type.GetProperties();
22+
23+
if (importProperties != null && exportProperties != null)
24+
{
25+
var exportModel = new MeasurementModel();
26+
27+
foreach (var importProperty in importProperties)
28+
{
29+
var propertyValue = importProperty.GetValue(importModel);
30+
31+
var exportProperty = exportProperties.FirstOrDefault(o => o.Name == importProperty.Name);
32+
if (exportProperty != null && exportProperty.PropertyType == importProperty.PropertyType)
33+
{
34+
exportProperty.SetValue(exportModel, propertyValue);
35+
}
36+
}
37+
38+
exportModel.Description = DescriptionHelper.GetTextDescription(importModel.Description);
39+
exportModel.XmlDescription = DescriptionHelper.GetXmlDescription(importModel.Description);
40+
41+
return exportModel;
42+
}
43+
}
44+
45+
return null;
46+
}
47+
48+
public string RenderModel()
49+
{
50+
var templateFilename = $"Assets.Measurement.scriban";
51+
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csharp", "templates", templateFilename);
52+
if (File.Exists(templatePath))
53+
{
54+
try
55+
{
56+
var templateContents = File.ReadAllText(templatePath);
57+
if (templateContents != null)
58+
{
59+
var template = Template.Parse(templateContents);
60+
return template.Render(this);
61+
}
62+
}
63+
catch (Exception ex)
64+
{
65+
Console.WriteLine(ex.Message);
66+
}
67+
}
68+
69+
return null;
70+
}
71+
72+
public string RenderInterface() => null;
73+
74+
public string RenderDescriptions() => null;
75+
}
76+
}

build/MTConnect.NET-SysML-Import/CSharp/TemplateRenderer.cs

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
using MTConnect.SysML.Models.Devices;
33
using MTConnect.SysML.Models.Observations;
44
using System.Collections;
5-
using System.Collections.Generic;
6-
using System.IO;
7-
using System.Linq;
85

96
namespace MTConnect.SysML.CSharp
107
{
@@ -18,10 +15,29 @@ public static void Render(MTConnectModel mtconnectModel, string outputPath)
1815
if (exportModels != null)
1916
{
2017
var classModels = exportModels.Where(o => typeof(MTConnectClassModel).IsAssignableFrom(o.GetType())).Select(o => (MTConnectClassModel)o);
21-
var dClassModels = classModels.Where(o => o.Name != null).ToDictionary(o => o.Name);
18+
19+
var dClassModels = new Dictionary<string, MTConnectClassModel>();
20+
foreach (var classModel in classModels)
21+
{
22+
if (!string.IsNullOrEmpty(classModel.Name))
23+
{
24+
if (!dClassModels.ContainsKey(classModel.Name)) dClassModels.Add(classModel.Name, classModel);
25+
}
26+
}
27+
//var dClassModels = classModels.Where(o => o.Name != null).ToDictionary(o => o.Name);
28+
2229

2330
var enumModels = exportModels.Where(o => typeof(MTConnectEnumModel).IsAssignableFrom(o.GetType())).Select(o => (MTConnectEnumModel)o);
24-
var dEnumModels = enumModels.Where(o => o.Name != null).ToDictionary(o => o.Name);
31+
32+
var dEnumModels = new Dictionary<string, MTConnectEnumModel>();
33+
foreach (var enumModel in enumModels)
34+
{
35+
if (!string.IsNullOrEmpty(enumModel.Name))
36+
{
37+
if (!dEnumModels.ContainsKey(enumModel.Name)) dEnumModels.Add(enumModel.Name, enumModel);
38+
}
39+
}
40+
//var dEnumModels = enumModels.Where(o => o.Name != null).ToDictionary(o => o.Name);
2541

2642

2743
var templates = new List<ITemplateModel>();
@@ -80,7 +96,11 @@ public static void Render(MTConnectModel mtconnectModel, string outputPath)
8096
if (((MTConnectComponentType)exportModel).Type == "Controllers") ((MTConnectComponentType)exportModel).MinimumVersion = new Version(1, 0);
8197
template = ComponentType.Create((MTConnectComponentType)exportModel);
8298
}
83-
else if (typeof(MTConnectCuttingToolMeasurementModel).IsAssignableFrom(type)) template = CuttingToolMeasurementModel.Create((MTConnectCuttingToolMeasurementModel)exportModel);
99+
else if (typeof(MTConnectMeasurementModel).IsAssignableFrom(type))
100+
{
101+
if (exportModel.Id.StartsWith("Assets.CuttingTools.")) template = CuttingToolMeasurementModel.Create((MTConnectMeasurementModel)exportModel);
102+
//else if (exportModel.Id.StartsWith("Assets.Pallet.")) template = MeasurementModel.Create((MTConnectMeasurementModel)exportModel);
103+
}
84104
else if (exportModel.Id.EndsWith("Result"))
85105
{
86106
template = DataSetResultModel.Create((MTConnectClassModel)exportModel);
@@ -94,6 +114,7 @@ public static void Render(MTConnectModel mtconnectModel, string outputPath)
94114
case "Devices.UnitsEnum": template = EnumStringModel.Create((MTConnectEnumModel)exportModel, ConvertUnitEnum); break;
95115
case "Devices.NativeUnitsEnum": template = EnumStringModel.Create((MTConnectEnumModel)exportModel, ConvertUnitEnum); break;
96116
case "Assets.CuttingTools.Measurements.MeasurementCodeEnum": template = EnumStringModel.Create((MTConnectEnumModel)exportModel, ConvertMeasurementCodeEnum); break;
117+
//case "Assets.Pallet.Measurements.MeasurementCodeEnum": template = EnumStringModel.Create((MTConnectEnumModel)exportModel, ConvertMeasurementCodeEnum); break;
97118
default: template = EnumModel.Create((MTConnectEnumModel)exportModel); break;
98119
}
99120
}
@@ -125,6 +146,7 @@ public static void Render(MTConnectModel mtconnectModel, string outputPath)
125146
//case "Devices.Configurations.CriticalityType": ((EnumModel)template).Values.Add(new MTConnectEnumValueModel { Name = "NOT_SPECIFIED" }); break;
126147

127148
case "Assets.Asset": ((ClassModel)template).IsPartial = true; break;
149+
case "Assets.PhysicalAsset": ((ClassModel)template).IsPartial = true; break;
128150
case "Assets.ComponentConfigurationParameters.ComponentConfigurationParameters":
129151
((ClassModel)template).IsPartial = true;
130152
((ClassModel)template).Id += "Asset";
@@ -172,6 +194,18 @@ public static void Render(MTConnectModel mtconnectModel, string outputPath)
172194
((ClassModel)template).Name += "Asset";
173195
if (((ClassModel)template).ParentName != null && ((ClassModel)template).ParentName != "Asset") ((ClassModel)template).ParentName += "Asset";
174196
break;
197+
case "Assets.Fixture.Fixture":
198+
((ClassModel)template).IsPartial = true;
199+
((ClassModel)template).Id += "Asset";
200+
((ClassModel)template).Name += "Asset";
201+
//if (((ClassModel)template).ParentName != null && ((ClassModel)template).ParentName != "Asset") ((ClassModel)template).ParentName += "Asset";
202+
break;
203+
case "Assets.Pallet.Pallet":
204+
((ClassModel)template).IsPartial = true;
205+
((ClassModel)template).Id += "Asset";
206+
((ClassModel)template).Name += "Asset";
207+
//if (((ClassModel)template).ParentName != null && ((ClassModel)template).ParentName != "Asset") ((ClassModel)template).ParentName += "Asset";
208+
break;
175209
case "Assets.QIF.QIFDocumentWrapper":
176210
((ClassModel)template).IsPartial = true;
177211
((ClassModel)template).Id += "Asset";
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright (c) 2025 TrakHound Inc., All Rights Reserved.
2+
// TrakHound Inc. licenses this file to you under the MIT license.
3+
4+
namespace MTConnect.Assets.Pallet.Measurements
5+
{
6+
/// <summary>
7+
/// {{description}}
8+
/// </summary>
9+
public class {{name}} : Measurement
10+
{
11+
public const string TypeId = "{{type_id}}";
12+
public const string CodeId = "{{code_id}}";
13+
14+
15+
public {{name}}()
16+
{
17+
Type = TypeId;
18+
Code = CodeId;
19+
{{ if (units_enum) }}Units = {{units_enum}};{{ end }}
20+
}
21+
22+
public {{name}}(double value)
23+
{
24+
Type = TypeId;
25+
Code = CodeId;
26+
Value = value;
27+
{{ if (units_enum) }}Units = {{units_enum}};{{ end }}
28+
}
29+
30+
public {{name}}(IMeasurement measurement) : base(measurement)
31+
{
32+
Type = TypeId;
33+
Code = CodeId;
34+
{{ if (units_enum) }}Units = {{units_enum}};{{ end }}
35+
}
36+
}
37+
}

build/MTConnect.NET-SysML-Import/Json-cppagent/CuttingToolMeasurementsModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ namespace MTConnect.SysML.Json_cppagent
44
{
55
public class CuttingToolMeasurementsModel
66
{
7-
public List<MTConnectCuttingToolMeasurementModel> Types { get; set; } = new();
7+
public List<MTConnectMeasurementModel> Types { get; set; } = new();
88
}
99
}

build/MTConnect.NET-SysML-Import/Json-cppagent/TemplateRenderer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ private static void WriteCuttingToolMeasurements(MTConnectModel mtconnectModel,
135135
{
136136
var measurementsModel = new CuttingToolMeasurementsModel();
137137

138-
var measurements = mtconnectModel.AssetInformationModel.CuttingTools.Classes.Where(o => typeof(MTConnectCuttingToolMeasurementModel).IsAssignableFrom(o.GetType()));
139-
foreach (var measurement in measurements.OrderBy(o => o.Name)) measurementsModel.Types.Add((MTConnectCuttingToolMeasurementModel)measurement);
138+
var measurements = mtconnectModel.AssetInformationModel.CuttingTools.Classes.Where(o => typeof(MTConnectMeasurementModel).IsAssignableFrom(o.GetType()));
139+
foreach (var measurement in measurements.OrderBy(o => o.Name)) measurementsModel.Types.Add((MTConnectMeasurementModel)measurement);
140140

141141
var templateFilename = $"Measurements.scriban";
142142
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "json-cppagent", "templates", templateFilename);

0 commit comments

Comments
 (0)