diff --git a/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/AbstractSammMigrator.java b/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/AbstractSammMigrator.java index b696c69a1..5b79d35c3 100644 --- a/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/AbstractSammMigrator.java +++ b/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/AbstractSammMigrator.java @@ -25,7 +25,8 @@ public abstract class AbstractSammMigrator extends AbstractMigrator { private final KnownVersion targetKnownVersion; protected AbstractSammMigrator( final KnownVersion sourceKnownVersion, final KnownVersion targetKnownVersion, final int order ) { - super( VersionNumber.parse( sourceKnownVersion.toVersionString() ), VersionNumber.parse( targetKnownVersion.toVersionString() ), order ); + super( VersionNumber.parse( sourceKnownVersion.toVersionString() ), VersionNumber.parse( targetKnownVersion.toVersionString() ), + order ); this.sourceKnownVersion = sourceKnownVersion; this.targetKnownVersion = targetKnownVersion; } diff --git a/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/BammUriRewriter.java b/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/BammUriRewriter.java index 319a1c7cf..9d76b80a9 100644 --- a/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/BammUriRewriter.java +++ b/core/esmf-aspect-meta-model-version-migrator/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/migrator/BammUriRewriter.java @@ -19,21 +19,31 @@ import java.util.Optional; import java.util.stream.Collectors; +import org.eclipse.esmf.aspectmodel.resolver.exceptions.InvalidVersionException; +import org.eclipse.esmf.aspectmodel.vocabulary.Namespace; +import org.eclipse.esmf.samm.KnownVersion; + import org.apache.jena.graph.NodeFactory; import org.apache.jena.rdf.model.Literal; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.ResourceFactory; import org.apache.jena.rdf.model.Statement; -import org.eclipse.esmf.aspectmodel.vocabulary.Namespace; -import org.eclipse.esmf.samm.KnownVersion; /** * A {@link AbstractUriRewriter} that replaces all references to the legacy BAMM Aspect Meta Model to their corresponding SAMM counterparts */ public class BammUriRewriter extends AbstractUriRewriter { - public BammUriRewriter() { - super( KnownVersion.getLatest(), KnownVersion.getLatest() ); + private final BAMM_VERSION bammVersion; + + private static final String SAMM_C_PREFIX = "samm-c"; + private static final String SAMM_E_PREFIX = "samm-e"; + + public BammUriRewriter( final BAMM_VERSION bammVersion ) { + // Translating versions will only fail if there are no SAMM versions (i.e., KnownVersion) for the versions in BAMM_VERSION + super( KnownVersion.fromVersionString( bammVersion.versionString() ).orElseThrow( () -> + new InvalidVersionException( "BAMM version " + bammVersion.versionString() + " can not be translated to SAMM" ) ), KnownVersion.getLatest() ); + this.bammVersion = bammVersion; } @Override @@ -42,8 +52,8 @@ protected Map buildPrefixMap( final Model sourceModel, final Map return sourceModel.getNsPrefixMap().keySet().stream() .map( prefix -> switch ( prefix ) { case "bamm" -> Map.entry( "samm", targetPrefixes.get( "samm" ) ); - case "bamm-c" -> Map.entry( "samm-c", targetPrefixes.get( "samm-c" ) ); - case "bamm-e" -> Map.entry( "samm-e", targetPrefixes.get( "samm-e" ) ); + case "bamm-c" -> Map.entry( SAMM_C_PREFIX, targetPrefixes.get( SAMM_C_PREFIX ) ); + case "bamm-e" -> Map.entry( SAMM_E_PREFIX, targetPrefixes.get( SAMM_E_PREFIX ) ); case "unit" -> Map.entry( "unit", targetPrefixes.get( "unit" ) ); default -> Map.entry( prefix, rewriteUri( sourceModel.getNsPrefixURI( prefix ), oldToNewNamespaces ) .orElse( sourceModel.getNsPrefixURI( prefix ) ) ); @@ -53,18 +63,12 @@ protected Map buildPrefixMap( final Model sourceModel, final Map @Override protected Map buildReplacementPrefixMap( final Model sourceModel, final Map targetPrefixes ) { - final Map oldSamm = Namespace.createPrefixMap( KnownVersion.SAMM_1_0_0 ); // The mapping of the URNs of the legacy BAMM Aspect Meta model to their corresponding SAMM counterparts return Map.of( - "urn:bamm:io.openmanufacturing:meta-model:2.0.0#", targetPrefixes.get( "samm" ), - "urn:bamm:io.openmanufacturing:characteristic:2.0.0#", targetPrefixes.get( "samm-c" ), - "urn:bamm:io.openmanufacturing:entity:2.0.0#", targetPrefixes.get( "samm-e" ), - "urn:bamm:io.openmanufacturing:unit:2.0.0#", targetPrefixes.get( "unit" ), - - "urn:bamm:io.openmanufacturing:meta-model:1.0.0#", oldSamm.get( "samm" ), - "urn:bamm:io.openmanufacturing:characteristic:1.0.0#", oldSamm.get( "samm-c" ), - "urn:bamm:io.openmanufacturing:entity:1.0.0#", oldSamm.get( "samm-e" ), - "urn:bamm:io.openmanufacturing:unit:1.0.0#", oldSamm.get( "unit" ) + "urn:bamm:io.openmanufacturing:meta-model:" + bammVersion.versionString() + "#", targetPrefixes.get( "samm" ), + "urn:bamm:io.openmanufacturing:characteristic: " + bammVersion.versionString() + "#", targetPrefixes.get( SAMM_C_PREFIX ), + "urn:bamm:io.openmanufacturing:entity:" + bammVersion.versionString() + "#", targetPrefixes.get( SAMM_E_PREFIX ), + "urn:bamm:io.openmanufacturing:unit:" + bammVersion.versionString() + "#", targetPrefixes.get( "unit" ) ); } @@ -85,7 +89,7 @@ protected Optional rewriteUri( final String oldUri, final Map oldToNewNamespaces ) { RDFNode result = super.updateRdfNode( rdfNode, oldToNewNamespaces ); - if ( result instanceof Literal literal ) { + if ( result instanceof final Literal literal ) { result = Optional.ofNullable( literal.getDatatypeURI() ) .flatMap( type -> rewriteUri( type, oldToNewNamespaces ) ) .map( NodeFactory::getType ) @@ -95,8 +99,17 @@ protected RDFNode updateRdfNode( final RDFNode rdfNode, final Map + uri.startsWith( "urn:bamm:io.openmanufacturing:meta-model:" ) && uri.contains( bammVersion.versionString() ) ); + } + @Override public Model migrate( final Model sourceModel ) { + if ( !modelContainsBammPrefixes( sourceModel ) ) { + return sourceModel; + } + final Map targetPrefixes = Namespace.createPrefixMap( getTargetKnownVersion() ); final Map oldToNewNamespaces = buildReplacementPrefixMap( sourceModel, targetPrefixes ); @@ -114,4 +127,13 @@ public Model migrate( final Model sourceModel ) { sourceModel.setNsPrefixes( buildPrefixMap( sourceModel, targetPrefixes, oldToNewNamespaces ) ); return sourceModel; } + + public enum BAMM_VERSION { + BAMM_1_0_0, + BAMM_2_0_0; + + public String versionString() { + return toString().replaceFirst( "BAMM_(\\d+)_(\\d+)_(\\d+)", "$1.$2.$3" ); + } + } } diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/AbstractConstraint2BoxModelTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/AbstractConstraint2BoxModelTest.java index b8c377067..58de7473c 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/AbstractConstraint2BoxModelTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/AbstractConstraint2BoxModelTest.java @@ -27,22 +27,16 @@ public abstract class AbstractConstraint2BoxModelTest extends MetaModelVersions final String sparqlQueryFileName = "constraint2boxmodel.sparql"; - protected String boxSelectorStatement( final KnownVersion metaModelVersion, final String constraintIdentifier, + protected String boxSelectorStatement( final String constraintIdentifier, final boolean isConstraintAnonymous ) { final String ns = isConstraintAnonymous ? ":" : "test:"; - if ( metaModelVersion.isNewerThan( KnownVersion.SAMM_1_0_0 ) ) { - return String.format( "%s a :Box", constraintIdentifier.equals( "*" ) ? "*" : ns + constraintIdentifier ); - } - return ns + "TestConstraintConstraint a :Box"; + return String.format( "%s a :Box", constraintIdentifier.equals( "*" ) ? "*" : ns + constraintIdentifier ); } - protected String entriesSelectorStatement( final KnownVersion metaModelVersion, final String constraintIdentifier, + protected String entriesSelectorStatement( final String constraintIdentifier, final boolean isConstraintAnonymous ) { final String ns = isConstraintAnonymous ? ":" : "test:"; - if ( metaModelVersion.isNewerThan( KnownVersion.SAMM_1_0_0 ) ) { - return String.format( "%s :entries *", constraintIdentifier.equals( "*" ) ? "*" : ns + constraintIdentifier ); - } - return ns + "TestConstraintConstraint :entries *"; + return String.format( "%s :entries *", constraintIdentifier.equals( "*" ) ? "*" : ns + constraintIdentifier ); } @BeforeAll diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Constraint2BoxModelTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Constraint2BoxModelTest.java index d500baf58..4e60d8525 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Constraint2BoxModelTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Constraint2BoxModelTest.java @@ -22,13 +22,13 @@ import org.eclipse.esmf.samm.KnownVersion; import org.eclipse.esmf.test.TestAspect; -public class Constraint2BoxModelTest extends AbstractConstraint2BoxModelTest { - private final String expectedValueEntryTitle = "value"; - private final String expectedSeeEntryTitle = "see"; +class Constraint2BoxModelTest extends AbstractConstraint2BoxModelTest { + private final static String EXPECTED_VALUE_ENTRY_TITLE = "value"; + private final static String EXPECTED_SEE_ENTRY_TITLE = "see"; @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testOnlyUsedConstraintsAreProcessedExpectSuccess( final KnownVersion metaModelVersion ) { + void testOnlyUsedConstraintsAreProcessedExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestAspect.ASPECT_WITH_USED_AND_UNUSED_CONSTRAINT, metaModelVersion ); final Model queryResult = context.executeQuery( sparqlQueryFileName ); @@ -39,54 +39,54 @@ public void testOnlyUsedConstraintsAreProcessedExpectSuccess( final KnownVersion @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_CONSTRAINT_WITH_MULTIPLE_SEE_ATTRIBUTES, metaModelVersion ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 5, - expectedSeeEntryTitle, + EXPECTED_SEE_ENTRY_TITLE, "http://example.com/, http://example.com/me" ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_CONSTRAINT_WITHOUT_SEE_ATTRIBUTE, metaModelVersion ); - context.executeAttributeIsNotPresentTest( sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + context.executeAttributeIsNotPresentTest( sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 5 ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testRegularExpressionConstraintExpectSuccess( final KnownVersion metaModelVersion ) { + void testRegularExpressionConstraintExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_NUMERIC_REGULAR_EXPRESSION_CONSTRAINT, metaModelVersion ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 4, - expectedValueEntryTitle, "\\\\d*\\|x" ); + EXPECTED_VALUE_ENTRY_TITLE, "\\\\d*\\|x" ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testFixedPointConstraintExpectSuccess( final KnownVersion metaModelVersion ) { + void testFixedPointConstraintExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_FIXED_POINT_CONSTRAINT, metaModelVersion ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 8, "scale", "5" ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 9, "integer", "3" ); } diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Entity2BoxModelTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Entity2BoxModelTest.java index 4ae7b9d48..b1cfb6980 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Entity2BoxModelTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Entity2BoxModelTest.java @@ -24,7 +24,7 @@ import org.eclipse.esmf.test.TestAspect; import org.eclipse.esmf.test.TestEntity; -public class Entity2BoxModelTest extends MetaModelVersions { +class Entity2BoxModelTest extends MetaModelVersions { private final String sparqlQueryFileName = "entity2boxmodel.sparql"; private final int totalNumberOfExpectedEntries = 3; private final int indexOfSeeValueEntry = 2; @@ -32,7 +32,7 @@ public class Entity2BoxModelTest extends MetaModelVersions { @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_SEE_ATTRIBUTE, metaModelVersion ); context.executeAttributeIsPresentTest( sparqlQueryFileName, "test:EntityWithSeeAttributeEntity a :Box", "test:EntityWithSeeAttributeEntity :entries *", @@ -41,7 +41,7 @@ public void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModel @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_MULTIPLE_SEE_ATTRIBUTES, metaModelVersion ); context.executeAttributeIsPresentTest( sparqlQueryFileName, "test:EntityWithMultipleSeeAttributesEntity a :Box", "test:EntityWithMultipleSeeAttributesEntity :entries *", @@ -51,7 +51,7 @@ public void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaMod @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITHOUT_SEE_ATTRIBUTE, metaModelVersion ); context.executeAttributeIsNotPresentTest( sparqlQueryFileName, "test:EntityWithoutSeeAttributeEntity a :Box", "test:EntityWithoutSeeAttributeEntity :entries *", @@ -60,19 +60,19 @@ public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaMo @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsPresentOnSharedEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsPresentOnSharedEntityExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.SHARED_ENTITY_WITH_SEE_ATTRIBUTE, metaModelVersion ); final Model queryResult = context.executeQuery( sparqlQueryFileName ); assertThat( queryResult.listStatements( context.selector( "test:SharedEntityWithSeeAttributeEntity a :Box" ) ).toList() ).hasSize( 1 ); assertThat( queryResult.listStatements( context.selector( "samm-e:SharedEntityEntity a :Box" ) ).toList() ) - .hasSize( metaModelVersion.isNewerThan( KnownVersion.SAMM_1_0_0 ) ? 1 : 0 ); + .hasSize( 1 ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testEntityWithOptionalAndNotInPayloadProperty( final KnownVersion metaModelVersion ) { + void testEntityWithOptionalAndNotInPayloadProperty( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_OPTIONAL_AND_NOT_IN_PAYLOAD_PROPERTY, metaModelVersion ); final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" ); @@ -107,7 +107,7 @@ public void testEntityWithOptionalAndNotInPayloadProperty( final KnownVersion me @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testEntityWithOptionalProperty( final KnownVersion metaModelVersion ) { + void testEntityWithOptionalProperty( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_OPTIONAL_PROPERTY, metaModelVersion ); final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" ); @@ -124,7 +124,7 @@ public void testEntityWithOptionalProperty( final KnownVersion metaModelVersion @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testEntityWithOptionalPropertyWithPayloadName( final KnownVersion metaModelVersion ) { + void testEntityWithOptionalPropertyWithPayloadName( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_OPTIONAL_PROPERTY_WITH_PAYLOAD_NAME, metaModelVersion ); final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" ); @@ -141,7 +141,7 @@ public void testEntityWithOptionalPropertyWithPayloadName( final KnownVersion me @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testEntityWithPropertyWithPayloadName( final KnownVersion metaModelVersion ) { + void testEntityWithPropertyWithPayloadName( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestEntity.ENTITY_WITH_PROPERTY_WITH_PAYLOAD_NAME, metaModelVersion ); final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" ); @@ -158,21 +158,21 @@ public void testEntityWithPropertyWithPayloadName( final KnownVersion metaModelV @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { testExtendingEntity( TestAspect.ASPECT_WITH_ABSTRACT_ENTITY, metaModelVersion ); testExtendingEntityEdges( TestAspect.ASPECT_WITH_ABSTRACT_ENTITY, metaModelVersion ); } @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testAspectWithAbstractSingleEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testAspectWithAbstractSingleEntityExpectSuccess( final KnownVersion metaModelVersion ) { testExtendingEntity( TestAspect.ASPECT_WITH_ABSTRACT_SINGLE_ENTITY, metaModelVersion ); testExtendingEntityEdges( TestAspect.ASPECT_WITH_ABSTRACT_SINGLE_ENTITY, metaModelVersion ); } @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { testExtendingEntity( TestAspect.ASPECT_WITH_COLLECTION_WITH_ABSTRACT_ENTITY, metaModelVersion ); testExtendingEntityEdges( TestAspect.ASPECT_WITH_COLLECTION_WITH_ABSTRACT_ENTITY, metaModelVersion ); } diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Property2BoxModelTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Property2BoxModelTest.java index cbe88fc21..8b52dadad 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Property2BoxModelTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/Property2BoxModelTest.java @@ -24,7 +24,7 @@ import org.eclipse.esmf.test.TestAspect; import org.eclipse.esmf.test.TestProperty; -public class Property2BoxModelTest extends MetaModelVersions { +class Property2BoxModelTest extends MetaModelVersions { private final String sparqlQueryFileName = "property2boxmodel.sparql"; private final int totalNumberOfExpectedEntries = 4; private final int indexOfSeeValueEntry = 2; @@ -32,7 +32,7 @@ public class Property2BoxModelTest extends MetaModelVersions { @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.PROPERTY_WITH_SEE_ATTRIBUTE, metaModelVersion ); context.executeAttributeIsPresentTest( sparqlQueryFileName, "test:propertyWithSeeAttributeProperty a :Box", "test:propertyWithSeeAttributeProperty :entries *", @@ -41,7 +41,7 @@ public void testSeeAttributeIsPresentExpectSuccess( final KnownVersion metaModel @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.PROPERTY_WITH_MULTIPLE_SEE_ATTRIBUTES, metaModelVersion ); context.executeAttributeIsPresentTest( sparqlQueryFileName, "test:propertyWithMultipleSeeAttributesProperty a :Box", "test:propertyWithMultipleSeeAttributesProperty :entries *", @@ -51,7 +51,7 @@ public void testSeeAttributesArePresentExpectSuccess( final KnownVersion metaMod @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.PROPERTY_WITHOUT_SEE_ATTRIBUTE, metaModelVersion ); context.executeAttributeIsNotPresentTest( sparqlQueryFileName, "test:propertyWithoutSeeAttributeProperty a :Box", "test:propertyWithoutSeeAttributeProperty :entries *", @@ -60,7 +60,7 @@ public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaMo @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testSeeAttributeIsPresentOnSharedPropertyExpectSuccess( final KnownVersion metaModelVersion ) { + void testSeeAttributeIsPresentOnSharedPropertyExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.SHARED_PROPERTY_WITH_SEE_ATTRIBUTE, metaModelVersion ); final Model queryResult = context.executeQuery( sparqlQueryFileName ); @@ -70,12 +70,12 @@ public void testSeeAttributeIsPresentOnSharedPropertyExpectSuccess( final KnownV .toList() ) .hasSize( 1 ); assertThat( queryResult.listStatements( context.selector( "samm-e:sharedPropertyProperty a :Box" ) ).toList() ) - .hasSize( metaModelVersion.isNewerThan( KnownVersion.SAMM_1_0_0 ) ? 1 : 0 ); + .hasSize( 1 ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testExampleValueIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testExampleValueIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.PROPERTY_WITH_EXAMPLE_VALUE, metaModelVersion ); context.executeAttributeIsPresentTest( sparqlQueryFileName, "test:propertyWithExampleValueProperty a :Box", "test:propertyWithExampleValueProperty :entries *", @@ -84,7 +84,7 @@ public void testExampleValueIsPresentExpectSuccess( final KnownVersion metaModel @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testExampleValueIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testExampleValueIsNotPresentExpectSuccess( final KnownVersion metaModelVersion ) { final TestContext context = new TestContext( TestProperty.PROPERTY_WITHOUT_EXAMPLE_VALUE, metaModelVersion ); context.executeAttributeIsNotPresentTest( sparqlQueryFileName, "test:propertyWithoutExampleValueProperty a :Box", "test:propertyWithoutExampleValueProperty :entries *", @@ -93,21 +93,21 @@ public void testExampleValueIsNotPresentExpectSuccess( final KnownVersion metaMo @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { testAbstractAndExtendingEntityPropertyBoxes( TestAspect.ASPECT_WITH_ABSTRACT_ENTITY, metaModelVersion ); testAbstractAndExtendingEntityPropertyEdges( TestAspect.ASPECT_WITH_ABSTRACT_ENTITY, metaModelVersion ); } @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testAspectWithAbstractSingleEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testAspectWithAbstractSingleEntityExpectSuccess( final KnownVersion metaModelVersion ) { testAbstractAndExtendingEntityPropertyBoxes( TestAspect.ASPECT_WITH_ABSTRACT_SINGLE_ENTITY, metaModelVersion ); testAbstractAndExtendingEntityPropertyEdges( TestAspect.ASPECT_WITH_ABSTRACT_SINGLE_ENTITY, metaModelVersion ); } @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { + void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) { testAbstractAndExtendingEntityPropertyBoxes( TestAspect.ASPECT_WITH_COLLECTION_WITH_ABSTRACT_ENTITY, metaModelVersion ); testAbstractAndExtendingEntityPropertyEdges( TestAspect.ASPECT_WITH_COLLECTION_WITH_ABSTRACT_ENTITY, metaModelVersion ); } @@ -137,10 +137,10 @@ private void testAbstractAndExtendingEntityPropertyEdges( final TestAspect testA ).toList() ).hasSize( 1 ); assertThat( queryResult.listStatements( context.selector( "test:ExtendingTestEntityEntity_To_abstractTestPropertyProperty a :Edge" ) - ).toList() ).hasSize( 0 ); + ).toList() ).isEmpty(); assertThat( queryResult.listStatements( context.selector( "test:AbstractTestEntityAbstractEntity_To_entityPropertyProperty a :Edge" ) - ).toList() ).hasSize( 0 ); + ).toList() ).isEmpty(); assertThat( queryResult.listStatements( context.selector( "test:AbstractTestEntityAbstractEntity_To_abstractTestPropertyProperty a :Edge" ) diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/RangeConstraint2BoxModelTest.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/RangeConstraint2BoxModelTest.java index 2b6d63b29..83a6499d1 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/RangeConstraint2BoxModelTest.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/RangeConstraint2BoxModelTest.java @@ -19,58 +19,58 @@ import org.eclipse.esmf.samm.KnownVersion; import org.eclipse.esmf.test.TestAspect; -public class RangeConstraint2BoxModelTest extends AbstractConstraint2BoxModelTest { +class RangeConstraint2BoxModelTest extends AbstractConstraint2BoxModelTest { @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testBoundDefinitionAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { + void testBoundDefinitionAttributeIsPresentExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_RANGE_CONSTRAINT_WITH_BOUND_DEFINITION_ATTRIBUTES, metaModelVersion ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 6, "lowerBoundDefinition", "GREATER_THAN" ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 7, "upperBoundDefinition", "LESS_THAN" ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testRangeConstraintWithOnlyLowerBoundDefinitionAndBothValuesExpectSuccess( + void testRangeConstraintWithOnlyLowerBoundDefinitionAndBothValuesExpectSuccess( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_RANGE_CONSTRAINT_WITH_ONLY_LOWER_BOUND_DEFINITION_AND_BOTH_VALUES, metaModelVersion ); - context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), + context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 6, "lowerBoundDefinition", "GREATER_THAN" ); context.executeAttributeIsPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 7, "upperBoundDefinition", "AT_MOST" ); } @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testRangeConstraintWithOnlyMinValue( final KnownVersion metaModelVersion ) { + void testRangeConstraintWithOnlyMinValue( final KnownVersion metaModelVersion ) { final String constraintIdentifier = "*"; final TestContext context = new TestContext( TestAspect.ASPECT_WITH_RANGE_CONSTRAINT_WITH_ONLY_MIN_VALUE, metaModelVersion ); - context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), + context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 6, "lowerBoundDefinition", "GREATER_THAN" ); - context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), + context.executeAttributeIsPresentTest( sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 7, "upperBoundDefinition", "OPEN" ); context.executeAttributeIsNotPresentTest( - sparqlQueryFileName, boxSelectorStatement( metaModelVersion, constraintIdentifier, true ), - entriesSelectorStatement( metaModelVersion, constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), + sparqlQueryFileName, boxSelectorStatement( constraintIdentifier, true ), + entriesSelectorStatement( constraintIdentifier, true ), totalNumberOfExpectedEntriesPerMetaModelVersion.get( metaModelVersion ), 8 ); } } diff --git a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/TestContext.java b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/TestContext.java index 78467ab65..ecfa99145 100644 --- a/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/TestContext.java +++ b/core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/diagram/TestContext.java @@ -50,7 +50,7 @@ public TestContext( final TestModel model, final KnownVersion version ) { this.version = version; final VersionedModel versionedModel = TestResources.getModel( model, version ).get(); service = new AspectModelDiagramGenerator( versionedModel ); - boxModel = new BoxModel( version ); + boxModel = new BoxModel( KnownVersion.getLatest() ); service.model.setNsPrefix( "", boxModel.getNamespace() ); service.model.setNsPrefix( "test", "urn:samm:org.eclipse.esmf.test:1.0.0#" ); diff --git a/core/esmf-aspect-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolver.java b/core/esmf-aspect-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolver.java index 3706b6f2b..e9667d76e 100644 --- a/core/esmf-aspect-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolver.java +++ b/core/esmf-aspect-model-resolver/src/main/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolver.java @@ -37,13 +37,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import org.apache.commons.io.FilenameUtils; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.ModelFactory; -import org.apache.jena.rdf.model.Property; -import org.apache.jena.rdf.model.RDFNode; -import org.apache.jena.vocabulary.RDF; -import org.apache.jena.vocabulary.XSD; import org.eclipse.esmf.aspectmodel.VersionNumber; import org.eclipse.esmf.aspectmodel.resolver.services.SammAspectMetaModelResourceResolver; import org.eclipse.esmf.aspectmodel.resolver.services.TurtleLoader; @@ -55,13 +48,20 @@ import org.eclipse.esmf.aspectmodel.versionupdate.MigratorService; import org.eclipse.esmf.aspectmodel.versionupdate.MigratorServiceLoader; import org.eclipse.esmf.aspectmodel.versionupdate.migrator.BammUriRewriter; +import org.eclipse.esmf.samm.KnownVersion; import com.google.common.collect.Streams; - import io.vavr.CheckedFunction1; import io.vavr.Value; import io.vavr.control.Option; import io.vavr.control.Try; +import org.apache.commons.io.FilenameUtils; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.vocabulary.RDF; +import org.apache.jena.vocabulary.XSD; /** * Provides facilities for loading an Aspect model and resolving referenced meta model elements and @@ -70,7 +70,8 @@ public class AspectModelResolver { private final MigratorService migratorService = MigratorServiceLoader.getInstance().getMigratorService(); - private final BammUriRewriter bammUriRewriter = new BammUriRewriter(); + private final BammUriRewriter bamm100UriRewriter = new BammUriRewriter( BammUriRewriter.BAMM_VERSION.BAMM_1_0_0 ); + private final BammUriRewriter bamm200UriRewriter = new BammUriRewriter( BammUriRewriter.BAMM_VERSION.BAMM_2_0_0 ); /** * Returns all valid model URNs for Aspects and model elements in a model @@ -113,7 +114,7 @@ private static Try resolveSammUrn( final String urn ) { * This creates the closure (merged model) of all referenced models and the corresponding meta model. * * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param input the input to be resolved by the strategy + * @param input the input to be resolved by the strategy * @return the resolved model on success */ public Try resolveAspectModel( final ResolutionStrategy resolutionStrategy, final AspectModelUrn input ) { @@ -124,19 +125,20 @@ public Try resolveAspectModel( final ResolutionStrategy resoluti * Method to load an Aspect Model from an input stream, and resolve it using a suitable {@link ResolutionStrategy}. * * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param inputStream the inputs stream to read the RDF/Turtle representation from + * @param inputStream the inputs stream to read the RDF/Turtle representation from * @return the resolved model on success */ public Try resolveAspectModel( final ResolutionStrategy resolutionStrategy, final InputStream inputStream ) { return TurtleLoader.loadTurtle( inputStream ) - .flatMap( model -> resolveAspectModel( FileSystemStrategy.DefaultNamespace.withDefaultNamespace( resolutionStrategy, model ), model ) ); + .flatMap( model -> resolveAspectModel( FileSystemStrategy.DefaultNamespace.withDefaultNamespace( resolutionStrategy, model ), + model ) ); } /** * Method to load an Aspect Model from a string, and resolve it using a suitable {@link ResolutionStrategy}. * * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param modelContent a string containing the RDF/Turtle representation + * @param modelContent a string containing the RDF/Turtle representation * @return the resolved model on success */ public Try resolveAspectModel( final ResolutionStrategy resolutionStrategy, final String modelContent ) { @@ -147,7 +149,7 @@ public Try resolveAspectModel( final ResolutionStrategy resoluti * Method to resolve a given aspect model * * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param model the initial aspect model + * @param model the initial aspect model * @return the resolved model on success */ public Try resolveAspectModel( final ResolutionStrategy resolutionStrategy, final Model model ) { @@ -159,7 +161,7 @@ public Try resolveAspectModel( final ResolutionStrategy resoluti * This creates the closure (merged model) of all referenced models and the corresponding meta model. * * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param input the input to be resolved by the strategy + * @param input the input to be resolved by the strategy * @return the resolved model on success */ public Try resolveAspectModel( final ResolutionStrategy resolutionStrategy, final List input ) { @@ -170,14 +172,16 @@ public Try resolveAspectModel( final ResolutionStrategy resoluti * Method to resolve multiple {@link AspectModelUrn}s using a suitable {@link ResolutionStrategy} against an inital model. * This creates the closure (merged model) of all referenced models and the corresponding meta model. * - * @param initialModel the initial model + * @param initialModel the initial model * @param resolutionStrategy the strategy to resolve input URNs to RDF models - * @param input the input to resolved by the strategy + * @param input the input to resolved by the strategy * @return the resolved model on success */ - public Try resolveAspectModel( final Model initialModel, final ResolutionStrategy resolutionStrategy, final List input ) { + public Try resolveAspectModel( final Model initialModel, final ResolutionStrategy resolutionStrategy, + final List input ) { final Try mergedModel = resolve( initialModel, input, resolutionStrategy ) - .map( bammUriRewriter::migrate ); + .map( bamm100UriRewriter::migrate ) + .map( bamm200UriRewriter::migrate ); if ( mergedModel.isFailure() ) { if ( mergedModel.getCause() instanceof FileNotFoundException ) { @@ -197,7 +201,10 @@ public Try resolveAspectModel( final Model initialModel, final R return Try.failure( new ModelResolutionException( "Could not determine used meta model version" ) ); } - if ( usedMetaModelVersions.size() == 1 && migratorService.getMigratorFactory().isEmpty() ) { + if ( usedMetaModelVersions.size() == 1 + && usedMetaModelVersions.iterator().next().toString().equals( KnownVersion.getLatest().toVersionString() ) + && migratorService.getMigratorFactory().isEmpty() + ) { return mergedModel.flatMap( model -> migratorService.getSdsMigratorFactory().createAspectMetaModelResourceResolver() .mergeMetaModelIntoRawModel( model, usedMetaModelVersions.iterator().next() ) ); @@ -223,10 +230,13 @@ public Try resolveAspectModel( final Model initialModel, final R * Checks if a given model contains the definition of a model element. * * @param model the model - * @param urn the URN of the model element + * @param urn the URN of the model element * @return true if the model contains the definition of the model element */ public static boolean containsDefinition( final Model model, final AspectModelUrn urn ) { + if ( model.getNsPrefixMap().values().stream().anyMatch( prefixUri -> prefixUri.startsWith( "urn:bamm:" ) ) ) { + return model.contains( model.createResource( urn.toString().replace( "urn:samm:", "urn:bamm:" ) ), RDF.type, (RDFNode) null ); + } return model.contains( model.createResource( urn.toString() ), RDF.type, (RDFNode) null ); } @@ -235,8 +245,8 @@ public static boolean containsDefinition( final Model model, final AspectModelUr * The strategy is applied to the URNs to load a model, and then repeated for all URNs in the loaded model that * have not yet been loaded. * - * @param result the (possibly pre-filled) model for which elements need to be resolved - * @param urns the Aspect Model element URNs + * @param result the (possibly pre-filled) model for which elements need to be resolved + * @param urns the Aspect Model element URNs * @param resolutionStrategy the resolution strategy that knowns how to turn a URN into a Model * @return the fully resolved model, or a failure if one of the transitively referenced elements can't be found */ @@ -305,7 +315,7 @@ private boolean modelAlreadyResolved( final Model model, final Set resolv * For meta model elements or other URIs, an empty model is returned. This method returns only a failure, when the used resolution * strategy fails. * - * @param urn the URN to resolve + * @param urn the URN to resolve * @param resolutionStrategy the resolution strategy to apply * @return the model containing the defintion of the given model element */ @@ -322,7 +332,8 @@ private Try getModelForUrn( final String urn, final ResolutionStrategy re return resolutionStrategy.apply( aspectModelUrn ).flatMap( model -> { if ( !model.contains( model.createResource( urn ), RDF.type, (RDFNode) null ) ) { return Try.failure( - new ModelResolutionException( "Resolution strategy returned a model which does not contain element definition for " + urn ) ); + new ModelResolutionException( + "Resolution strategy returned a model which does not contain element definition for " + urn ) ); } return Try.success( model ); } ); @@ -351,7 +362,7 @@ private String replaceLegacyBammUrn( final String urn ) { * a model won't overwrite the empty prefix of the target model. * * @param target the model to merge into - * @param other the model to be merged + * @param other the model to be merged */ private void mergeModels( final Model target, final Model other ) { for ( final Map.Entry prefixEntry : other.getNsPrefixMap().entrySet() ) { @@ -372,7 +383,6 @@ private void mergeModels( final Model target, final Model other ) { public static Try loadAndResolveModel( final File input ) { return loadAndResolveModelFromUrnLikeDir( input ) .orElse( () -> loadAndResolveModelFromDir( input ) ); - } private static Try loadAndResolveModelFromUrnLikeDir( final File input ) { diff --git a/core/esmf-aspect-model-resolver/src/test/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolverTest.java b/core/esmf-aspect-model-resolver/src/test/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolverTest.java index 996cc56ce..fd2d920d3 100644 --- a/core/esmf-aspect-model-resolver/src/test/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolverTest.java +++ b/core/esmf-aspect-model-resolver/src/test/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolverTest.java @@ -14,30 +14,32 @@ package org.eclipse.esmf.aspectmodel.resolver; import static org.apache.jena.rdf.model.ResourceFactory.createResource; -import static org.assertj.vavr.api.VavrAssertions.assertThat; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.net.URISyntaxException; +import java.nio.file.Path; import java.util.List; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.RDFNode; -import org.apache.jena.rdf.model.Resource; -import org.apache.jena.rdf.model.Statement; -import org.apache.jena.vocabulary.RDF; -import org.assertj.core.api.Assertions; import org.eclipse.esmf.aspectmodel.resolver.services.TurtleLoader; import org.eclipse.esmf.aspectmodel.resolver.services.VersionedModel; import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn; import org.eclipse.esmf.aspectmodel.vocabulary.SAMM; import org.eclipse.esmf.samm.KnownVersion; import org.eclipse.esmf.test.MetaModelVersions; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; import com.google.common.collect.Streams; - import io.vavr.control.Try; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.rdf.model.Statement; +import org.apache.jena.vocabulary.RDF; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; public class AspectModelResolverTest extends MetaModelVersions { private final AspectModelResolver resolver = new AspectModelResolver(); @@ -56,17 +58,15 @@ public void testLoadDataModelExpectSuccess( final KnownVersion metaModelVersion final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Resource aspect = createResource( TEST_NAMESPACE + "Test" ); - final Resource sammAspect = new SAMM( metaModelVersion ).Aspect(); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, sammAspect ).nextOptional() ) - .isNotEmpty(); + final Resource sammAspect = new SAMM( KnownVersion.getLatest() ).Aspect(); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, sammAspect ).nextOptional() ).isNotEmpty(); } @ParameterizedTest - @MethodSource( value = "latestVersion" ) + @MethodSource( value = "versionsUpToIncluding2_0_0" ) public void testLoadLegacyBammModelExpectSuccess( final KnownVersion metaModelVersion ) throws URISyntaxException { final File aspectModelsRootDirectory = new File( AspectModelResolverTest.class.getClassLoader() @@ -78,12 +78,10 @@ public void testLoadLegacyBammModelExpectSuccess( final KnownVersion metaModelVe final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); - final SAMM samm = new SAMM( metaModelVersion ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( null, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); + assertThat( result.get().getModel().listStatements( null, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); } @ParameterizedTest @@ -100,13 +98,11 @@ public void testLoadModelWithVersionEqualToUnsupportedMetaModelVersionExpectSucc final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Resource aspect = createResource( "urn:samm:org.eclipse.esmf.test:1.1.0#Test" ); - final SAMM samm = new SAMM( metaModelVersion ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); } @ParameterizedTest @@ -127,18 +123,15 @@ public void testResolveReferencedModelFromMemoryExpectSuccess( final KnownVersio final EitherStrategy inMemoryResolutionStrategy = new EitherStrategy( urnStrategy, inMemoryStrategy ); final Try result = resolver.resolveAspectModel( inMemoryResolutionStrategy, inputUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); - final SAMM samm = new SAMM( metaModelVersion ); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); final Resource aspect = createResource( TEST_NAMESPACE + "AnotherTest" ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); final Resource propertyFromReferencedAspect = createResource( TEST_NAMESPACE + "foo" ); - org.assertj.core.api.Assertions.assertThat( - result.get().getModel().listStatements( propertyFromReferencedAspect, RDF.type, samm.Property() ) - .nextOptional() ).isNotEmpty(); + assertThat( + result.get().getModel().listStatements( propertyFromReferencedAspect, RDF.type, samm.Property() ).nextOptional() ).isNotEmpty(); } @ParameterizedTest @@ -154,19 +147,15 @@ public void testResolveReferencedModelExpectSuccess( final KnownVersion metaMode final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); - final SAMM samm = new SAMM( metaModelVersion ); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); final Resource aspect = createResource( TEST_NAMESPACE + "AnotherTest" ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); final Resource propertyFromReferencedAspect = createResource( TEST_NAMESPACE + "foo" ); - org.assertj.core.api.Assertions - .assertThat( - result.get().getModel().listStatements( propertyFromReferencedAspect, RDF.type, samm.Property() ) - .nextOptional() ).isNotEmpty(); + assertThat( + result.get().getModel().listStatements( propertyFromReferencedAspect, RDF.type, samm.Property() ).nextOptional() ).isNotEmpty(); } @ParameterizedTest @@ -183,8 +172,8 @@ public void testResolutionMissingAspectExpectFailure( final KnownVersion metaMod final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isFailure(); - assertThat( result ).failBecauseOf( ModelResolutionException.class ); + assertThat( result.isFailure() ).isTrue(); + assertThat( result.getCause() ).isInstanceOf( ModelResolutionException.class ); } @ParameterizedTest @@ -199,8 +188,8 @@ public void testResolutionMissingModelElementExpectFailure( final KnownVersion m final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isFailure(); - assertThat( result ).failBecauseOf( ModelResolutionException.class ); + assertThat( result.isFailure() ).isTrue(); + assertThat( result.getCause() ).isInstanceOf( ModelResolutionException.class ); } @ParameterizedTest @@ -217,19 +206,16 @@ public void testResolutionReferencedCharacteristicExpectSuccess( final KnownVers aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Resource aspect = createResource( TEST_NAMESPACE + "ReferenceCharacteristicTest" ); - final SAMM samm = new SAMM( metaModelVersion ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); final Resource referencedCharacteristic = createResource( TEST_NAMESPACE + "TestCharacteristic" ); - org.assertj.core.api.Assertions.assertThat( - result.get().getModel().listStatements( referencedCharacteristic, RDF.type, samm.Characteristic() ) - .nextOptional() ).isNotEmpty(); + assertThat( result.get().getModel().listStatements( referencedCharacteristic, RDF.type, samm.Characteristic() ) + .nextOptional() ).isNotEmpty(); } /** @@ -253,13 +239,11 @@ public void testTransitiveReferenceExpectSuccess( final KnownVersion metaModelVe final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Model model = result.get().getModel(); final Resource testCharacteristic = createResource( TEST_NAMESPACE + "TestCharacteristic" ); - org.assertj.core.api.Assertions.assertThat( - Streams.stream( model.listStatements( testCharacteristic, RDF.type, (RDFNode) null ) ).count() ) - .isEqualTo( 1 ); + assertThat( Streams.stream( model.listStatements( testCharacteristic, RDF.type, (RDFNode) null ) ).count() ).isEqualTo( 1 ); } @ParameterizedTest @@ -276,17 +260,14 @@ public void testResolutionReferencedEntity( final KnownVersion metaModelVersion aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Resource aspect = createResource( TEST_NAMESPACE + "ReferenceEntityTest" ); - final SAMM samm = new SAMM( metaModelVersion ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ) - .isNotEmpty(); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); + assertThat( result.get().getModel().listStatements( aspect, RDF.type, samm.Aspect() ).nextOptional() ).isNotEmpty(); final Resource referencedEntity = createResource( TEST_NAMESPACE + "TestEntity" ); - org.assertj.core.api.Assertions - .assertThat( result.get().getModel().listStatements( referencedEntity, RDF.type, samm.Entity() ).nextOptional() ).isNotEmpty(); + assertThat( result.get().getModel().listStatements( referencedEntity, RDF.type, samm.Entity() ).nextOptional() ).isNotEmpty(); } @ParameterizedTest @@ -301,12 +282,11 @@ public void testAspectReferencingAnotherAspectExpectSuccess( final KnownVersion final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); final Model model = result.get().getModel(); - final SAMM samm = new SAMM( metaModelVersion ); - org.assertj.core.api.Assertions.assertThat( - Streams.stream( model.listStatements( null, RDF.type, samm.Aspect() ) ).count() ).isEqualTo( 2 ); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); + assertThat( Streams.stream( model.listStatements( null, RDF.type, samm.Aspect() ) ).count() ).isEqualTo( 2 ); } @ParameterizedTest @@ -317,7 +297,7 @@ public void testClassPathResolution( final KnownVersion metaModelVersion ) { final ClasspathStrategy strategy = new ClasspathStrategy( metaModelVersion.toString().toLowerCase() ); final Try result = resolver .resolveAspectModel( strategy, AspectModelUrn.fromUrn( aspectUrn ) ); - Assertions.assertThat( result.isSuccess() ).isTrue(); + assertThat( result.isSuccess() ).isTrue(); } @ParameterizedTest @@ -328,7 +308,7 @@ public void testResolveAspectContainingRefinedProperty2( final KnownVersion meta final ClasspathStrategy strategy = new ClasspathStrategy( metaModelVersion.toString().toLowerCase() ); final Try result = resolver .resolveAspectModel( strategy, AspectModelUrn.fromUrn( aspectUrn ) ); - Assertions.assertThat( result.isSuccess() ).describedAs( "Resolution of refined Property failed." ).isTrue(); + assertThat( result.isSuccess() ).describedAs( "Resolution of refined Property failed." ).isTrue(); } @ParameterizedTest @@ -339,13 +319,13 @@ public void testMergingModelsWithBlankNodeValues( final KnownVersion metaModelVe final ClasspathStrategy strategy = new ClasspathStrategy( metaModelVersion.toString().toLowerCase() ); final Try result = resolver .resolveAspectModel( strategy, AspectModelUrn.fromUrn( aspectUrn ) ); - Assertions.assertThat( result.isSuccess() ).isTrue(); + assertThat( result.isSuccess() ).isTrue(); final Model model = result.get().getModel(); final Resource primaryAspect = model.createResource( TEST_NAMESPACE + "PrimaryAspect" ); - final SAMM samm = new SAMM( metaModelVersion ); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); final List propertiesAssertions = model.listStatements( primaryAspect, samm.properties(), (RDFNode) null ).toList(); - Assertions.assertThat( propertiesAssertions.size() ).isEqualTo( 1 ); + assertThat( propertiesAssertions.size() ).isEqualTo( 1 ); } @ParameterizedTest @@ -361,13 +341,13 @@ public void testMultiReferenceSameSource( final KnownVersion metaModelVersion ) final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() ); final Try result = resolver.resolveAspectModel( urnStrategy, testUrn ); - assertThat( result ).isSuccess(); + assertThat( result.isSuccess() ).isTrue(); // make sure the source file for the definitions of ModelYear and ModelCode (ModelDef.ttl) is only loaded once final Model model = result.get().getModel(); final Resource entity = model.createResource( TEST_NAMESPACE + "SomeOtherNonRelatedEntity" ); - final SAMM samm = new SAMM( metaModelVersion ); + final SAMM samm = new SAMM( KnownVersion.getLatest() ); final List properties = model.listStatements( entity, samm.properties(), (RDFNode) null ).toList(); - Assertions.assertThat( properties.size() ).isEqualTo( 1 ); + assertThat( properties.size() ).isEqualTo( 1 ); } } diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl new file mode 100644 index 000000000..d0ad2882d --- /dev/null +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl @@ -0,0 +1,20 @@ +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 + +@prefix bamm: . +@prefix bamm-c: . +@prefix bamm-e: . +@prefix unit: . +@prefix xsd: . +@prefix : . + +:legacyProperty a bamm:Property ; + bamm:characteristic bamm-c:Text . diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl index df7459732..ad73875af 100644 --- a/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_1_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl @@ -15,11 +15,12 @@ @prefix : . @prefix unit: . @prefix xsd: . +@prefix prev: . :BammTest a bamm:Aspect ; bamm:name "BammTest" ; bamm:preferredName "BAMM Test"@en ; - bamm:properties ( :property ) ; + bamm:properties ( prev:legacyProperty :property ) ; bamm:operations ( ) . :property a bamm:Property ; diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl new file mode 100644 index 000000000..e09d3961b --- /dev/null +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl @@ -0,0 +1,20 @@ +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 + +@prefix bamm: . +@prefix bamm-c: . +@prefix bamm-e: . +@prefix unit: . +@prefix xsd: . +@prefix : . + +:legacyProperty a bamm:Property ; + bamm:characteristic bamm-c:Text . diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl index 99a1d3c38..a72c71e1e 100644 --- a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_0_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl @@ -15,10 +15,11 @@ @prefix : . @prefix unit: . @prefix xsd: . +@prefix prev: . :BammTest a bamm:Aspect ; bamm:preferredName "BAMM Test"@en ; - bamm:properties ( :property ) ; + bamm:properties ( prev:legacyProperty :property ) ; bamm:operations ( ) . :property a bamm:Property ; diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl new file mode 100644 index 000000000..e09d3961b --- /dev/null +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/1.0.0/legacyProperty.ttl @@ -0,0 +1,20 @@ +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 + +@prefix bamm: . +@prefix bamm-c: . +@prefix bamm-e: . +@prefix unit: . +@prefix xsd: . +@prefix : . + +:legacyProperty a bamm:Property ; + bamm:characteristic bamm-c:Text . diff --git a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl index 99a1d3c38..a72c71e1e 100644 --- a/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl +++ b/core/esmf-aspect-model-resolver/src/test/resources/samm_2_1_0/org.eclipse.esmf.test/2.0.0/BammTest.ttl @@ -15,10 +15,11 @@ @prefix : . @prefix unit: . @prefix xsd: . +@prefix prev: . :BammTest a bamm:Aspect ; bamm:preferredName "BAMM Test"@en ; - bamm:properties ( :property ) ; + bamm:properties ( prev:legacyProperty :property ) ; bamm:operations ( ) . :property a bamm:Property ; diff --git a/core/esmf-aspect-model-validator/src/test/java/org/eclipse/esmf/aspectmodel/validation/services/AspectModelValidatorTest.java b/core/esmf-aspect-model-validator/src/test/java/org/eclipse/esmf/aspectmodel/validation/services/AspectModelValidatorTest.java index ced034754..b5a45aad0 100644 --- a/core/esmf-aspect-model-validator/src/test/java/org/eclipse/esmf/aspectmodel/validation/services/AspectModelValidatorTest.java +++ b/core/esmf-aspect-model-validator/src/test/java/org/eclipse/esmf/aspectmodel/validation/services/AspectModelValidatorTest.java @@ -30,7 +30,6 @@ import org.eclipse.esmf.aspectmodel.shacl.fix.Fix; import org.eclipse.esmf.aspectmodel.shacl.violation.DatatypeViolation; import org.eclipse.esmf.aspectmodel.shacl.violation.InvalidSyntaxViolation; -import org.eclipse.esmf.aspectmodel.shacl.violation.MinCountViolation; import org.eclipse.esmf.aspectmodel.shacl.violation.ProcessingViolation; import org.eclipse.esmf.aspectmodel.shacl.violation.SparqlConstraintViolation; import org.eclipse.esmf.aspectmodel.shacl.violation.Violation; @@ -43,6 +42,7 @@ import org.eclipse.esmf.test.TestProperty; import org.eclipse.esmf.test.TestResources; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EnumSource; @@ -50,16 +50,15 @@ import io.vavr.control.Try; -public class AspectModelValidatorTest extends MetaModelVersions { +class AspectModelValidatorTest extends MetaModelVersions { // One specific validator instance for each meta model version private final Map service = Arrays.stream( KnownVersion.values() ) .collect( Collectors.toMap( Function.identity(), AspectModelValidator::new ) ); - @ParameterizedTest - @MethodSource( value = "allVersions" ) - public void testValidAspect( final KnownVersion metaModelVersion ) { - final Try validAspectModel = TestResources.getModel( TestAspect.ASPECT, metaModelVersion ); - final List violations = service.get( metaModelVersion ).validateModel( validAspectModel ); + @Test + void testValidAspect( ) { + final Try validAspectModel = TestResources.getModel( TestAspect.ASPECT, KnownVersion.getLatest() ); + final List violations = service.get( KnownVersion.getLatest() ).validateModel( validAspectModel ); assertThat( violations ).isEmpty(); } @@ -71,7 +70,7 @@ public void testValidAspect( final KnownVersion metaModelVersion ) { "MODEL_WITH_CYCLES", "MODEL_WITH_BROKEN_CYCLES"// contains cycles } ) - public void testValidateTestAspectModel( final TestAspect testAspect ) { + void testValidateTestAspectModel( final TestAspect testAspect ) { final KnownVersion metaModelVersion = KnownVersion.getLatest(); final Try tryModel = TestResources.getModel( testAspect, metaModelVersion ); final List violations = service.get( metaModelVersion ).validateModel( tryModel ); @@ -80,7 +79,7 @@ public void testValidateTestAspectModel( final TestAspect testAspect ) { @ParameterizedTest @EnumSource( value = TestProperty.class ) - public void testValidateProperty( final TestProperty testProperty ) { + void testValidateProperty( final TestProperty testProperty ) { final KnownVersion metaModelVersion = KnownVersion.getLatest(); final Try tryModel = TestResources.getModel( testProperty, metaModelVersion ); final List violations = service.get( metaModelVersion ).validateModel( tryModel ); @@ -89,17 +88,17 @@ public void testValidateProperty( final TestProperty testProperty ) { @ParameterizedTest @MethodSource( "invalidTestModels" ) - public void testValidateInvalidTestAspectModel( final InvalidTestAspect testModel, final KnownVersion metaModelVersion ) { + void testValidateInvalidTestAspectModel( final InvalidTestAspect testModel ) { assertThatCode( () -> { - final Try invalidAspectModel = TestResources.getModel( testModel, metaModelVersion ); - final List violations = service.get( metaModelVersion ).validateModel( invalidAspectModel ); + final Try invalidAspectModel = TestResources.getModel( testModel, KnownVersion.SAMM_2_1_0 ); + final List violations = service.get( KnownVersion.SAMM_2_1_0 ).validateModel( invalidAspectModel ); assertThat( violations ).isNotEmpty(); } ).doesNotThrowAnyException(); } @ParameterizedTest - @MethodSource( "versionsStartingWith2_0_0" ) - public void testGetFixForInvalidTestAspectModel( final KnownVersion metaModelVersion ) { + @MethodSource( "latestVersion" ) + void testGetFixForInvalidTestAspectModel( final KnownVersion metaModelVersion ) { final TestModel testModel = InvalidTestAspect.INVALID_PREFERRED_NAME_DATATYPE; final Try invalidAspectModel = TestResources.getModel( testModel, metaModelVersion ); final List violations = service.get( metaModelVersion ).validateModel( invalidAspectModel ); @@ -112,20 +111,15 @@ public void testGetFixForInvalidTestAspectModel( final KnownVersion metaModelVer private static Stream invalidTestModels() { return Arrays.stream( InvalidTestAspect.values() ) - .flatMap( testModel -> KnownVersion.getVersions().stream().flatMap( metaModelVersion -> { - // Filter the arguments: Aspects missing samm:named and/or samm:properties is only invalid in SAMM 1.0.0 - if ( metaModelVersion.isNewerThan( KnownVersion.SAMM_1_0_0 ) - && (testModel == InvalidTestAspect.ASPECT_MISSING_NAME_AND_PROPERTIES - || testModel == InvalidTestAspect.ASPECT_MISSING_PROPERTIES) ) { - return Stream.of(); - } - return Stream.of( Arguments.of( testModel, metaModelVersion ) ); - } ) ); + .filter( invalidTestAspect -> + (!invalidTestAspect.equals( InvalidTestAspect.ASPECT_MISSING_NAME_AND_PROPERTIES ) + && !invalidTestAspect.equals( InvalidTestAspect.ASPECT_MISSING_PROPERTIES )) ) + .map( Arguments::of ); } @ParameterizedTest @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testValidateValidModelElement( final KnownVersion metaModelVersion ) { + void testValidateValidModelElement( final KnownVersion metaModelVersion ) { final VersionedModel testModel = TestResources.getModel( TestAspect.ASPECT_WITH_BOOLEAN, metaModelVersion ).get(); final Resource element = testModel.getModel().createResource( TestAspect.TEST_NAMESPACE + "BooleanTestCharacteristic" ); final List violations = service.get( metaModelVersion ).validateElement( element ); @@ -133,8 +127,8 @@ public void testValidateValidModelElement( final KnownVersion metaModelVersion ) } @ParameterizedTest - @MethodSource( value = "versionsStartingWith2_0_0" ) - public void testValidateInvalidModelElement( final KnownVersion metaModelVersion ) { + @MethodSource( value = "latestVersion" ) + void testValidateInvalidModelElement( final KnownVersion metaModelVersion ) { final VersionedModel testModel = TestResources.getModel( InvalidTestAspect.INVALID_EXAMPLE_VALUE_DATATYPE, metaModelVersion ).get(); final Resource element = testModel.getModel().createResource( TestAspect.TEST_NAMESPACE + "stringProperty" ); final List violations = service.get( metaModelVersion ).validateElement( element ); @@ -142,48 +136,15 @@ public void testValidateInvalidModelElement( final KnownVersion metaModelVersion final SparqlConstraintViolation violation = (SparqlConstraintViolation) violations.get( 0 ); final SAMM samm = new SAMM( metaModelVersion ); assertThat( violation.context().element() ).isEqualTo( element ); - assertThat( violation.context().property().get() ).isEqualTo( samm.exampleValue() ); + assertThat( violation.context().property() ).contains( samm.exampleValue() ); assertThat( violation.bindings().get( "value" ).asResource().getURI() ).isEqualTo( XSD.xint.getURI() ); } - @ParameterizedTest - @MethodSource( value = "versionsUpToIncluding1_0_0" ) - public void testInvalidAspectMissingProperties( final KnownVersion metaModelVersion ) { - final SAMM samm = new SAMM( metaModelVersion ); - final TestModel testModel = InvalidTestAspect.ASPECT_MISSING_PROPERTIES; - final Try invalidAspectModel = TestResources.getModel( testModel, metaModelVersion ); - final List violations = service.get( metaModelVersion ).validateModel( invalidAspectModel ); - assertThat( violations ).hasSize( 1 ); - final Violation violation = violations.get( 0 ); - assertThat( violation ).isInstanceOf( MinCountViolation.class ); - final MinCountViolation minCountViolation = (MinCountViolation) violation; - assertThat( minCountViolation.context().property() ).hasValue( samm.properties() ); - assertThat( minCountViolation.context().element().getURI() ).isEqualTo( testModel.getUrn().toString() ); - } - - @ParameterizedTest - @MethodSource( value = "versionsUpToIncluding1_0_0" ) - public void testInvalidAspectMissingNameAndProperties( final KnownVersion metaModelVersion ) { - final SAMM samm = new SAMM( metaModelVersion ); - final TestModel testModel = InvalidTestAspect.ASPECT_MISSING_NAME_AND_PROPERTIES; - final Try invalidAspectModel = TestResources.getModel( testModel, metaModelVersion ); - final List violations = service.get( metaModelVersion ).validateModel( invalidAspectModel ); - assertThat( violations ).hasSize( 2 ); - - assertThat( violations ) - .anyMatch( v -> v instanceof MinCountViolation - && v.context().property().map( p -> p.equals( samm.properties() ) ).orElse( false ) - && v.context().element().getURI().equals( testModel.getUrn().toString() ) ) - .anyMatch( v -> v instanceof MinCountViolation - && v.context().property().map( p -> p.equals( samm.property( "name" ) ) ).orElse( false ) - && v.context().element().getURI().equals( testModel.getUrn().toString() ) ); - } - @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testInvalidTurtleSyntax( final KnownVersion metaModelVersion ) { + void testInvalidTurtleSyntax( final KnownVersion metaModelVersion ) { final Try invalidTurtleSyntax = TestResources.getModel( InvalidTestAspect.INVALID_SYNTAX, metaModelVersion ); - assertThat( invalidTurtleSyntax.isFailure() ).isEqualTo( true ); + assertThat( invalidTurtleSyntax.isFailure() ).isTrue(); final List violations = service.get( metaModelVersion ).validateModel( invalidTurtleSyntax ); assertThat( violations ).hasSize( 1 ); final InvalidSyntaxViolation violation = (InvalidSyntaxViolation) violations.get( 0 ); @@ -194,9 +155,9 @@ public void testInvalidTurtleSyntax( final KnownVersion metaModelVersion ) { @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testNonTurtleFile( final KnownVersion metaModelVersion ) { + void testNonTurtleFile( final KnownVersion metaModelVersion ) { final Try invalidTurtleSyntax = TestResources.getModel( InvalidTestAspect.ACTUALLY_JSON, metaModelVersion ); - assertThat( invalidTurtleSyntax.isFailure() ).isEqualTo( true ); + assertThat( invalidTurtleSyntax.isFailure() ).isTrue(); final List violations = service.get( metaModelVersion ).validateModel( invalidTurtleSyntax ); assertThat( violations ).hasSize( 1 ); final InvalidSyntaxViolation violation = (InvalidSyntaxViolation) violations.get( 0 ); @@ -211,7 +172,7 @@ public void testNonTurtleFile( final KnownVersion metaModelVersion ) { */ @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testAspectWithSammNamespaceForCustomUnit( final KnownVersion metaModelVersion ) { + void testAspectWithSammNamespaceForCustomUnit( final KnownVersion metaModelVersion ) { final Try invalidAspectModel = TestResources .getModel( InvalidTestAspect.ASPECT_WITH_SAMM_NAMESPACE_FOR_CUSTOM_UNIT, metaModelVersion ); @@ -222,10 +183,10 @@ public void testAspectWithSammNamespaceForCustomUnit( final KnownVersion metaMod @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testAspectWithInvalidMetaModelVersion( final KnownVersion metaModelVersion ) { + void testAspectWithInvalidMetaModelVersion( final KnownVersion metaModelVersion ) { final Try invalidTurtleSyntax = TestResources.getModel( InvalidTestAspect.ASPECT_WITH_INVALID_VERSION, metaModelVersion ); - assertThat( invalidTurtleSyntax.isFailure() ).isEqualTo( true ); + assertThat( invalidTurtleSyntax.isFailure() ).isTrue(); final List violations = service.get( metaModelVersion ).validateModel( invalidTurtleSyntax ); assertThat( violations ).hasSize( 1 ); final ProcessingViolation violation = (ProcessingViolation) violations.get( 0 ); @@ -234,10 +195,10 @@ public void testAspectWithInvalidMetaModelVersion( final KnownVersion metaModelV @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testMissingAspectDeclaration( final KnownVersion metaModelVersion ) { + void testMissingAspectDeclaration( final KnownVersion metaModelVersion ) { final Try missingAspect = TestResources .getModel( InvalidTestAspect.MISSING_ASPECT_DECLARATION, metaModelVersion ); - assertThat( missingAspect.isFailure() ).isEqualTo( true ); + assertThat( missingAspect.isFailure() ).isTrue(); final List violations = service.get( metaModelVersion ).validateModel( missingAspect ); assertThat( violations ).hasSize( 1 ); final ProcessingViolation violation = (ProcessingViolation) violations.get( 0 ); @@ -246,7 +207,7 @@ public void testMissingAspectDeclaration( final KnownVersion metaModelVersion ) @ParameterizedTest @MethodSource( value = "allVersions" ) - public void testValidationWithMultipleAspects( final KnownVersion metaModelVersion ) { + void testValidationWithMultipleAspects( final KnownVersion metaModelVersion ) { final Try model = TestResources.getModel( TestAspect.ASPECT, metaModelVersion ); model.forEach( versionedModel -> { final VersionedModel model2 = TestResources.getModel( TestAspect.ASPECT_WITH_SIMPLE_TYPES, metaModelVersion ).get(); @@ -263,7 +224,7 @@ public void testValidationWithMultipleAspects( final KnownVersion metaModelVersi void testCycleDetection( final KnownVersion metaModelVersion ) { final Try versionedModel = TestResources.getModel( TestAspect.MODEL_WITH_CYCLES, metaModelVersion ); final List report = service.get( metaModelVersion ).validateModel( versionedModel ); - assertThat( report.size() ).isEqualTo( 7 ); + assertThat( report ).hasSize( 7 ); assertThat( report ).containsAll( cycles( ":a -> :b -> :a", ":e -> :f -> :g -> :e", @@ -282,7 +243,7 @@ void testCycleDetection( final KnownVersion metaModelVersion ) { void testCycleDetectionWithCycleBreakers( final KnownVersion metaModelVersion ) { final Try versionedModel = TestResources.getModel( TestAspect.MODEL_WITH_BROKEN_CYCLES, metaModelVersion ); final List report = service.get( metaModelVersion ).validateModel( versionedModel ); - assertThat( report.isEmpty() ).isTrue(); + assertThat( report ).isEmpty(); } private List cycles( final String... cycles ) { diff --git a/core/esmf-test-aspect-models/src/main/java/org/eclipse/esmf/test/MetaModelVersions.java b/core/esmf-test-aspect-models/src/main/java/org/eclipse/esmf/test/MetaModelVersions.java index ff9e1b8dc..9894fb3ec 100644 --- a/core/esmf-test-aspect-models/src/main/java/org/eclipse/esmf/test/MetaModelVersions.java +++ b/core/esmf-test-aspect-models/src/main/java/org/eclipse/esmf/test/MetaModelVersions.java @@ -51,4 +51,8 @@ protected static Stream versionsStartingWith2_0_0() { protected static Stream versionsUpToIncluding1_0_0() { return versionsUpToIncluding( KnownVersion.SAMM_1_0_0 ); } + + protected static Stream versionsUpToIncluding2_0_0() { + return versionsUpToIncluding( KnownVersion.SAMM_2_0_0 ); + } }