Skip to content

Commit 7c6d969

Browse files
Merge branch 'migrate_aas_generator_to_aas4j' into feature/add-generator-for-submodels
# Conflicts: # core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/AspectModelAASVisitor.java # core/sds-aspect-model-aas-generator/src/test/java/io/openmanufacturing/sds/aspectmodel/aas/AspectModelAASGeneratorTest.java
2 parents 2e8d9cd + 585edf0 commit 7c6d969

File tree

8 files changed

+272
-200
lines changed

8 files changed

+272
-200
lines changed

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/AspectModelAASVisitor.java

Lines changed: 91 additions & 90 deletions
Large diffs are not rendered by default.

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/Context.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
2525
import org.eclipse.digitaltwin.aas4j.v3.model.ConceptDescription;
2626
import org.eclipse.digitaltwin.aas4j.v3.model.Environment;
27-
import org.eclipse.digitaltwin.aas4j.v3.model.ModelingKind;
27+
import org.eclipse.digitaltwin.aas4j.v3.model.ModellingKind;
2828
import org.eclipse.digitaltwin.aas4j.v3.model.Submodel;
2929
import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelElement;
3030

@@ -138,12 +138,12 @@ public void setAspectData( final JsonNode aspectData ) {
138138
this.aspectData = aspectData;
139139
}
140140

141-
public ModelingKind getModelingKind() {
141+
public ModellingKind getModelingKind() {
142142
if ( aspectData == null ) {
143-
return ModelingKind.TEMPLATE;
143+
return ModellingKind.TEMPLATE;
144144
}
145145

146-
return ModelingKind.INSTANCE;
146+
return ModellingKind.INSTANCE;
147147
}
148148

149149
public AssetKind getAssetKind() {
@@ -155,14 +155,18 @@ public AssetKind getAssetKind() {
155155
}
156156

157157
public String getPropertyShortId() {
158-
if ( ModelingKind.TEMPLATE.equals( getModelingKind() ) ) {
159-
return property.getName();
158+
final String shortId;
159+
if ( ModellingKind.TEMPLATE.equals( getModelingKind() ) ) {
160+
shortId = property.getName();
161+
} else {
162+
shortId = property.getName() + propertyPath.stream()
163+
.map( indices::get )
164+
.filter( Objects::nonNull )
165+
.map( Objects::toString )
166+
.collect( Collectors.joining( "_" ) );
160167
}
161-
return property.getName() + propertyPath.stream()
162-
.map( indices::get )
163-
.filter( Objects::nonNull )
164-
.map( Objects::toString )
165-
.collect( Collectors.joining( "_" ) );
168+
169+
return "id_" + shortId;
166170
}
167171

168172
/**

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/DefaultPropertyMapper.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@ public class DefaultPropertyMapper implements PropertyMapper<Property> {
2525
public Property mapToAasProperty( final Type type, final io.openmanufacturing.sds.metamodel.Property property, final Context context ) {
2626
return new DefaultProperty.Builder()
2727
.idShort( context.getPropertyShortId() )
28-
.kind( context.getModelingKind() )
2928
.valueType( mapAASXSDataType( mapType( type ) ) )
30-
.displayName( LANG_STRING_MAPPER.map( property.getPreferredNames() ) )
29+
.displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) )
3130
.value( context.getPropertyValue( UNKNOWN_EXAMPLE ) )
32-
.description( LANG_STRING_MAPPER.map( property.getDescriptions() ) )
33-
.semanticId( buildReferenceToConceptDescription( property ) )
31+
.description( LangStringMapper.TEXT.map( property.getDescriptions() ) )
32+
.semanticID( buildReferenceToConceptDescription( property ) )
3433
.build();
3534
}
3635

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/LangStringMapper.java

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,74 @@
1717
import java.util.Set;
1818
import java.util.stream.Collectors;
1919

20-
import org.eclipse.digitaltwin.aas4j.v3.model.LangString;
21-
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangString;
20+
import org.eclipse.digitaltwin.aas4j.v3.model.AbstractLangString;
21+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringDefinitionTypeIec61360;
22+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringNameType;
23+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringPreferredNameTypeIec61360;
24+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringShortNameTypeIec61360;
25+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringTextType;
26+
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringDefinitionTypeIec61360;
27+
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringNameType;
28+
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringPreferredNameTypeIec61360;
29+
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringShortNameTypeIec61360;
30+
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultLangStringTextType;
31+
32+
import io.openmanufacturing.sds.metamodel.datatypes.LangString;
2233

2334
/**
2435
* Default implementation of multiple ways to map Aspect Model {@code LangString}s to AAS4J {@link LangString}s.
2536
*/
26-
public class LangStringMapper {
27-
public List<LangString> map( final Set<io.openmanufacturing.sds.metamodel.datatypes.LangString> localizedStrings ) {
28-
return localizedStrings.stream()
29-
.map( ( entry ) -> map( entry.getLanguageTag(), entry.getValue() ) )
30-
.collect( Collectors.toList() );
31-
}
37+
public final class LangStringMapper {
38+
public static final Mapper<LangStringTextType> TEXT = new Mapper<>() {
39+
@Override
40+
public LangStringTextType createLangString( final String text, final String locale ) {
41+
return new DefaultLangStringTextType.Builder().text( text ).language( locale ).build();
42+
}
43+
};
3244

33-
public LangString map( final io.openmanufacturing.sds.metamodel.datatypes.LangString langString ) {
34-
return map( langString.getLanguageTag(), langString.getValue() );
35-
}
45+
public static final Mapper<LangStringNameType> NAME = new Mapper<>() {
46+
@Override
47+
public LangStringNameType createLangString( final String text, final String locale ) {
48+
return new DefaultLangStringNameType.Builder().text( text ).language( locale ).build();
49+
}
50+
};
3651

37-
public LangString map( final Locale locale, final String value ) {
38-
return createLangString( value, locale.getLanguage() );
39-
}
52+
public static final Mapper<LangStringShortNameTypeIec61360> SHORT_NAME = new Mapper<>() {
53+
@Override
54+
public LangStringShortNameTypeIec61360 createLangString( final String text, final String locale ) {
55+
return new DefaultLangStringShortNameTypeIec61360.Builder().text( text ).language( locale ).build();
56+
}
57+
};
58+
59+
public static final Mapper<LangStringPreferredNameTypeIec61360> PREFERRED_NAME = new Mapper<>() {
60+
@Override
61+
public LangStringPreferredNameTypeIec61360 createLangString( final String text, final String locale ) {
62+
return new DefaultLangStringPreferredNameTypeIec61360.Builder().text( text ).language( locale ).build();
63+
}
64+
};
65+
66+
public static final Mapper<LangStringDefinitionTypeIec61360> DEFINITION = new Mapper<>() {
67+
@Override
68+
public LangStringDefinitionTypeIec61360 createLangString( final String text, final String locale ) {
69+
return new DefaultLangStringDefinitionTypeIec61360.Builder().text( text ).language( locale ).build();
70+
}
71+
};
72+
73+
public interface Mapper<T extends AbstractLangString> {
74+
default List<T> map( final Set<LangString> langStrings ) {
75+
return langStrings.stream()
76+
.map( ( entry ) -> map( entry.getLanguageTag(), entry.getValue() ) )
77+
.collect( Collectors.toList() );
78+
}
79+
80+
default T map( final LangString langString ) {
81+
return map( langString.getLanguageTag(), langString.getValue() );
82+
}
83+
84+
default T map( final Locale locale, final String text ) {
85+
return createLangString( text, locale.getLanguage() );
86+
}
4087

41-
public LangString createLangString( final String text, final String locale ) {
42-
return new DefaultLangString.Builder().language( locale ).text( text ).build();
88+
T createLangString( String text, String locale );
4389
}
4490
}

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/LangStringPropertyMapper.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import java.util.Map;
1818

1919
import org.apache.jena.vocabulary.RDF;
20-
import org.eclipse.digitaltwin.aas4j.v3.model.LangString;
20+
import org.eclipse.digitaltwin.aas4j.v3.model.LangStringTextType;
2121
import org.eclipse.digitaltwin.aas4j.v3.model.MultiLanguageProperty;
2222
import org.eclipse.digitaltwin.aas4j.v3.model.impl.DefaultMultiLanguageProperty;
2323

@@ -42,15 +42,14 @@ public boolean canHandle( final io.openmanufacturing.sds.metamodel.Property prop
4242
@Override
4343
public MultiLanguageProperty mapToAasProperty( final Type type, final io.openmanufacturing.sds.metamodel.Property property, final Context context ) {
4444
return new DefaultMultiLanguageProperty.Builder().idShort( context.getPropertyShortId() )
45-
.kind( context.getModelingKind() )
46-
.description( LANG_STRING_MAPPER.map( property.getDescriptions() ) )
47-
.displayName( LANG_STRING_MAPPER.map( property.getPreferredNames() ) )
48-
.semanticId( buildReferenceToConceptDescription( property ) )
45+
.description( LangStringMapper.TEXT.map( property.getDescriptions() ) )
46+
.displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) )
47+
.semanticID( buildReferenceToConceptDescription( property ) )
4948
.value( extractLangStrings( property, context ) )
5049
.build();
5150
}
5251

53-
private List<LangString> extractLangStrings( final Property property, final Context context ) {
52+
private List<LangStringTextType> extractLangStrings( final Property property, final Context context ) {
5453
return context.getRawPropertyValue()
5554
.filter( JsonNode::isObject )
5655
.map( node -> {
@@ -60,7 +59,7 @@ private List<LangString> extractLangStrings( final Property property, final Cont
6059
} )
6160
.map( rawEntries -> rawEntries.entrySet()
6261
.stream()
63-
.map( entry -> LANG_STRING_MAPPER.createLangString( entry.getValue(), entry.getKey() ) )
62+
.map( entry -> LangStringMapper.TEXT.createLangString( entry.getValue(), entry.getKey() ) )
6463
.toList() )
6564
.orElseGet( () -> List.of() );
6665
}

core/sds-aspect-model-aas-generator/src/main/java/io/openmanufacturing/sds/aspectmodel/aas/PropertyMapper.java

Lines changed: 38 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import org.apache.jena.rdf.model.Resource;
1818
import org.apache.jena.rdf.model.ResourceFactory;
1919
import org.apache.jena.vocabulary.XSD;
20-
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeDefXsd;
20+
import org.eclipse.digitaltwin.aas4j.v3.model.DataTypeDefXSD;
2121
import org.eclipse.digitaltwin.aas4j.v3.model.Key;
2222
import org.eclipse.digitaltwin.aas4j.v3.model.KeyTypes;
2323
import org.eclipse.digitaltwin.aas4j.v3.model.Reference;
@@ -42,44 +42,42 @@ public interface PropertyMapper<T extends SubmodelElement> {
4242

4343
static final String UNKNOWN_EXAMPLE = UNKNOWN_TYPE;
4444

45-
static final LangStringMapper LANG_STRING_MAPPER = new LangStringMapper();
46-
4745
/**
48-
* Maps Aspect types to DataTypeDefXsd Schema types, with no explicit mapping defaulting to
46+
* Maps Aspect types to DataTypeDefXSD Schema types, with no explicit mapping defaulting to
4947
* string
5048
*/
51-
static final Map<Resource, DataTypeDefXsd> AAS_XSD_TYPE_MAP =
52-
ImmutableMap.<Resource, DataTypeDefXsd> builder()
53-
.put( XSD.anyURI, DataTypeDefXsd.ANY_URI )
54-
.put( XSD.yearMonthDuration, DataTypeDefXsd.YEAR_MONTH_DURATION )
55-
.put( XSD.xboolean, DataTypeDefXsd.BOOLEAN )
56-
.put( XSD.xbyte, DataTypeDefXsd.BYTE )
57-
.put( XSD.date, DataTypeDefXsd.DATE )
58-
.put( XSD.dateTime, DataTypeDefXsd.DATE_TIME )
59-
.put( XSD.dateTimeStamp, DataTypeDefXsd.DATE_TIME_STAMP )
60-
.put( XSD.dayTimeDuration, DataTypeDefXsd.DAY_TIME_DURATION )
61-
.put( XSD.decimal, DataTypeDefXsd.DECIMAL )
62-
.put( XSD.xdouble, DataTypeDefXsd.DOUBLE )
63-
.put( XSD.duration, DataTypeDefXsd.DURATION )
64-
.put( XSD.xfloat, DataTypeDefXsd.FLOAT )
65-
.put( XSD.gMonth, DataTypeDefXsd.GMONTH )
66-
.put( XSD.gMonthDay, DataTypeDefXsd.GMONTH_DAY )
67-
.put( XSD.gYear, DataTypeDefXsd.GYEAR )
68-
.put( XSD.gYearMonth, DataTypeDefXsd.GYEAR_MONTH )
69-
.put( XSD.hexBinary, DataTypeDefXsd.HEX_BINARY )
70-
.put( XSD.xint, DataTypeDefXsd.INT )
71-
.put( XSD.integer, DataTypeDefXsd.INTEGER )
72-
.put( XSD.xlong, DataTypeDefXsd.LONG )
73-
.put( XSD.negativeInteger, DataTypeDefXsd.NEGATIVE_INTEGER )
74-
.put( XSD.nonNegativeInteger, DataTypeDefXsd.NON_NEGATIVE_INTEGER )
75-
.put( XSD.positiveInteger, DataTypeDefXsd.POSITIVE_INTEGER )
76-
.put( XSD.xshort, DataTypeDefXsd.SHORT )
77-
.put( XSD.normalizedString, DataTypeDefXsd.STRING )
78-
.put( XSD.time, DataTypeDefXsd.TIME )
79-
.put( XSD.unsignedByte, DataTypeDefXsd.UNSIGNED_BYTE )
80-
.put( XSD.unsignedInt, DataTypeDefXsd.UNSIGNED_INT )
81-
.put( XSD.unsignedLong, DataTypeDefXsd.UNSIGNED_LONG )
82-
.put( XSD.unsignedShort, DataTypeDefXsd.UNSIGNED_SHORT )
49+
static final Map<Resource, DataTypeDefXSD> AAS_XSD_TYPE_MAP =
50+
ImmutableMap.<Resource, DataTypeDefXSD> builder()
51+
.put( XSD.anyURI, DataTypeDefXSD.ANY_URI )
52+
.put( XSD.yearMonthDuration, DataTypeDefXSD.DURATION )
53+
.put( XSD.xboolean, DataTypeDefXSD.BOOLEAN )
54+
.put( XSD.xbyte, DataTypeDefXSD.BYTE )
55+
.put( XSD.date, DataTypeDefXSD.DATE )
56+
.put( XSD.dateTime, DataTypeDefXSD.DATE_TIME )
57+
.put( XSD.dateTimeStamp, DataTypeDefXSD.DATE_TIME )
58+
.put( XSD.dayTimeDuration, DataTypeDefXSD.DURATION )
59+
.put( XSD.decimal, DataTypeDefXSD.DECIMAL )
60+
.put( XSD.xdouble, DataTypeDefXSD.DOUBLE )
61+
.put( XSD.duration, DataTypeDefXSD.DURATION )
62+
.put( XSD.xfloat, DataTypeDefXSD.FLOAT )
63+
.put( XSD.gMonth, DataTypeDefXSD.GMONTH )
64+
.put( XSD.gMonthDay, DataTypeDefXSD.GMONTH_DAY )
65+
.put( XSD.gYear, DataTypeDefXSD.GYEAR )
66+
.put( XSD.gYearMonth, DataTypeDefXSD.GYEAR_MONTH )
67+
.put( XSD.hexBinary, DataTypeDefXSD.HEX_BINARY )
68+
.put( XSD.xint, DataTypeDefXSD.INT )
69+
.put( XSD.integer, DataTypeDefXSD.INTEGER )
70+
.put( XSD.xlong, DataTypeDefXSD.LONG )
71+
.put( XSD.negativeInteger, DataTypeDefXSD.NEGATIVE_INTEGER )
72+
.put( XSD.nonNegativeInteger, DataTypeDefXSD.NON_NEGATIVE_INTEGER )
73+
.put( XSD.positiveInteger, DataTypeDefXSD.POSITIVE_INTEGER )
74+
.put( XSD.xshort, DataTypeDefXSD.SHORT )
75+
.put( XSD.normalizedString, DataTypeDefXSD.STRING )
76+
.put( XSD.time, DataTypeDefXSD.TIME )
77+
.put( XSD.unsignedByte, DataTypeDefXSD.UNSIGNED_BYTE )
78+
.put( XSD.unsignedInt, DataTypeDefXSD.UNSIGNED_INT )
79+
.put( XSD.unsignedLong, DataTypeDefXSD.UNSIGNED_LONG )
80+
.put( XSD.unsignedShort, DataTypeDefXSD.UNSIGNED_SHORT )
8381
.build();
8482

8583
/**
@@ -105,14 +103,14 @@ default boolean canHandle( final Property property ) {
105103
}
106104

107105
/**
108-
* Maps the given URN to a {@link DataTypeDefXsd} schema type.
106+
* Maps the given URN to a {@link DataTypeDefXSD} schema type.
109107
*
110108
* @param urn the URN to map
111-
* @return the {@code DataTypeDefXsd} for the given URN
109+
* @return the {@code DataTypeDefXSD} for the given URN
112110
*/
113-
default DataTypeDefXsd mapAASXSDataType( final String urn ) {
111+
default DataTypeDefXSD mapAASXSDataType( final String urn ) {
114112
final Resource resource = ResourceFactory.createResource( urn );
115-
return AAS_XSD_TYPE_MAP.getOrDefault( resource, DataTypeDefXsd.STRING );
113+
return AAS_XSD_TYPE_MAP.getOrDefault( resource, DataTypeDefXSD.STRING );
116114
}
117115

118116
/**

0 commit comments

Comments
 (0)