Skip to content
This repository was archived by the owner on Feb 15, 2024. It is now read-only.

Commit ec3dabf

Browse files
committed
refactoring
1 parent 2ef64f3 commit ec3dabf

62 files changed

Lines changed: 1348 additions & 1261 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

dataformat-aml/src/main/java/io/adminshell/aas/v3/dataformat/aml/AasToAmlMapper.java

Lines changed: 0 additions & 116 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.adminshell.aas.v3.dataformat.aml;
2+
3+
public class AmlDocumentInfo {
4+
5+
public static final String DEFAULT_ASSET_ADMINISTRATION_SHELL_INSTANCE_HIERARCHY = "AssetAdministrationShellInstanceHierarchy";
6+
public static final String DEFAULT_ASSET_ADMINISTRATION_SHELL_SYSTEM_UNIT_CLASS_LIB = "AssetAdministrationShellSystemUnitClasses";
7+
public static final String DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB = "AssetAdministrationShellRoleClassLib";
8+
public static final String DEFAULT_ASSET_ADMINISTRATION_SHELL_INTERFACE_CLASS_LIB = "AssetAdministrationShellInterfaceClassLib";
9+
public static final String DEFAULT_DATA_SPECIFICATION_TEMPLATES_UNIT_CLASS_LIB = "AssetAdministrationShellDataSpecificationTemplates";
10+
public static final String DEFAULT_CONCEPT_DESCRIPTION_INSTANCE_HIERARCHY = "ConceptDescriptionInstanceHierarchy";
11+
12+
private final String assetAdministrationShellSystemUnitClassLib;
13+
private final String dataSpecificationTemplatesSystemUnitClassLib;
14+
private final String assetAdministrationShellInstanceHierarchy;
15+
private final String conceptDescriptionInstanceHierarchy;
16+
private final String assetAdministrationShellRoleClassLib;
17+
private final String assetAdministrationShellInterfaceClassLib;
18+
19+
public AmlDocumentInfo() {
20+
this.assetAdministrationShellSystemUnitClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_SYSTEM_UNIT_CLASS_LIB;
21+
this.dataSpecificationTemplatesSystemUnitClassLib = DEFAULT_DATA_SPECIFICATION_TEMPLATES_UNIT_CLASS_LIB;
22+
this.assetAdministrationShellInstanceHierarchy = DEFAULT_ASSET_ADMINISTRATION_SHELL_INSTANCE_HIERARCHY;
23+
this.conceptDescriptionInstanceHierarchy = DEFAULT_CONCEPT_DESCRIPTION_INSTANCE_HIERARCHY;
24+
this.assetAdministrationShellRoleClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB;
25+
this.assetAdministrationShellInterfaceClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_INTERFACE_CLASS_LIB;
26+
}
27+
28+
public AmlDocumentInfo(
29+
String assetAdministrationShellInstanceHierarchy,
30+
String conceptDescriptionInstanceHierarchy,
31+
String assetAdministrationShellSystemUnitClassLib) {
32+
this.assetAdministrationShellSystemUnitClassLib = assetAdministrationShellSystemUnitClassLib;
33+
this.assetAdministrationShellInstanceHierarchy = assetAdministrationShellInstanceHierarchy;
34+
this.conceptDescriptionInstanceHierarchy = conceptDescriptionInstanceHierarchy;
35+
this.dataSpecificationTemplatesSystemUnitClassLib = DEFAULT_DATA_SPECIFICATION_TEMPLATES_UNIT_CLASS_LIB;
36+
this.assetAdministrationShellRoleClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB;
37+
this.assetAdministrationShellInterfaceClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_INTERFACE_CLASS_LIB;
38+
}
39+
40+
public String getAssetAdministrationShellSystemUnitClassLib() {
41+
return assetAdministrationShellSystemUnitClassLib;
42+
}
43+
44+
public String getDataSpecificationTemplatesSystemUnitClassLib() {
45+
return dataSpecificationTemplatesSystemUnitClassLib;
46+
}
47+
48+
public String getAssetAdministrationShellInstanceHierarchy() {
49+
return assetAdministrationShellInstanceHierarchy;
50+
}
51+
52+
public String getConceptDescriptionInstanceHierarchy() {
53+
return conceptDescriptionInstanceHierarchy;
54+
}
55+
56+
public String getAssetAdministrationShellRoleClassLib() {
57+
return assetAdministrationShellRoleClassLib;
58+
}
59+
60+
public String getAssetAdministrationShellInterfaceClassLib() {
61+
return assetAdministrationShellInterfaceClassLib;
62+
}
63+
}

dataformat-aml/src/main/java/io/adminshell/aas/v3/dataformat/aml/AmlGenerator.java

Lines changed: 88 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,92 @@
1515
*/
1616
package io.adminshell.aas.v3.dataformat.aml;
1717

18+
import io.adminshell.aas.v3.dataformat.aml.aas2aml.Aas2AmlMappingContext;
1819
import io.adminshell.aas.v3.dataformat.aml.model.caex.AttributeType;
1920
import io.adminshell.aas.v3.dataformat.aml.model.caex.CAEXFile;
2021
import io.adminshell.aas.v3.dataformat.aml.model.caex.CAEXObject;
2122
import io.adminshell.aas.v3.dataformat.aml.model.caex.InternalElementType;
2223
import io.adminshell.aas.v3.dataformat.aml.model.caex.RoleClassType;
2324
import io.adminshell.aas.v3.dataformat.aml.model.caex.SystemUnitClassType;
2425
import io.adminshell.aas.v3.model.Referable;
26+
import java.beans.PropertyDescriptor;
2527
import java.util.List;
2628
import org.slf4j.Logger;
2729
import org.slf4j.LoggerFactory;
2830

2931
public class AmlGenerator {
3032

3133
private static final Logger log = LoggerFactory.getLogger(AmlGenerator.class);
34+
private static final String DEFAULT_REF_SEMANTIC_PREFIX = "AAS:";
35+
private final String refSemanticPrefix;
3236
private CAEXObject.Builder current;
3337
private CAEXFile.Builder fileBuilder;
38+
private final AmlDocumentInfo documentInfo;
3439

35-
public AmlGenerator() {
36-
this.fileBuilder = CAEXFile.builder();
37-
}
38-
39-
public AmlGenerator(CAEXFile.Builder fileBuilder) {
40-
this.fileBuilder = fileBuilder;
41-
}
42-
43-
private AmlGenerator(CAEXFile.Builder fileBuilder, CAEXObject.Builder current) {
40+
private AmlGenerator(AmlDocumentInfo documentInfo, String refSemanticPrefix, CAEXFile.Builder fileBuilder, CAEXObject.Builder current) {
41+
this.documentInfo = documentInfo;
42+
this.refSemanticPrefix = refSemanticPrefix;
4443
this.fileBuilder = fileBuilder;
4544
this.current = current;
4645
}
4746

4847
public AmlGenerator with(CAEXObject.Builder current) {
49-
return new AmlGenerator(fileBuilder, current);
48+
return new AmlGenerator(documentInfo, refSemanticPrefix, fileBuilder, current);
5049
}
5150

5251
public void addAdditionalInformation(List<Object> additionalInformation) {
5352
fileBuilder.addAdditionalInformation(additionalInformation);
5453
}
5554

55+
public static Builder builder() {
56+
return new Builder();
57+
}
58+
59+
public static class Builder {
60+
61+
private String refSemanticPrefix = DEFAULT_REF_SEMANTIC_PREFIX;
62+
private CAEXObject.Builder current;
63+
private CAEXFile.Builder fileBuilder = CAEXFile.builder();
64+
private AmlDocumentInfo documentInfo = new AmlDocumentInfo();
65+
66+
public AmlGenerator build() {
67+
return new AmlGenerator(documentInfo, refSemanticPrefix, fileBuilder, current);
68+
}
69+
70+
public Builder refSemanticPrefix(String value) {
71+
this.refSemanticPrefix = value;
72+
return this;
73+
}
74+
75+
public Builder current(CAEXObject.Builder value) {
76+
this.current = value;
77+
return this;
78+
}
79+
80+
public Builder file(CAEXFile.Builder value) {
81+
this.fileBuilder = value;
82+
return this;
83+
}
84+
85+
public Builder documentInfo(AmlDocumentInfo value) {
86+
this.documentInfo = value;
87+
return this;
88+
}
89+
}
90+
91+
public void add(CAEXObject caexObject) {
92+
if (caexObject == null) {
93+
return;
94+
}
95+
if (AttributeType.class.isAssignableFrom(caexObject.getClass())) {
96+
addAttribute((AttributeType) caexObject);
97+
} else if (InternalElementType.class.isAssignableFrom(caexObject.getClass())) {
98+
addInternalElement((InternalElementType) caexObject);
99+
} else {
100+
log.warn("adding caex object failed because unsupported type '{}'", caexObject.getClass());
101+
}
102+
}
103+
56104
public void addAttribute(AttributeType attribute) {
57105
if (attribute == null) {
58106
return;
@@ -125,14 +173,14 @@ public void addInternalElement(InternalElementType internalElement) {
125173
}
126174
}
127175

128-
public void appendReferenceTargetInterfaceIfRequired(Object obj, MappingContext context) {
176+
public void appendReferenceTargetInterfaceIfRequired(Object obj, Aas2AmlMappingContext context) {
129177
RoleClassType.ExternalInterface referenceTargetInterface = getReferenceTargetInterface(obj, context);
130178
if (referenceTargetInterface != null) {
131179
addExternalInterface(referenceTargetInterface);
132180
}
133181
}
134182

135-
public RoleClassType.ExternalInterface getReferenceTargetInterface(Object obj, MappingContext context) {
183+
public RoleClassType.ExternalInterface getReferenceTargetInterface(Object obj, Aas2AmlMappingContext context) {
136184
RoleClassType.ExternalInterface result = null;
137185
if (obj != null && Referable.class.isAssignableFrom(obj.getClass())) {
138186
Referable referable = (Referable) obj;
@@ -146,4 +194,32 @@ public RoleClassType.ExternalInterface getReferenceTargetInterface(Object obj, M
146194
}
147195
return result;
148196
}
197+
198+
public InternalElementType.RoleRequirements roleRequirement(String value) {
199+
return InternalElementType.RoleRequirements.builder()
200+
.withRefBaseRoleClassPath(documentInfo.getAssetAdministrationShellRoleClassLib() + "/" + value)
201+
.build();
202+
}
203+
204+
public AttributeType.RefSemantic refSemantic(Class<?> type, String propertyName) {
205+
return AttributeType.RefSemantic.builder()
206+
.withCorrespondingAttributePath(refSemanticPrefix + type.getSimpleName() + "/" + propertyName)
207+
.build();
208+
}
209+
210+
public AttributeType.RefSemantic refSemantic(PropertyDescriptor property) {
211+
return refSemantic(property.getReadMethod().getDeclaringClass(), property.getName());
212+
}
213+
214+
public String refBaseSystemUnitPath(Object value, Aas2AmlMappingContext context) {
215+
return documentInfo.getAssetAdministrationShellSystemUnitClassLib()
216+
+ "/" + context.getInternalElementNamingStrategy().getName(
217+
value.getClass(),
218+
value,
219+
null);
220+
}
221+
222+
public AmlDocumentInfo getDocumentInfo() {
223+
return documentInfo;
224+
}
149225
}

dataformat-aml/src/main/java/io/adminshell/aas/v3/dataformat/aml/AmlSerializationConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package io.adminshell.aas.v3.dataformat.aml;
1717

18+
import io.adminshell.aas.v3.dataformat.aml.id.UuidGenerator;
19+
import io.adminshell.aas.v3.dataformat.aml.id.IdGenerator;
1820
import java.util.ArrayList;
1921
import java.util.Arrays;
2022
import java.util.List;

dataformat-aml/src/main/java/io/adminshell/aas/v3/dataformat/aml/AmlSerializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
*/
1616
package io.adminshell.aas.v3.dataformat.aml;
1717

18+
import io.adminshell.aas.v3.dataformat.aml.aas2aml.AasToAmlMapper;
1819
import io.adminshell.aas.v3.dataformat.SerializationException;
1920
import io.adminshell.aas.v3.dataformat.Serializer;
2021
import io.adminshell.aas.v3.dataformat.aml.header.AutomationMLVersion;
2122
import io.adminshell.aas.v3.dataformat.aml.header.WriterHeader;
22-
import io.adminshell.aas.v3.dataformat.aml.mapper.MappingException;
2323
import io.adminshell.aas.v3.dataformat.aml.model.caex.CAEXFile;
24+
import io.adminshell.aas.v3.dataformat.mapping.MappingException;
2425
import io.adminshell.aas.v3.model.AssetAdministrationShellEnvironment;
2526
import java.io.IOException;
2627
import java.io.StringWriter;

0 commit comments

Comments
 (0)