Skip to content

Commit 9a23b46

Browse files
committed
Add id prefix to all generated idShort to prevent bamm entity names with only one letter violating AAS.XSD
Signed-off-by: Johannes Kristan <[email protected]>
1 parent ff1eb23 commit 9a23b46

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

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

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.jena.rdf.model.ResourceFactory;
2828
import org.apache.jena.vocabulary.RDF;
2929
import org.apache.jena.vocabulary.XSD;
30+
import org.eclipse.digitaltwin.aas4j.v3.model.AasSubmodelElements;
3031
import org.eclipse.digitaltwin.aas4j.v3.model.AdministrativeInformation;
3132
import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell;
3233
import org.eclipse.digitaltwin.aas4j.v3.model.AssetKind;
@@ -101,6 +102,7 @@ public class AspectModelAASVisitor implements AspectVisitor<Environment, Context
101102
public static final String ADMIN_SHELL_NAME = "defaultAdminShell";
102103
public static final String DEFAULT_LOCALE = "EN";
103104
public static final String CONCEPT_DESCRIPTION_CATEGORY = "APPLICATION_CLASS";
105+
public static final String ID_PREFIX = "id_";
104106

105107
/**
106108
* Maps Aspect types to DataTypeIEC61360 Schema types, with no explicit mapping defaulting to
@@ -202,7 +204,7 @@ public Environment visitAspect( final Aspect aspect, Context context ) {
202204

203205
final AssetAdministrationShell administrationShell =
204206
new DefaultAssetAdministrationShell.Builder()
205-
.idShort( ADMIN_SHELL_NAME )
207+
.idShort( ID_PREFIX + ADMIN_SHELL_NAME )
206208
.description( createLangString( ADMIN_SHELL_NAME, "en" ) )
207209
.checksum( "a checksum" )
208210
.id( ADMIN_SHELL_NAME )
@@ -291,7 +293,7 @@ private SubmodelElementCollection mapToAasSubModelElementCollection(
291293
final List<SubmodelElement> submodelElements =
292294
visitProperties( entity.getAllProperties(), context );
293295
return new DefaultSubmodelElementCollection.Builder()
294-
.idShort( entity.getName() )
296+
.idShort( ID_PREFIX + entity.getName() )
295297
.displayName( map( entity.getPreferredNames() ) )
296298
.description( map( entity.getDescriptions() ) )
297299
.value( submodelElements )
@@ -301,7 +303,7 @@ private SubmodelElementCollection mapToAasSubModelElementCollection(
301303

302304
private org.eclipse.digitaltwin.aas4j.v3.model.Property mapToAasProperty( final Property property ) {
303305
return new DefaultProperty.Builder()
304-
.idShort( property.getName() )
306+
.idShort( ID_PREFIX + property.getName() )
305307
.kind( ModelingKind.TEMPLATE )
306308
.valueType( mapAASXSDataType( property.getCharacteristic().flatMap( Characteristic::getDataType ).map( this::mapType ).orElse( UNKNOWN_TYPE ) ) )
307309
.displayName( map( property.getPreferredNames() ) )
@@ -325,7 +327,7 @@ private Operation map(
325327
return new DefaultOperation.Builder()
326328
.displayName( map( operation.getPreferredNames() ) )
327329
.description( map( operation.getDescriptions() ) )
328-
.idShort( operation.getName() )
330+
.idShort( ID_PREFIX + operation.getName() )
329331
.inputVariables(
330332
operation.getInput().stream()
331333
.map( i -> mapOperationVariable( i, context ) )
@@ -419,7 +421,7 @@ private void createConceptDescription( final Property property, final Context co
419421
if ( !context.hasEnvironmentConceptDescription( property.getAspectModelUrn().toString() ) ) {
420422
final ConceptDescription conceptDescription =
421423
new DefaultConceptDescription.Builder()
422-
.idShort( characteristic.getName() )
424+
.idShort( ID_PREFIX + characteristic.getName() )
423425
.displayName( map( characteristic.getPreferredNames() ) )
424426
.embeddedDataSpecifications( extractEmbeddedDataSpecification( property ) )
425427
.id( extractIdentifier( property ) )
@@ -433,7 +435,7 @@ private void createConceptDescription( final Aspect aspect, final Context contex
433435
if ( !context.hasEnvironmentConceptDescription( aspect.getAspectModelUrn().toString() ) ) {
434436
final ConceptDescription conceptDescription =
435437
new DefaultConceptDescription.Builder()
436-
.idShort( aspect.getName() )
438+
.idShort( ID_PREFIX + aspect.getName() )
437439
.displayName( map( aspect.getPreferredNames() ) )
438440
.embeddedDataSpecifications( extractEmbeddedDataSpecification( aspect ) )
439441
.id( extractIdentifier( aspect ) )
@@ -502,7 +504,8 @@ private DataTypeIEC61360 mapIEC61360DataType( final String urn ) {
502504

503505
private DataTypeDefXsd mapAASXSDataType( final String urn ) {
504506
final Resource resource = ResourceFactory.createResource( urn );
505-
return AAS_XSD_TYPE_MAP.getOrDefault( resource, DataTypeDefXsd.STRING );
507+
DataTypeDefXsd dataTypeDefXsd = AAS_XSD_TYPE_MAP.getOrDefault( resource, DataTypeDefXsd.STRING );
508+
return dataTypeDefXsd;
506509
}
507510

508511
private void createSubmodelElement( final SubmodelElementBuilder op, final Context context ) {
@@ -525,7 +528,7 @@ public Environment visitCollection(
525528
final SubmodelElementBuilder builder =
526529
( property ) ->
527530
new DefaultSubmodelElementCollection.Builder()
528-
.idShort( property.getName() )
531+
.idShort( ID_PREFIX + property.getName() )
529532
.displayName( map( property.getPreferredNames() ) )
530533
.description( map( property.getDescriptions() ) )
531534
.value( Collections.singletonList( decideOnMapping( property, context ) ) )
@@ -542,7 +545,8 @@ public Environment visitList(
542545
final SubmodelElementBuilder builder =
543546
( property ) ->
544547
new DefaultSubmodelElementList.Builder()
545-
.idShort( property.getName() )
548+
.idShort( ID_PREFIX + property.getName() )
549+
.typeValueListElement( AasSubmodelElements.DATA_ELEMENT ) // TODO check if more specific type info is required
546550
.displayName( map( property.getPreferredNames() ) )
547551
.description( map( property.getDescriptions() ) )
548552
.value( Collections.singletonList( decideOnMapping( property, context ) ) )
@@ -557,7 +561,7 @@ public Environment visitSet(
557561
final SubmodelElementBuilder builder =
558562
( property ) ->
559563
new DefaultSubmodelElementCollection.Builder() //TODO according to the standard document this should be SubmodelEleementStruct. However, this type is not available in AAS4J
560-
.idShort( property.getName() )
564+
.idShort( ID_PREFIX + property.getName() )
561565
.displayName( map( property.getPreferredNames() ) )
562566
.description( map( property.getDescriptions() ) )
563567
.value( Collections.singletonList( decideOnMapping( property, context ) ) )
@@ -573,7 +577,8 @@ public Environment visitSortedSet(
573577
final SubmodelElementBuilder builder =
574578
( property ) ->
575579
new DefaultSubmodelElementList.Builder()
576-
.idShort( property.getName() )
580+
.idShort( ID_PREFIX + property.getName() )
581+
.typeValueListElement( AasSubmodelElements.DATA_ELEMENT ) // TODO check if more specific type info is reuired
577582
.displayName( map( property.getPreferredNames() ) )
578583
.description( map( property.getDescriptions() ) )
579584
.value( Collections.singletonList( decideOnMapping( property, context ) ) )
@@ -599,7 +604,8 @@ public Environment visitEither(
599604
}
600605
final SubmodelElementList aasSubModelElementCollection =
601606
new DefaultSubmodelElementList.Builder()
602-
.idShort( either.getName() )
607+
.idShort( ID_PREFIX + either.getName() )
608+
.typeValueListElement( AasSubmodelElements.DATA_ELEMENT ) // TODO check if more specific type info is rqujried
603609
.displayName( map( either.getPreferredNames() ) )
604610
.description( map( either.getDescriptions() ) )
605611
.value( submodelElements )

0 commit comments

Comments
 (0)