Skip to content

Commit 1e32d58

Browse files
committed
Fix problem with multiple parallel diagram generation.
1 parent 058a733 commit 1e32d58

17 files changed

+104
-355
lines changed

core/sds-aspect-model-document-generators/src/main/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/AspectModelDiagramGenerator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ public String getArtifactFilename( final String aspectName, final Locale languag
8080
private static final String FONT_NAME = "Roboto Condensed";
8181
private static final String FONT_FILE = "diagram/RobotoCondensed-Regular.ttf";
8282

83+
static final String GET_ELEMENT_NAME_FUNC = "urn:bamm:io.openmanufacturing:function:2.0.0#getElementName";
84+
8385
private final GetElementNameFunctionFactory getElementNameFunctionFactory;
8486

8587
private final Query boxmodelToDotQuery;
@@ -145,8 +147,6 @@ ImmutableList.<String> builder().addAll( queryFilesForAllBammVersions )
145147
boxModelNamespace = new BoxModel( bammVersion );
146148

147149
getElementNameFunctionFactory = new GetElementNameFunctionFactory( model );
148-
final String getElementNameFunctionUrn = "urn:bamm:io.openmanufacturing:function:2.0.0#getElementName";
149-
FunctionRegistry.get().put( getElementNameFunctionUrn, getElementNameFunctionFactory );
150150
}
151151

152152
InputStream getInputStream( final String resource ) {
@@ -173,6 +173,7 @@ String getInputStreamAsString( final String resource ) {
173173
@SuppressWarnings( "squid:S1905" )
174174
String executeQuery( final Model model, final Query query ) {
175175
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, model ) ) {
176+
FunctionRegistry.get( qexec.getContext() ).put( GET_ELEMENT_NAME_FUNC, getElementNameFunctionFactory );
176177
return StreamSupport.stream( ((Iterable<QuerySolution>) (qexec::execSelect)).spliterator(), false )
177178
.map( solution -> solution.getLiteral( "dotStatement" ) )
178179
.map( Literal::toString )
@@ -260,6 +261,7 @@ private String generateDot( final Locale language ) {
260261
.map( QueryFactory::create )
261262
.forEach( query -> {
262263
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, model ) ) {
264+
FunctionRegistry.get( qexec.getContext() ).put( GET_ELEMENT_NAME_FUNC, getElementNameFunctionFactory );
263265
qexec.execConstruct( targetModel );
264266
}
265267
} );

core/sds-aspect-model-document-generators/src/test/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/AbstractEntity2BoxModelTest.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717

18-
import org.apache.jena.query.Query;
19-
import org.apache.jena.query.QueryExecution;
20-
import org.apache.jena.query.QueryExecutionFactory;
21-
import org.apache.jena.query.QueryFactory;
2218
import org.apache.jena.rdf.model.Model;
23-
import org.apache.jena.rdf.model.ModelFactory;
2419
import org.junit.jupiter.params.ParameterizedTest;
2520
import org.junit.jupiter.params.provider.MethodSource;
2621

@@ -51,13 +46,8 @@ public void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion me
5146

5247
private void testAbstractEntity( final TestAspect testAspect, final KnownVersion metaModelVersion ) {
5348
final TestContext context = new TestContext( testAspect, metaModelVersion );
54-
55-
final Query query = QueryFactory.create( context.getInputStreamAsString( sparqlQueryFileName ) );
56-
57-
final Model queryResult = ModelFactory.createDefaultModel();
58-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
59-
qexec.execConstruct( queryResult );
60-
}
49+
50+
final Model queryResult = context.executeQuery( sparqlQueryFileName );
6151

6252
assertThat( queryResult.listStatements( context.selector( ":AbstractTestEntityAbstractEntity a :Box" ) ).toList() ).hasSize( 1 );
6353
assertThat( queryResult.listStatements( context.selector( ":AbstractTestEntityAbstractEntity :title AbstractTestEntity" ) ).toList() ).hasSize( 1 );

core/sds-aspect-model-document-generators/src/test/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/Aspect2BoxModelTest.java

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717

18-
import org.apache.jena.query.Query;
19-
import org.apache.jena.query.QueryExecution;
20-
import org.apache.jena.query.QueryExecutionFactory;
21-
import org.apache.jena.query.QueryFactory;
2218
import org.apache.jena.rdf.model.Model;
23-
import org.apache.jena.rdf.model.ModelFactory;
2419
import org.junit.jupiter.params.ParameterizedTest;
2520
import org.junit.jupiter.params.provider.MethodSource;
2621

@@ -70,12 +65,7 @@ public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaMo
7065
public void testAspectWithProperty( final KnownVersion metaModelVersion ) {
7166
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_PROPERTY, metaModelVersion );
7267

73-
final Query query = QueryFactory.create( context.getInputStreamAsString( "aspect-property-edges2boxmodel.sparql" ) );
74-
75-
final Model queryResult = ModelFactory.createDefaultModel();
76-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
77-
qexec.execConstruct( queryResult );
78-
}
68+
final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" );
7969

8070
assertThat( queryResult.listStatements( context.selector( ":AspectWithPropertyAspect_To_testPropertyProperty a :Edge" ) ).toList() ).hasSize( 1 );
8171
assertThat( queryResult.listStatements( context.selector( ":AspectWithPropertyAspect_To_testPropertyProperty :title property" ) ).toList() ).hasSize( 1 );
@@ -86,12 +76,7 @@ public void testAspectWithProperty( final KnownVersion metaModelVersion ) {
8676
public void testAspectWithOptionalProperty( final KnownVersion metaModelVersion ) {
8777
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_OPTIONAL_PROPERTY, metaModelVersion );
8878

89-
final Query query = QueryFactory.create( context.getInputStreamAsString( "aspect-property-edges2boxmodel.sparql" ) );
90-
91-
final Model queryResult = ModelFactory.createDefaultModel();
92-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
93-
qexec.execConstruct( queryResult );
94-
}
79+
final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" );
9580

9681
assertThat( queryResult.listStatements( context.selector( ":AspectWithOptionalPropertyAspect_To_testPropertyProperty a :Edge" ) )
9782
.toList() ).hasSize( 1 );
@@ -104,12 +89,7 @@ public void testAspectWithOptionalProperty( final KnownVersion metaModelVersion
10489
public void testAspectWithPropertyWithPayloadName( final KnownVersion metaModelVersion ) {
10590
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_PROPERTY_WITH_PAYLOAD_NAME, metaModelVersion );
10691

107-
final Query query = QueryFactory.create( context.getInputStreamAsString( "aspect-property-edges2boxmodel.sparql" ) );
108-
109-
final Model queryResult = ModelFactory.createDefaultModel();
110-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
111-
qexec.execConstruct( queryResult );
112-
}
92+
final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" );
11393

11494
assertThat( queryResult.listStatements( context.selector( ":AspectWithPropertyWithPayloadNameAspect_To_testPropertyProperty a :Edge" ) )
11595
.toList() ).hasSize( 1 );
@@ -122,17 +102,13 @@ public void testAspectWithPropertyWithPayloadName( final KnownVersion metaModelV
122102
public void testAspectWithOptionalPropertyWithPayloadName( final KnownVersion metaModelVersion ) {
123103
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_OPTIONAL_PROPERTY_WITH_PAYLOAD_NAME, metaModelVersion );
124104

125-
final Query query = QueryFactory.create( context.getInputStreamAsString( "aspect-property-edges2boxmodel.sparql" ) );
126-
127-
final Model queryResult = ModelFactory.createDefaultModel();
128-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
129-
qexec.execConstruct( queryResult );
130-
}
105+
final Model queryResult = context.executeQuery( "aspect-property-edges2boxmodel.sparql" );
131106

132107
assertThat( queryResult.listStatements( context.selector( ":AspectWithOptionalPropertyWithPayloadNameAspect_To_testPropertyProperty a :Edge" ) )
133108
.toList() ).hasSize( 1 );
134109
assertThat(
135-
queryResult.listStatements( context.selector( ":AspectWithOptionalPropertyWithPayloadNameAspect_To_testPropertyProperty :title property (optional) (test)" ) )
110+
queryResult.listStatements(
111+
context.selector( ":AspectWithOptionalPropertyWithPayloadNameAspect_To_testPropertyProperty :title property (optional) (test)" ) )
136112
.toList() ).hasSize( 1 );
137113
}
138114
}

core/sds-aspect-model-document-generators/src/test/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/AspectModelDiagramGeneratorTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
package io.openmanufacturing.sds.aspectmodel.generator.diagram;
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1718

1819
import java.io.ByteArrayOutputStream;
1920
import java.io.IOException;
2021
import java.nio.charset.StandardCharsets;
2122
import java.util.Locale;
2223

24+
import org.junit.jupiter.api.Test;
2325
import org.junit.jupiter.params.ParameterizedTest;
2426
import org.junit.jupiter.params.provider.MethodSource;
2527

@@ -54,4 +56,13 @@ public void testAspectWithRecursivePropertyWithOptional( final KnownVersion meta
5456
assertThat( result ).containsOnlyOnce(
5557
"AspectWithRecursivePropertyWithOptionalAspect -> testPropertyProperty [label=\"property\"]" );
5658
}
59+
60+
@Test
61+
void testNoStaticFunctionRegistryIsUsed() {
62+
// the calculation of synthetic names (which involves function registry) is only done when blank nodes are present in the model
63+
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_BLANK_NODE, KnownVersion.BAMM_2_0_0 );
64+
// if static (global) registry was used, this second context would overwrite it with a different model
65+
final TestContext context2 = new TestContext( TestAspect.ASPECT_WITH_BLANK_NODE, KnownVersion.BAMM_2_0_0 );
66+
assertDoesNotThrow( () -> context.service().generateDiagrams( AspectModelDiagramGenerator.Format.SVG, ( path ) -> new ByteArrayOutputStream() ) );
67+
}
5768
}

core/sds-aspect-model-document-generators/src/test/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/Characteristic2BoxModelTest.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717

18-
import org.apache.jena.query.Query;
19-
import org.apache.jena.query.QueryExecution;
20-
import org.apache.jena.query.QueryExecutionFactory;
21-
import org.apache.jena.query.QueryFactory;
2218
import org.apache.jena.rdf.model.Model;
23-
import org.apache.jena.rdf.model.ModelFactory;
2419
import org.junit.jupiter.params.ParameterizedTest;
2520
import org.junit.jupiter.params.provider.MethodSource;
2621

@@ -40,12 +35,8 @@ public class Characteristic2BoxModelTest extends MetaModelVersions {
4035
@MethodSource( value = "allVersions" )
4136
public void testOnlyUsedCharacteristicsAreProcessedExpectSuccess( final KnownVersion metaModelVersion ) {
4237
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_USED_AND_UNUSED_CHARACTERISTIC, metaModelVersion );
43-
final Query query = QueryFactory.create( context.getInputStreamAsString( sparqlQueryFileName ) );
4438

45-
final Model queryResult = ModelFactory.createDefaultModel();
46-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
47-
qexec.execConstruct( queryResult );
48-
}
39+
final Model queryResult = context.executeQuery( sparqlQueryFileName );
4940

5041
assertThat( queryResult.listStatements( context.selector( ":UsedTestCharacteristicCharacteristic a :Box" ) ).toList() ).hasSize( 1 );
5142
assertThat( queryResult.listStatements( context.selector( ":UnusedTestCharacteristicCharacteristic a :Box" ) ).toList() ).hasSize( 0 );
@@ -84,12 +75,7 @@ public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaMo
8475
public void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) {
8576
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_ABSTRACT_ENTITY, metaModelVersion );
8677

87-
final Query query = QueryFactory.create( context.getInputStreamAsString( "characteristic-entity-edges2boxmodel.sparql" ) );
88-
89-
final Model queryResult = ModelFactory.createDefaultModel();
90-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
91-
qexec.execConstruct( queryResult );
92-
}
78+
final Model queryResult = context.executeQuery( "characteristic-entity-edges2boxmodel.sparql" );
9379

9480
assertThat( queryResult
9581
.listStatements( context.selector( ":EntityCharacteristicCharacteristic_To_ExtendingTestEntityEntity a :Edge" ) )
@@ -107,12 +93,7 @@ public void testAspectWithAbstractEntityExpectSuccess( final KnownVersion metaMo
10793
public void testAspectWithAbstractSingleEntityExpectSuccess( final KnownVersion metaModelVersion ) {
10894
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_ABSTRACT_SINGLE_ENTITY, metaModelVersion );
10995

110-
final Query query = QueryFactory.create( context.getInputStreamAsString( "characteristic-entity-edges2boxmodel.sparql" ) );
111-
112-
final Model queryResult = ModelFactory.createDefaultModel();
113-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
114-
qexec.execConstruct( queryResult );
115-
}
96+
final Model queryResult = context.executeQuery( "characteristic-entity-edges2boxmodel.sparql" );
11697

11798
assertThat( queryResult.listStatements( context.selector( ":EntityCharacteristicCharacteristic_To_ExtendingTestEntityEntity a :Edge" ) )
11899
.toList() ).hasSize( 1 );

core/sds-aspect-model-document-generators/src/test/java/io/openmanufacturing/sds/aspectmodel/generator/diagram/Collection2BoxModelTest.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717

18-
import org.apache.jena.query.Query;
19-
import org.apache.jena.query.QueryExecution;
20-
import org.apache.jena.query.QueryExecutionFactory;
21-
import org.apache.jena.query.QueryFactory;
2218
import org.apache.jena.rdf.model.Model;
23-
import org.apache.jena.rdf.model.ModelFactory;
2419
import org.junit.jupiter.params.ParameterizedTest;
2520
import org.junit.jupiter.params.provider.MethodSource;
2621

@@ -41,12 +36,7 @@ public class Collection2BoxModelTest extends MetaModelVersions {
4136
public void testOnlyUsedCollectionsAreProcessedExpectSuccess( final KnownVersion metaModelVersion ) {
4237
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_USED_AND_UNUSED_COLLECTION, metaModelVersion );
4338

44-
final Query query = QueryFactory.create( context.getInputStreamAsString( sparqlQueryFileName ) );
45-
46-
final Model queryResult = ModelFactory.createDefaultModel();
47-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
48-
qexec.execConstruct( queryResult );
49-
}
39+
final Model queryResult = context.executeQuery( sparqlQueryFileName );
5040

5141
assertThat( queryResult.listStatements( context.selector( ":UsedTestCollectionCharacteristic a :Box" ) ).toList() ).hasSize( 1 );
5242
assertThat( queryResult.listStatements( context.selector( ":UnusedTestCollectionCharacteristic a :Box" ) ).toList() ).hasSize( 0 );
@@ -85,12 +75,7 @@ public void testSeeAttributeIsNotPresentExpectSuccess( final KnownVersion metaMo
8575
public void testCollectionWithElementCharacteristicExpectSuccess( final KnownVersion metaModelVersion ) {
8676
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_COLLECTIONS_WITH_ELEMENT_CHARACTERISTIC_AND_SIMPLE_DATA_TYPE, metaModelVersion );
8777

88-
final Query query = QueryFactory.create( context.getInputStreamAsString( "collection-elementcharacteristic-edges2boxmodel.sparql" ) );
89-
90-
final Model queryResult = ModelFactory.createDefaultModel();
91-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
92-
qexec.execConstruct( queryResult );
93-
}
78+
final Model queryResult = context.executeQuery( "collection-elementcharacteristic-edges2boxmodel.sparql" );
9479

9580
assertThat( queryResult.listStatements( context.selector( ":TestCollectionTwoCharacteristic_To_TextCharacteristic a :Edge" ) ).toList() ).hasSize( 1 );
9681
assertThat( queryResult.listStatements( context.selector( ":TestCollectionTwoCharacteristic_To_TextCharacteristic :to :TextCharacteristic" ) )
@@ -107,12 +92,7 @@ public void testCollectionWithElementCharacteristicExpectSuccess( final KnownVer
10792
public void testCollectionWithAbstractEntityExpectSuccess( final KnownVersion metaModelVersion ) {
10893
final TestContext context = new TestContext( TestAspect.ASPECT_WITH_COLLECTION_WITH_ABSTRACT_ENTITY, metaModelVersion );
10994

110-
final Query query = QueryFactory .create( context.getInputStreamAsString( "characteristic-entity-edges2boxmodel.sparql" ) );
111-
112-
final Model queryResult = ModelFactory.createDefaultModel();
113-
try ( final QueryExecution qexec = QueryExecutionFactory.create( query, context.model() ) ) {
114-
qexec.execConstruct( queryResult );
115-
}
95+
final Model queryResult = context.executeQuery( "characteristic-entity-edges2boxmodel.sparql" );
11696

11797
assertThat( queryResult
11898
.listStatements( context.selector( ":EntityCollectionCharacteristicCharacteristic_To_AbstractTestEntityAbstractEntity a :Edge" ) )

0 commit comments

Comments
 (0)