From 458c0c8f8b19e710783399886d31d74e2b7354c6 Mon Sep 17 00:00:00 2001 From: Yauhenikapl Date: Mon, 27 May 2024 09:57:33 +0300 Subject: [PATCH 1/2] Update generation of ExternalReference. Fixes #523 --- .../aas/DefaultPropertyMapper.java | 2 +- .../aas/LangStringPropertyMapper.java | 2 +- .../esmf/aspectmodel/aas/PropertyMapper.java | 4 ++-- .../aas/AspectModelAasGeneratorTest.java | 20 ++++++++++++++++--- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/DefaultPropertyMapper.java b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/DefaultPropertyMapper.java index 8cb5e0282..ef00bcbb5 100644 --- a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/DefaultPropertyMapper.java +++ b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/DefaultPropertyMapper.java @@ -28,7 +28,7 @@ public Property mapToAasProperty( final Type type, final org.eclipse.esmf.metamo .valueType( AasDataTypeMapper.mapAspectTypeToAasXsdDataType( mapType( type ) ) ) .displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) ) .value( context.getPropertyValue( UNKNOWN_EXAMPLE ) ) - .semanticId( buildReferenceToConceptDescription( property ) ) + .semanticId( buildReferenceToGlobalReference( property ) ) .build(); } diff --git a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/LangStringPropertyMapper.java b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/LangStringPropertyMapper.java index 6cefd4314..d60552e31 100644 --- a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/LangStringPropertyMapper.java +++ b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/LangStringPropertyMapper.java @@ -43,7 +43,7 @@ public MultiLanguageProperty mapToAasProperty( final Type type, final Property p return new DefaultMultiLanguageProperty.Builder().idShort( context.getPropertyShortId() ) .description( LangStringMapper.TEXT.map( property.getDescriptions() ) ) .displayName( LangStringMapper.NAME.map( property.getPreferredNames() ) ) - .semanticId( buildReferenceToConceptDescription( property ) ) + .semanticId( buildReferenceToGlobalReference( property ) ) .value( extractLangStrings( property, context ) ) .build(); } diff --git a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/PropertyMapper.java b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/PropertyMapper.java index 999dbf2e3..ecf206927 100644 --- a/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/PropertyMapper.java +++ b/core/esmf-aspect-model-aas-generator/src/main/java/org/eclipse/esmf/aspectmodel/aas/PropertyMapper.java @@ -61,9 +61,9 @@ default boolean canHandle( final Property property ) { * @param property the property to build the reference for * @return the newly created reference */ - default Reference buildReferenceToConceptDescription( final Property property ) { + default Reference buildReferenceToGlobalReference( final Property property ) { final Key key = new DefaultKey.Builder() - .type( KeyTypes.CONCEPT_DESCRIPTION ) + .type( KeyTypes.GLOBAL_REFERENCE ) .value( determineIdentifierFor( property ) ) .build(); return new DefaultReference.Builder().type( ReferenceTypes.EXTERNAL_REFERENCE ).keys( key ).build(); diff --git a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java index 3b5947585..fd79205aa 100644 --- a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java +++ b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java @@ -21,6 +21,7 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Set; + import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; @@ -80,7 +81,7 @@ void generateAasxWithAspectDataForMultilanguageText() throws DeserializationExce .asList() .hasSize( 2 ) .allSatisfy( langString -> - assertThat( List.of( "en", "de" ) ).contains( ( (AbstractLangString) langString ).getLanguage() ) ) ) ); + assertThat( List.of( "en", "de" ) ).contains( ((AbstractLangString) langString).getLanguage() ) ) ) ); } @Test @@ -217,7 +218,7 @@ void testGenerateAasxFromAspectModelWithEitherWithComplexTypes() throws Deserial final Environment env = getAssetAdministrationShellFromAspect( TestAspect.ASPECT_WITH_EITHER_WITH_COMPLEX_TYPES ); assertThat( env.getSubmodels() ).hasSize( 1 ); assertThat( env.getSubmodels().get( 0 ).getSubmodelElements() ).hasSize( 1 ); - final SubmodelElementList elementCollection = ( (SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 ) ); + final SubmodelElementList elementCollection = ((SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 )); final Set testValues = Set.of( "RightEntity", "LeftEntity" ); assertThat( elementCollection.getValue() ).as( "Neither left nor right entity contained." ) .anyMatch( x -> testValues.contains( x.getIdShort() ) ); @@ -240,7 +241,7 @@ void testGenerateAasxFromAspectModelWithQuantifiable() throws DeserializationExc final DataSpecificationContent dataSpecificationContent = getDataSpecificationIec61360( "urn:samm:org.eclipse.esmf.test:1.0.0#testProperty", env ); - assertThat( ( (DataSpecificationIec61360) dataSpecificationContent ).getUnit() ).isEqualTo( "percent" ); + assertThat( ((DataSpecificationIec61360) dataSpecificationContent).getUnit() ).isEqualTo( "percent" ); } @Test @@ -361,6 +362,19 @@ void testGeneratedAasxFromAspectModelWithPropertiesWithDescriptions() throws Des assertThat( property.getDescription() ).isEmpty(); } + @Test + void testGeneratedAasxFromAspectModelSemanticIdsAreGlobalReferences() throws DeserializationException { + final Environment environment = getAssetAdministrationShellFromAspect( TestAspect.ASPECT_WITH_PROPERTY_WITH_DESCRIPTIONS ); + + final Property property = (Property) environment.getSubmodels().get( 0 ).getSubmodelElements().get( 0 ); + + assertThat( environment.getSubmodels().get( 0 ).getSubmodelElements() ).hasSize( 1 ); + assertThat( environment.getConceptDescriptions() ).hasSize( 2 ); + assertThat( environment.getConceptDescriptions().get( 1 ).getEmbeddedDataSpecifications() ).hasSize( 1 ); + assertThat( property.getDescription() ).isEmpty(); + assertThat( property.getSemanticId().getKeys().get( 0 ).getType() ).isEqualTo( KeyTypes.GLOBAL_REFERENCE ); + } + private void checkDataSpecificationIec61360( final Set semanticIds, final Environment env ) { semanticIds.forEach( x -> getDataSpecificationIec61360( x, env ) ); } From ba54646c96ce6b7d4a9f5dd432ba5ea0454f1ed3 Mon Sep 17 00:00:00 2001 From: Yauhenikapl Date: Mon, 27 May 2024 11:33:27 +0300 Subject: [PATCH 2/2] fix code style --- .../esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java index fd79205aa..85a480a40 100644 --- a/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java +++ b/core/esmf-aspect-model-aas-generator/src/test/java/org/eclipse/esmf/aspectmodel/aas/AspectModelAasGeneratorTest.java @@ -81,7 +81,7 @@ void generateAasxWithAspectDataForMultilanguageText() throws DeserializationExce .asList() .hasSize( 2 ) .allSatisfy( langString -> - assertThat( List.of( "en", "de" ) ).contains( ((AbstractLangString) langString).getLanguage() ) ) ) ); + assertThat( List.of( "en", "de" ) ).contains( ( (AbstractLangString) langString ).getLanguage() ) ) ) ); } @Test @@ -218,7 +218,7 @@ void testGenerateAasxFromAspectModelWithEitherWithComplexTypes() throws Deserial final Environment env = getAssetAdministrationShellFromAspect( TestAspect.ASPECT_WITH_EITHER_WITH_COMPLEX_TYPES ); assertThat( env.getSubmodels() ).hasSize( 1 ); assertThat( env.getSubmodels().get( 0 ).getSubmodelElements() ).hasSize( 1 ); - final SubmodelElementList elementCollection = ((SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 )); + final SubmodelElementList elementCollection = ( (SubmodelElementList) env.getSubmodels().get( 0 ).getSubmodelElements().get( 0 ) ); final Set testValues = Set.of( "RightEntity", "LeftEntity" ); assertThat( elementCollection.getValue() ).as( "Neither left nor right entity contained." ) .anyMatch( x -> testValues.contains( x.getIdShort() ) ); @@ -241,7 +241,7 @@ void testGenerateAasxFromAspectModelWithQuantifiable() throws DeserializationExc final DataSpecificationContent dataSpecificationContent = getDataSpecificationIec61360( "urn:samm:org.eclipse.esmf.test:1.0.0#testProperty", env ); - assertThat( ((DataSpecificationIec61360) dataSpecificationContent).getUnit() ).isEqualTo( "percent" ); + assertThat( ( (DataSpecificationIec61360) dataSpecificationContent ).getUnit() ).isEqualTo( "percent" ); } @Test