Skip to content

Commit

Permalink
Update/v3.0 model (#93)
Browse files Browse the repository at this point in the history
Signed-off-by: Frank Schnicke <frank.schnicke@iese.fraunhofer.de>
Co-authored-by: Sebastian Bader <s.bader@sap.com>
Co-authored-by: Michael Jacoby <michael.jacoby@iosb.fraunhofer.de>
Co-authored-by: arnoweiss <arno.weiss@sap.com>
Co-authored-by: Frank Schnicke <frank.schnicke@iese.fraunhofer.de>
Co-authored-by: Thiago Weber Martins <thiago.weber.martins@sap.com>
  • Loading branch information
5 people committed Apr 13, 2023
1 parent 668e4bb commit 307ac9f
Show file tree
Hide file tree
Showing 242 changed files with 8,975 additions and 10,020 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Eclipse AAS4J

> :newspaper: The _`Eclipse AAS4J 1.0.0-milestone-02`_ release is available on Maven Central Repository and includes the following artifacts implementing the _AAS Specs – Part 1 V3.RC02_: `dataformat-core`, `dataformat-aasx`, `dataformat-xml`, `dataformat-json`, `dataformat-parent`, and `model`.
> :newspaper: The _`Eclipse AAS4J 1.0.0-milestone-03`_ release is available on Maven Central Repository and includes the following artifacts implementing the _AAS Specs – Part 1 V3.0 (final)_: `dataformat-core`, `dataformat-aasx`, `dataformat-xml`, `dataformat-json`, `dataformat-parent`, and `model`.
[Eclipse AA4J](https://projects.eclipse.org/projects/dt.aas4j) implements the specification of the Asset Administration Shell (AAS) such as metamodels, submodels, serialization and deserialization modules, validators, and transformation libraries based on the AAS specifications. It also contains all classes and properties as defined by the document 'Details of the Asset Administration Shell' published on [Industrial Digital Twin Association (IDTA)](https://industrialdigitaltwin.org/en/).

Expand Down Expand Up @@ -93,5 +93,4 @@ An updated list of the committers can be found here: https://projects.eclipse.or
| Arno Weiss | Fraunhofer IWU/SAP SE | [arnoweiss](https://github.com/arnoweiss) | | | | x | | | x | | |
| Jan Blume | Fraunhofer IOSB | []() | | | | | | | | | x |

This project was initiated by SAP and Fraunhofer to provide a foundation for the
AAS development and to foster its dissemination.
This project was initiated by SAP and Fraunhofer to provide a foundation for the AAS development and to foster its dissemination.
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,16 @@
import javax.xml.parsers.ParserConfigurationException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.aasx.AASXValidator;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.xml.sax.SAXException;

import org.eclipse.digitaltwin.aas4j.v3.dataformat.DeserializationException;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.SerializationException;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.aasx.AASXSerializer;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.aasx.AASXValidator;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.aasx.InMemoryFile;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.AASSimple;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.xml.sax.SAXException;

public class ValidationTest {

Expand All @@ -55,7 +54,7 @@ public void validateXmlInsideAasx() throws SerializationException, IOException,

File file = tempFolder.newFile("output.aasx");

new AASXSerializer().write(AASSimple.ENVIRONMENT, fileList, new FileOutputStream(file));
new AASXSerializer().write(AASSimple.createEnvironment(), fileList, new FileOutputStream(file));

InputStream in = new FileInputStream(file);
AASXValidator v = new AASXValidator(in);
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,17 @@

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.ReflectionHelper;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.AasUtils;
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeDefXsd;
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeIEC61360;
import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.ReflectionHelper;
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeDefXSD;
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeIec61360;
import org.eclipse.digitaltwin.aas4j.v3.model.Direction;
import org.eclipse.digitaltwin.aas4j.v3.model.StateOfEvent;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

/**
* Serializes enum values. If enum is part of the AAS Java model, the name will
* be converted from SCREAMING_SNAKE_CASE to UpperCamelCase, else default
Expand All @@ -38,18 +39,20 @@ public class EnumSerializer extends JsonSerializer<Enum> {

@Override
public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (value instanceof DataTypeDefXsd) {
if (value instanceof DataTypeDefXSD) {
// only for the DataTypeDefXsd notation
if (value.equals(DataTypeDefXsd.ANY_URI)) {
if (value.equals(DataTypeDefXSD.ANY_URI)) {
gen.writeString("xs:anyURI");
} else if (value.equals(DataTypeDefXsd.NON_NEGATIVE_INTEGER)) {
gen.writeString("xs:NonNegativeInteger");
} else if (value.equals(DataTypeDefXSD.NON_NEGATIVE_INTEGER)) {
gen.writeString("xs:nonNegativeInteger");
} else if(isTimeRelatedValue(value)) {
handleTimeRelatedValue(gen, value);
} else {
// pattern: 'xs:' + camelCase
String enum_string = AasUtils.serializeEnumName(value.name());
gen.writeString("xs:" + enum_string.substring(0, 1).toLowerCase() + enum_string.substring(1));
}
} else if (value instanceof DataTypeIEC61360) {
} else if (value instanceof DataTypeIec61360) {
gen.writeString(value.name().toUpperCase());
} else if (value instanceof Direction || value instanceof StateOfEvent) {
gen.writeString(value.name().toLowerCase());
Expand All @@ -60,4 +63,15 @@ public void serialize(Enum value, JsonGenerator gen, SerializerProvider provider
}
}

private void handleTimeRelatedValue(JsonGenerator gen, Enum value) throws IOException {
String enum_string = AasUtils.serializeEnumName(value.name());
String adaptedEnumString = "xs:g" + enum_string.substring(1, 2).toUpperCase() + enum_string.substring(2);
gen.writeString(adaptedEnumString);
}

private boolean isTimeRelatedValue(Enum value) {
String enum_string = AasUtils.serializeEnumName(value.name());
return enum_string.startsWith("G");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public static Reference parseReference(String value, Class<? extends Reference>
if (result.getType() == null) {
// deduct from first element
result.setType(result.getKeys().get(0).getType() == KeyTypes.GLOBAL_REFERENCE
? ReferenceTypes.GLOBAL_REFERENCE
? ReferenceTypes.EXTERNAL_REFERENCE
: ReferenceTypes.MODEL_REFERENCE);
} else {
// validate against first element
Expand Down Expand Up @@ -159,7 +159,7 @@ private static boolean isCompatible(KeyTypes keyType, ReferenceTypes referenceTy
if (keyType == null ^ referenceType == null) {
return false;
}
return referenceType == ReferenceTypes.GLOBAL_REFERENCE
return referenceType == ReferenceTypes.EXTERNAL_REFERENCE
? keyType == KeyTypes.GLOBAL_REFERENCE
: keyType != KeyTypes.GLOBAL_REFERENCE;
}
Expand Down Expand Up @@ -249,7 +249,7 @@ public static List<Submodel> getSubmodelTemplates(AssetAdministrationShell aas,
return aas.getSubmodels().stream()
.map(ref -> resolve(ref, environment, Submodel.class))
.filter(sm -> sm != null)
.filter(sm -> sm.getKind() != ModelingKind.INSTANCE)
.filter(sm -> sm.getKind() != ModellingKind.INSTANCE)
.collect(Collectors.toList());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,45 +15,7 @@
*/
package org.eclipse.digitaltwin.aas4j.v3.dataformat.core.visitor;

import org.eclipse.digitaltwin.aas4j.v3.model.AdministrativeInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.AnnotatedRelationshipElement;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
import org.eclipse.digitaltwin.aas4j.v3.model.AssetInformation;
import org.eclipse.digitaltwin.aas4j.v3.model.BasicEventElement;
import org.eclipse.digitaltwin.aas4j.v3.model.Blob;
import org.eclipse.digitaltwin.aas4j.v3.model.Capability;
import org.eclipse.digitaltwin.aas4j.v3.model.ConceptDescription;
import org.eclipse.digitaltwin.aas4j.v3.model.DataElement;
import org.eclipse.digitaltwin.aas4j.v3.model.DataSpecificationContent;
import org.eclipse.digitaltwin.aas4j.v3.model.Entity;
import org.eclipse.digitaltwin.aas4j.v3.model.Environment;
import org.eclipse.digitaltwin.aas4j.v3.model.EventElement;
import org.eclipse.digitaltwin.aas4j.v3.model.EventPayload;
import org.eclipse.digitaltwin.aas4j.v3.model.Extension;
import org.eclipse.digitaltwin.aas4j.v3.model.File;
import org.eclipse.digitaltwin.aas4j.v3.model.HasDataSpecification;
import org.eclipse.digitaltwin.aas4j.v3.model.HasExtensions;
import org.eclipse.digitaltwin.aas4j.v3.model.HasKind;
import org.eclipse.digitaltwin.aas4j.v3.model.HasSemantics;
import org.eclipse.digitaltwin.aas4j.v3.model.Identifiable;
import org.eclipse.digitaltwin.aas4j.v3.model.Key;
import org.eclipse.digitaltwin.aas4j.v3.model.LangString;
import org.eclipse.digitaltwin.aas4j.v3.model.MultiLanguageProperty;
import org.eclipse.digitaltwin.aas4j.v3.model.Operation;
import org.eclipse.digitaltwin.aas4j.v3.model.OperationVariable;
import org.eclipse.digitaltwin.aas4j.v3.model.Property;
import org.eclipse.digitaltwin.aas4j.v3.model.Qualifiable;
import org.eclipse.digitaltwin.aas4j.v3.model.Qualifier;
import org.eclipse.digitaltwin.aas4j.v3.model.Range;
import org.eclipse.digitaltwin.aas4j.v3.model.Referable;
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
import org.eclipse.digitaltwin.aas4j.v3.model.ReferenceElement;
import org.eclipse.digitaltwin.aas4j.v3.model.RelationshipElement;
import org.eclipse.digitaltwin.aas4j.v3.model.Resource;
import org.eclipse.digitaltwin.aas4j.v3.model.SpecificAssetId;
import org.eclipse.digitaltwin.aas4j.v3.model.Submodel;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelElement;
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelElementCollection;
import org.eclipse.digitaltwin.aas4j.v3.model.*;

public interface AssetAdministrationShellElementVisitor {

Expand Down Expand Up @@ -141,8 +103,8 @@ public default void visit(HasSemantics hasSemantics) {
Class<?> type = hasSemantics.getClass();
if (Extension.class.isAssignableFrom(type)) {
visit((Extension) hasSemantics);
} else if (SpecificAssetId.class.isAssignableFrom(type)) {
visit((SpecificAssetId) hasSemantics);
} else if (SpecificAssetID.class.isAssignableFrom(type)) {
visit((SpecificAssetID) hasSemantics);
} else if (Submodel.class.isAssignableFrom(type)) {
visit((Submodel) hasSemantics);
} else if (SubmodelElement.class.isAssignableFrom(type)) {
Expand Down Expand Up @@ -253,13 +215,22 @@ public default void visit(Extension extension) {
public default void visit(File file) {
}

public default void visit(SpecificAssetId identifierKeyValuePair) {
public default void visit(SpecificAssetID identifierKeyValuePair) {
}

public default void visit(Key key) {
}

public default void visit(LangString langString) {
public default void visit(LangStringNameType langString) {
}

public default void visit(LangStringDefinitionTypeIec61360 langString) {
}

public default void visit(LangStringTextType langString) {
}

public default void visit(LangStringPreferredNameTypeIec61360 langString) {
}

public default void visit(MultiLanguageProperty multiLanguageProperty) {
Expand Down

0 comments on commit 307ac9f

Please sign in to comment.