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

Commit f4af62b

Browse files
committed
refactoring and javadoc
1 parent 99c216f commit f4af62b

72 files changed

Lines changed: 4618 additions & 674 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/AmlDeserializationConfig.java

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

18+
import io.adminshell.aas.v3.dataformat.aml.deserialization.AasTypeFactory;
19+
1820
public class AmlDeserializationConfig {
21+
public static Builder builder() {
22+
return new Builder();
23+
}
24+
25+
private final AasTypeFactory typeFactory;
26+
27+
private AmlDeserializationConfig(AasTypeFactory typeFactory) {
28+
this.typeFactory = typeFactory;
29+
}
30+
public AasTypeFactory getTypeFactory() {
31+
return typeFactory;
32+
}
33+
34+
public static class Builder {
35+
36+
private AasTypeFactory typeFactory = new AasTypeFactory();
37+
38+
public AmlDeserializationConfig build() {
39+
return new AmlDeserializationConfig(typeFactory);
40+
}
41+
42+
public Builder typeFactory(AasTypeFactory value) {
43+
this.typeFactory = value;
44+
return this;
45+
}
46+
}
1947

2048
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import io.adminshell.aas.v3.dataformat.DeserializationException;
1919
import io.adminshell.aas.v3.dataformat.Deserializer;
20-
import io.adminshell.aas.v3.dataformat.aml.aml2aas.Aml2AasMapper;
20+
import io.adminshell.aas.v3.dataformat.aml.deserialization.Aml2AasMapper;
2121
import io.adminshell.aas.v3.dataformat.aml.model.caex.CAEXFile;
2222
import io.adminshell.aas.v3.dataformat.mapping.MappingException;
2323
import io.adminshell.aas.v3.model.AssetAdministrationShellEnvironment;
@@ -28,6 +28,9 @@
2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;
3030

31+
/**
32+
* Class for deserializing/parsing AAS AML documents.
33+
*/
3134
public class AmlDeserializer implements Deserializer {
3235

3336
private static final Logger log = LoggerFactory.getLogger(AmlDeserializer.class);
@@ -38,7 +41,7 @@ public AssetAdministrationShellEnvironment read(String value) throws Deserializa
3841
Unmarshaller unmarshaller = JAXBContextFactory.createContext(new Class[]{CAEXFile.class}, null).createUnmarshaller();
3942
StringReader reader = new StringReader(value);
4043
CAEXFile aml = (CAEXFile) unmarshaller.unmarshal(reader);
41-
Aml2AasMapper mapper = new Aml2AasMapper(new AmlDeserializationConfig());
44+
Aml2AasMapper mapper = new Aml2AasMapper(new AmlDeserializationConfig.Builder().build());
4245
return mapper.map(aml);
4346
} catch (JAXBException ex) {
4447
throw new DeserializationException("error deserializing AssetAdministrationShellEnvironment", ex);

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

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

18+
import io.adminshell.aas.v3.dataformat.aml.model.caex.CAEXFile;
19+
import io.adminshell.aas.v3.model.AssetAdministrationShell;
20+
import io.adminshell.aas.v3.model.ConceptDescription;
21+
import java.util.Set;
22+
import java.util.stream.Collectors;
23+
1824
public class AmlDocumentInfo {
1925

2026
public static final String DEFAULT_ASSET_ADMINISTRATION_SHELL_INSTANCE_HIERARCHY = "AssetAdministrationShellInstanceHierarchy";
@@ -44,9 +50,21 @@ public AmlDocumentInfo(
4450
String assetAdministrationShellInstanceHierarchy,
4551
String conceptDescriptionInstanceHierarchy,
4652
String assetAdministrationShellSystemUnitClassLib) {
47-
this.assetAdministrationShellSystemUnitClassLib = assetAdministrationShellSystemUnitClassLib;
48-
this.assetAdministrationShellInstanceHierarchy = assetAdministrationShellInstanceHierarchy;
49-
this.conceptDescriptionInstanceHierarchy = conceptDescriptionInstanceHierarchy;
53+
if (assetAdministrationShellInstanceHierarchy == null || assetAdministrationShellInstanceHierarchy.isBlank()) {
54+
this.assetAdministrationShellInstanceHierarchy = DEFAULT_ASSET_ADMINISTRATION_SHELL_INSTANCE_HIERARCHY;
55+
} else {
56+
this.assetAdministrationShellInstanceHierarchy = assetAdministrationShellInstanceHierarchy;
57+
}
58+
if (assetAdministrationShellSystemUnitClassLib == null || assetAdministrationShellSystemUnitClassLib.isBlank()) {
59+
this.assetAdministrationShellSystemUnitClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_SYSTEM_UNIT_CLASS_LIB;
60+
} else {
61+
this.assetAdministrationShellSystemUnitClassLib = assetAdministrationShellSystemUnitClassLib;
62+
}
63+
if (conceptDescriptionInstanceHierarchy == null || conceptDescriptionInstanceHierarchy.isBlank()) {
64+
this.conceptDescriptionInstanceHierarchy = DEFAULT_CONCEPT_DESCRIPTION_INSTANCE_HIERARCHY;
65+
} else {
66+
this.conceptDescriptionInstanceHierarchy = conceptDescriptionInstanceHierarchy;
67+
}
5068
this.dataSpecificationTemplatesSystemUnitClassLib = DEFAULT_DATA_SPECIFICATION_TEMPLATES_UNIT_CLASS_LIB;
5169
this.assetAdministrationShellRoleClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB;
5270
this.assetAdministrationShellInterfaceClassLib = DEFAULT_ASSET_ADMINISTRATION_SHELL_INTERFACE_CLASS_LIB;
@@ -75,4 +93,46 @@ public String getAssetAdministrationShellRoleClassLib() {
7593
public String getAssetAdministrationShellInterfaceClassLib() {
7694
return assetAdministrationShellInterfaceClassLib;
7795
}
96+
97+
public static AmlDocumentInfo fromFile(CAEXFile file) {
98+
String aasInstanceHierarchy = findInstanceHierarchy(file, AssetAdministrationShell.class);
99+
String conceptDescriptionInstanceHierarchy = findInstanceHierarchy(file, ConceptDescription.class);
100+
String aasSystemUnitClassLib = findSystemUnitClassLib(file, AssetAdministrationShell.class);
101+
return new AmlDocumentInfo(aasInstanceHierarchy, conceptDescriptionInstanceHierarchy, aasSystemUnitClassLib);
102+
}
103+
104+
private static String findInstanceHierarchy(CAEXFile file, Class<?> type) {
105+
String typeName = type.getSimpleName();
106+
Set<String> instanceHierarchies = file.getInstanceHierarchy().stream()
107+
.filter(x -> x.getInternalElement().stream()
108+
.anyMatch(y -> y.getRoleRequirements()
109+
.equals(DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB + "/" + typeName)))
110+
.map(x -> x.getName())
111+
.collect(Collectors.toSet());
112+
if (instanceHierarchies.size() > 1) {
113+
throw new IllegalArgumentException(String.format("found %d InstanceHierarchy containing %s definitions (%s), required exactly 1",
114+
instanceHierarchies.size(),
115+
typeName,
116+
instanceHierarchies.stream().collect(Collectors.joining(","))));
117+
}
118+
return instanceHierarchies.isEmpty() ? null : instanceHierarchies.iterator().next();
119+
}
120+
121+
private static String findSystemUnitClassLib(CAEXFile file, Class<?> type) {
122+
String typeName = type.getSimpleName();
123+
Set<String> systemUnitClassLibs = file.getSystemUnitClassLib().stream()
124+
.filter(x -> x.getSystemUnitClass().stream()
125+
.anyMatch(y -> y.getSupportedRoleClass()
126+
.equals(DEFAULT_ASSET_ADMINISTRATION_SHELL_ROLE_CLASS_LIB + "/" + typeName)))
127+
.map(x -> x.getName())
128+
.collect(Collectors.toSet());
129+
if (systemUnitClassLibs.size() > 1) {
130+
throw new IllegalArgumentException(String.format("found %d SystemUnitClass containing %s definitions (%s), required exactly 1",
131+
systemUnitClassLibs.size(),
132+
typeName,
133+
systemUnitClassLibs.stream().collect(Collectors.joining(","))));
134+
}
135+
return systemUnitClassLibs.isEmpty() ? null : systemUnitClassLibs.iterator().next();
136+
}
137+
78138
}

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

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
package io.adminshell.aas.v3.dataformat.aml;
1717

1818
import io.adminshell.aas.v3.dataformat.aml.header.WriterInfo;
19-
import io.adminshell.aas.v3.dataformat.aml.id.UuidGenerator;
20-
import io.adminshell.aas.v3.dataformat.aml.id.IdGenerator;
19+
import io.adminshell.aas.v3.dataformat.aml.serialization.id.UuidGenerator;
20+
import io.adminshell.aas.v3.dataformat.aml.serialization.id.IdGenerator;
2121
import java.util.ArrayList;
2222
import java.util.Arrays;
2323
import java.util.List;
2424

25+
/**
26+
* Configuration class for AML serialization. This class is immutable.
27+
*/
2528
public class AmlSerializationConfig {
2629

2730
public static final String DEFAULT_SCHEMA_VERSION = "2.15";
@@ -34,7 +37,7 @@ public static Builder builder() {
3437
}
3538

3639
private final IdGenerator idGenerator;
37-
private final String schemaVersion;
40+
private final String caexSchemaVersion;
3841
private final String amlVersion;
3942
private final String filename;
4043
private final boolean includeLibraries;
@@ -50,34 +53,66 @@ private AmlSerializationConfig(
5053
WriterInfo writerInfo,
5154
List<Object> additionalInformation) {
5255
this.idGenerator = idGenerator;
53-
this.schemaVersion = schemaVersion;
56+
this.caexSchemaVersion = schemaVersion;
5457
this.amlVersion = amlVersion;
5558
this.filename = filename;
5659
this.includeLibraries = includeLibraries;
5760
this.writerInfo = writerInfo;
5861
this.additionalInformation = additionalInformation;
5962
}
6063

64+
/**
65+
* Indicates if the predefined AAS libraries should be included in the
66+
* result or not
67+
*
68+
* @return true is they should be included, otherwise false
69+
*/
6170
public boolean isIncludeLibraries() {
6271
return includeLibraries;
6372
}
6473

74+
/**
75+
* The IdGenerator used for AML creation. Default are UUID-based IDs but
76+
* custom IdGenerator can be used.
77+
*
78+
* @return the IdGenerator to use
79+
*/
6580
public IdGenerator getIdGenerator() {
6681
return idGenerator;
6782
}
6883

84+
/**
85+
* Gets additional information that should be included in the file header
86+
*
87+
* @return list of additional information objects
88+
*/
6989
public List<Object> getAdditionalInformation() {
7090
return additionalInformation;
7191
}
7292

73-
public String getSchemaVersion() {
74-
return schemaVersion;
93+
/**
94+
* Gets the CAEX schema version
95+
*
96+
* @return the CAEX schema version
97+
*/
98+
public String getCaexSchemaVersion() {
99+
return caexSchemaVersion;
75100
}
76101

102+
/**
103+
* Gets the AML version
104+
*
105+
* @return the AML version
106+
*/
77107
public String getAmlVersion() {
78108
return amlVersion;
79109
}
80110

111+
/**
112+
* Gets the WriterInfo header to include in AML
113+
*
114+
* @return the WriterInfo
115+
*/
81116
public WriterInfo getWriterInfo() {
82117
return writerInfo;
83118
}
@@ -90,7 +125,7 @@ public static class Builder {
90125
private String filename = DEFAULT_FILENAME;
91126
private boolean includeLibraries = true;
92127
private WriterInfo writerInfo = null;
93-
private List<Object> additionalInformation = new ArrayList<>();
128+
private final List<Object> additionalInformation = new ArrayList<>();
94129

95130
public AmlSerializationConfig build() {
96131
return new AmlSerializationConfig(

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

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

18-
import io.adminshell.aas.v3.dataformat.aml.aas2aml.AasToAmlMapper;
18+
import io.adminshell.aas.v3.dataformat.aml.serialization.AasToAmlMapper;
1919
import io.adminshell.aas.v3.dataformat.SerializationException;
2020
import io.adminshell.aas.v3.dataformat.Serializer;
2121
import io.adminshell.aas.v3.dataformat.aml.header.AutomationMLVersion;
@@ -32,19 +32,30 @@
3232
import org.slf4j.Logger;
3333
import org.slf4j.LoggerFactory;
3434

35+
/**
36+
* Class for serializing an instance of AssetAdministrationShellEnvironment to
37+
* AML.
38+
*/
3539
public class AmlSerializer implements Serializer {
3640

3741
private static final String AAS_LIB_SOURCE = "/AssetAdministrationShellLib.aml";
3842
private static final Logger log = LoggerFactory.getLogger(AmlSerializer.class);
3943

40-
public AmlSerializer() {
41-
}
42-
4344
@Override
4445
public String write(AssetAdministrationShellEnvironment aasEnvironment) throws SerializationException {
4546
return write(aasEnvironment, AmlSerializationConfig.DEFAULT);
4647
}
4748

49+
/**
50+
* Serializes a given instance of AssetAdministrationShellEnvironment to
51+
* string
52+
*
53+
* @param aasEnvironment the AssetAdministrationShellEnvironment to
54+
* serialize
55+
* @param config serialization configuration
56+
* @return the string representation of the environment
57+
* @throws SerializationException if serialization fails
58+
*/
4859
public String write(AssetAdministrationShellEnvironment aasEnvironment, AmlSerializationConfig config) throws SerializationException {
4960
try {
5061
CAEXFile aml = new AasToAmlMapper().map(aasEnvironment, config);
@@ -72,7 +83,6 @@ public String write(AssetAdministrationShellEnvironment aasEnvironment, AmlSeria
7283
}
7384

7485
private CAEXFile addAASLibrary(CAEXFile file) throws JAXBException, IOException {
75-
// potential issue: when dynamically adding custom DataSpecificationTemplates this won't work
7686
CAEXFile aasLib = loadAASLibrary();
7787
return CAEXFile.copyOf(file)
7888
.addInterfaceClassLib(aasLib.getInterfaceClassLib())

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

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)