Skip to content

Commit 5421b13

Browse files
committed
Fix BammUriRewriter by making it idempotent
Previously, it would leave "bamm" prefixes in an RDF model's prefix make, thus making the operation non-idempotent.
1 parent 1d6192a commit 5421b13

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

core/esmf-aspect-meta-model-java/src/main/java/org/eclipse/esmf/aspectmodel/versionupdate/BammUriRewriter.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import org.eclipse.esmf.aspectmodel.resolver.exceptions.InvalidVersionException;
2525
import org.eclipse.esmf.metamodel.vocabulary.RdfNamespace;
26+
import org.eclipse.esmf.metamodel.vocabulary.SammNs;
2627
import org.eclipse.esmf.samm.KnownVersion;
2728

2829
import com.google.common.collect.Streams;
@@ -36,9 +37,6 @@
3637
public class BammUriRewriter extends AbstractUriRewriter {
3738
private final BammVersion bammVersion;
3839

39-
private static final String SAMM_C_PREFIX = "samm-c";
40-
private static final String SAMM_E_PREFIX = "samm-e";
41-
4240
public BammUriRewriter( final BammVersion bammVersion ) {
4341
// Translating versions will only fail if there are no SAMM versions (i.e., KnownVersion) for the versions in BAMM_VERSION
4442
super( KnownVersion.fromVersionString( bammVersion.versionString() ).orElseThrow( () ->
@@ -52,10 +50,10 @@ protected Map<String, String> buildPrefixMap( final Model sourceModel, final Map
5250
final Map<String, String> oldToNewNamespaces ) {
5351
return sourceModel.getNsPrefixMap().keySet().stream()
5452
.map( prefix -> switch ( prefix ) {
55-
case "bamm" -> Map.entry( "samm", targetPrefixes.get( "samm" ) );
56-
case "bamm-c" -> Map.entry( SAMM_C_PREFIX, targetPrefixes.get( SAMM_C_PREFIX ) );
57-
case "bamm-e" -> Map.entry( SAMM_E_PREFIX, targetPrefixes.get( SAMM_E_PREFIX ) );
58-
case "unit" -> Map.entry( "unit", targetPrefixes.get( "unit" ) );
53+
case "bamm" -> Map.entry( SammNs.SAMM.getShortForm(), targetPrefixes.get( SammNs.SAMM.getShortForm() ) );
54+
case "bamm-c" -> Map.entry( SammNs.SAMMC.getShortForm(), targetPrefixes.get( SammNs.SAMMC.getShortForm() ) );
55+
case "bamm-e" -> Map.entry( SammNs.SAMME.getShortForm(), targetPrefixes.get( SammNs.SAMME.getShortForm() ) );
56+
case "unit" -> Map.entry( SammNs.UNIT.getShortForm(), targetPrefixes.get( SammNs.UNIT.getShortForm() ) );
5957
default -> Map.entry( prefix, rewriteUri( sourceModel.getNsPrefixURI( prefix ), oldToNewNamespaces )
6058
.orElse( sourceModel.getNsPrefixURI( prefix ) ) );
6159
} )
@@ -66,10 +64,12 @@ protected Map<String, String> buildPrefixMap( final Model sourceModel, final Map
6664
protected Map<String, String> buildReplacementPrefixMap( final Model sourceModel, final Map<String, String> targetPrefixes ) {
6765
// The mapping of the URNs of the legacy BAMM Aspect Meta model to their corresponding SAMM counterparts
6866
return Map.of(
69-
"urn:bamm:io.openmanufacturing:meta-model:" + bammVersion.versionString() + "#", targetPrefixes.get( "samm" ),
70-
"urn:bamm:io.openmanufacturing:characteristic:" + bammVersion.versionString() + "#", targetPrefixes.get( SAMM_C_PREFIX ),
71-
"urn:bamm:io.openmanufacturing:entity:" + bammVersion.versionString() + "#", targetPrefixes.get( SAMM_E_PREFIX ),
72-
"urn:bamm:io.openmanufacturing:unit:" + bammVersion.versionString() + "#", targetPrefixes.get( "unit" )
67+
"urn:bamm:io.openmanufacturing:meta-model:" + bammVersion.versionString() + "#",
68+
targetPrefixes.get( SammNs.SAMM.getShortForm() ),
69+
"urn:bamm:io.openmanufacturing:characteristic:" + bammVersion.versionString() + "#",
70+
targetPrefixes.get( SammNs.SAMMC.getShortForm() ),
71+
"urn:bamm:io.openmanufacturing:entity:" + bammVersion.versionString() + "#", targetPrefixes.get( SammNs.SAMME.getShortForm() ),
72+
"urn:bamm:io.openmanufacturing:unit:" + bammVersion.versionString() + "#", targetPrefixes.get( SammNs.UNIT.getShortForm() )
7373
);
7474
}
7575

@@ -119,6 +119,7 @@ public Model migrate( final Model sourceModel ) {
119119

120120
sourceModel.removeAll();
121121
remappedStatements.forEach( sourceModel::add );
122+
sourceModel.clearNsPrefixMap();
122123
sourceModel.setNsPrefixes( buildPrefixMap( sourceModel, targetPrefixes, oldToNewNamespaces ) );
123124
return sourceModel;
124125
}

core/esmf-aspect-meta-model-java/src/test/java/org/eclipse/esmf/aspectmodel/resolver/AspectModelResolverTest.java

+4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.net.URISyntaxException;
2626

2727
import org.eclipse.esmf.aspectmodel.AspectLoadingException;
28+
import org.eclipse.esmf.aspectmodel.AspectModelFile;
2829
import org.eclipse.esmf.aspectmodel.loader.AspectModelLoader;
2930
import org.eclipse.esmf.aspectmodel.resolver.exceptions.ModelResolutionException;
3031
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
@@ -94,6 +95,9 @@ void testLoadLegacyBammModelExpectSuccess() throws URISyntaxException {
9495
assertThat( result ).files().first( ASPECT_MODEL_FILE ).headerComment().isNotNull();
9596
assertThat( result ).files().first( ASPECT_MODEL_FILE ).headerComment().first( STRING ).contains(
9697
"Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH" );
98+
for ( final AspectModelFile file : result.files() ) {
99+
assertThat( file.sourceModel().getNsPrefixMap().keySet() ).allMatch( prefix -> !prefix.contains( "bamm" ) );
100+
}
97101
} ).doesNotThrowAnyException();
98102
}
99103

0 commit comments

Comments
 (0)