Skip to content

Commit 413555d

Browse files
committed
Merge branch 'main' into 2.0.x
2 parents 00c667d + 5ba4bd2 commit 413555d

File tree

11 files changed

+170
-17
lines changed

11 files changed

+170
-17
lines changed

core/sds-aspect-model-document-generators/src/main/resources/docu/templates/html/property-documentation-lib.vm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
#if( $property.getExampleValue() )
5656
<div class="flex border-b pb-1 py-4">
5757
<div class="w-80">$i18n.getText( "docu.label.example" )</div>
58-
<div class="w-full">$property.getExampleValue().get()</div>
58+
<div class="w-full">$property.getExampleValue().get().getValue()</div>
5959
</div>
6060
#end
6161

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313

1414
package io.openmanufacturing.sds.aspectmodel.generator.docu;
1515

16-
import static org.assertj.core.api.Assertions.assertThat;
17-
import static org.assertj.core.api.Assertions.assertThatCode;
16+
import static org.assertj.core.api.Assertions.*;
1817
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1918

2019
import java.io.BufferedWriter;
@@ -79,6 +78,8 @@ public void testAspectWithCollectionOfSimpleType( final KnownVersion metaModelVe
7978
assertThat( htmlResult ).contains( "<h1 id=\"AspectWithCollectionOfSimpleType\">Aspect Model AspectWithCollectionOfSimpleType</h1>" );
8079
assertThat( htmlResult ).contains(
8180
"<h3 id=\"io-openmanufacturing-test-AspectWithCollectionOfSimpleType-io-openmanufacturing-test-testList-property\">testList</h3>" );
81+
// example value
82+
assertThat( htmlResult ).containsIgnoringWhitespaces( "<div class=\"w-80\">Example</div><div class=\"w-full\">35</div>" );
8283
}
8384

8485
@ParameterizedTest

core/sds-aspect-model-resolver/src/main/java/io/openmanufacturing/sds/aspectmodel/resolver/AspectModelResolver.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.openmanufacturing.sds.aspectmodel.versionupdate.MigratorFactory;
4141
import io.openmanufacturing.sds.aspectmodel.versionupdate.MigratorService;
4242
import io.openmanufacturing.sds.aspectmodel.versionupdate.MigratorServiceLoader;
43+
import io.vavr.Value;
4344
import io.vavr.control.Option;
4445
import io.vavr.control.Try;
4546

@@ -66,10 +67,27 @@ public static Set<String> getAllUrnsInModel( final Model model ) {
6667
Stream.of( statement.getObject().asResource().getURI() ) : Stream.empty();
6768

6869
return Stream.of( subjectUri, propertyUri, objectUri )
69-
.flatMap( Function.identity() );
70+
.flatMap( Function.identity() )
71+
.map( AspectModelResolver::resolveBammUrn )
72+
.flatMap( Value::toJavaStream );
7073
} ) ).flatMap( Function.identity() ).collect( Collectors.toSet() );
7174
}
7275

76+
/**
77+
* Tries to resolve the given Bamm URN {@link AspectModelUrn}
78+
*
79+
* @param urn The Aspect (meta) model URN
80+
* @return The {@link String} if it is resolvable, an {@link UrnSyntaxException} otherwise
81+
*/
82+
private static Try<String> resolveBammUrn( final String urn ) {
83+
try {
84+
AspectModelUrn.fromUrn( urn );
85+
return Try.success( urn );
86+
} catch ( final UrnSyntaxException exception ) {
87+
return Try.failure( exception );
88+
}
89+
}
90+
7391
/**
7492
* Method to resolve a given {@link AspectModelUrn} using a suitable {@link ResolutionStrategy}.
7593
* This creates the closure (merged model) of all referenced models and the corresponding meta model.
@@ -157,23 +175,28 @@ private Try<Model> resolve( final String urn, final ResolutionStrategy resolutio
157175

158176
// Merge the resolved model into the target if it was not already merged before.
159177
// It could have been merged before when the model contains another model definition that was already resolved
160-
if ( !mergedModels.contains( model ) ) {
178+
if ( !modelAlreadyResolved( model, mergedModels ) ) {
161179
mergeModels( result, model );
162180
mergedModels.add( model );
163-
}
164-
for ( final String element : getAllUrnsInModel( model ) ) {
165-
if ( !result.contains( model.createResource( element ), RDF.type, (RDFNode) null )
166-
// Backwards compatibility with BAMM 1.0.0
167-
&& !result.contains( model.createResource( element ), refines, (RDFNode) null )
168-
&& !unresolvedUrns.contains( element ) ) {
169-
unresolvedUrns.push( element );
181+
182+
for ( final String element : getAllUrnsInModel( model ) ) {
183+
if ( !result.contains( model.createResource( element ), RDF.type, (RDFNode) null )
184+
// Backwards compatibility with BAMM 1.0.0
185+
&& !result.contains( model.createResource( element ), refines, (RDFNode) null )
186+
&& !unresolvedUrns.contains( element ) ) {
187+
unresolvedUrns.push( element );
188+
}
170189
}
171190
}
172191
}
173192

174193
return Try.success( result );
175194
}
176195

196+
private boolean modelAlreadyResolved( final Model model, final Set<Model> resolvedModels ) {
197+
return resolvedModels.stream().anyMatch( model::isIsomorphicWith );
198+
}
199+
177200
private final Model EMPTY_MODEL = ModelFactory.createDefaultModel();
178201

179202
/**

core/sds-aspect-model-resolver/src/test/java/io/openmanufacturing/sds/aspectmodel/resolver/AspectModelResolverTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import static org.assertj.vavr.api.VavrAssertions.assertThat;
1717

1818
import java.io.File;
19-
import java.io.FileNotFoundException;
2019
import java.net.URISyntaxException;
2120
import java.util.List;
2221

@@ -372,4 +371,27 @@ public void testMergingModelsWithBlankNodeValues( final KnownVersion metaModelVe
372371
final List<Statement> propertiesAssertions = model.listStatements( primaryAspect, bamm.properties(), (RDFNode) null ).toList();
373372
Assertions.assertThat( propertiesAssertions.size() ).isEqualTo( 1 );
374373
}
374+
375+
@ParameterizedTest
376+
@MethodSource( value = "allVersions" )
377+
public void testMultiReferenceSameSource( final KnownVersion metaModelVersion ) throws URISyntaxException {
378+
final File aspectModelsRootDirectory = new File(
379+
AspectModelResolverTest.class.getClassLoader()
380+
.getResource( metaModelVersion.toString().toLowerCase() )
381+
.toURI()
382+
.getPath() );
383+
384+
final AspectModelUrn testUrn = AspectModelUrn.fromUrn( "urn:bamm:io.openmanufacturing.test:1.0.0#VehicleInstance" );
385+
386+
final ResolutionStrategy urnStrategy = new FileSystemStrategy( aspectModelsRootDirectory.toPath() );
387+
final Try<VersionedModel> result = resolver.resolveAspectModel( urnStrategy, testUrn );
388+
assertThat( result ).isSuccess();
389+
390+
// make sure the source file for the definitions of ModelYear and ModelCode (ModelDef.ttl) is only loaded once
391+
final Model model = result.get().getModel();
392+
final Resource entity = model.createResource( "urn:bamm:io.openmanufacturing.test:1.0.0#SomeOtherNonRelatedEntity" );
393+
final BAMM bamm = new BAMM( metaModelVersion );
394+
final List<Statement> properties = model.listStatements( entity, bamm.properties(), (RDFNode) null ).toList();
395+
Assertions.assertThat( properties.size() ).isEqualTo( 1 );
396+
}
375397
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright (c) 2022 Robert Bosch Manufacturing Solutions GmbH
2+
#
3+
# See the AUTHORS file(s) distributed with this work for additional
4+
# information regarding authorship.
5+
#
6+
# This Source Code Form is subject to the terms of the Mozilla Public
7+
# License, v. 2.0. If a copy of the MPL was not distributed with this
8+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
9+
#
10+
# SPDX-License-Identifier: MPL-2.0
11+
12+
@prefix bamm: <urn:bamm:io.openmanufacturing:meta-model:1.0.0#> .
13+
@prefix bamm-c: <urn:bamm:io.openmanufacturing:characteristic:1.0.0#> .
14+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
15+
@prefix : <urn:bamm:io.openmanufacturing.test:1.0.0#> .
16+
17+
:ModelCode a bamm-c:Code ;
18+
bamm:name "ModelCode" ;
19+
bamm:dataType xsd:string .
20+
21+
:ModelYear a bamm-c:Code ;
22+
bamm:name "ModelYear" ;
23+
bamm:dataType xsd:nonNegativeInteger .
24+
25+
:SomeOtherNonRelatedEntity a bamm:Entity ;
26+
bamm:name "SomeOtherNonRelatedEntity";
27+
bamm:properties ( :name ) .
28+
29+
:name a bamm:Property ;
30+
bamm:name "name";
31+
bamm:characteristic bamm-c:Text .
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright (c) 2022 Robert Bosch Manufacturing Solutions GmbH
2+
#
3+
# See the AUTHORS file(s) distributed with this work for additional
4+
# information regarding authorship.
5+
#
6+
# This Source Code Form is subject to the terms of the Mozilla Public
7+
# License, v. 2.0. If a copy of the MPL was not distributed with this
8+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
9+
#
10+
# SPDX-License-Identifier: MPL-2.0
11+
12+
@prefix bamm: <urn:bamm:io.openmanufacturing:meta-model:1.0.0#> .
13+
@prefix : <urn:bamm:io.openmanufacturing.test:1.0.0#> .
14+
15+
:VehicleInstance a bamm:Entity ;
16+
bamm:name "VehicleInstance" ;
17+
bamm:properties ( :modelYear :model ) .
18+
19+
:modelYear a bamm:Property ;
20+
bamm:name "modelYear" ;
21+
bamm:characteristic :ModelYear .
22+
23+
:model a bamm:Property ;
24+
bamm:name "model" ;
25+
bamm:characteristic :ModelCode .
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Copyright (c) 2022 Robert Bosch Manufacturing Solutions GmbH
2+
#
3+
# See the AUTHORS file(s) distributed with this work for additional
4+
# information regarding authorship.
5+
#
6+
# This Source Code Form is subject to the terms of the Mozilla Public
7+
# License, v. 2.0. If a copy of the MPL was not distributed with this
8+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
9+
#
10+
# SPDX-License-Identifier: MPL-2.0
11+
12+
@prefix bamm: <urn:bamm:io.openmanufacturing:meta-model:2.0.0#> .
13+
@prefix bamm-c: <urn:bamm:io.openmanufacturing:characteristic:2.0.0#> .
14+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
15+
@prefix : <urn:bamm:io.openmanufacturing.test:1.0.0#> .
16+
17+
:ModelCode a bamm-c:Code ;
18+
bamm:dataType xsd:string .
19+
20+
:ModelYear a bamm-c:Code ;
21+
bamm:dataType xsd:nonNegativeInteger .
22+
23+
:SomeOtherNonRelatedEntity a bamm:Entity ;
24+
bamm:properties ( :name ) .
25+
26+
:name a bamm:Property ;
27+
bamm:characteristic bamm-c:Text .
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Copyright (c) 2022 Robert Bosch Manufacturing Solutions GmbH
2+
#
3+
# See the AUTHORS file(s) distributed with this work for additional
4+
# information regarding authorship.
5+
#
6+
# This Source Code Form is subject to the terms of the Mozilla Public
7+
# License, v. 2.0. If a copy of the MPL was not distributed with this
8+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
9+
#
10+
# SPDX-License-Identifier: MPL-2.0
11+
12+
@prefix bamm: <urn:bamm:io.openmanufacturing:meta-model:2.0.0#> .
13+
@prefix : <urn:bamm:io.openmanufacturing.test:1.0.0#> .
14+
15+
:VehicleInstance a bamm:Entity ;
16+
bamm:properties ( :modelYear :model ) .
17+
18+
:modelYear a bamm:Property ;
19+
bamm:characteristic :ModelYear .
20+
21+
:model a bamm:Property ;
22+
bamm:characteristic :ModelCode .

documentation/developer-guide/modules/ROOT/partials/aspect-meta-model-artifact.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Maven::
77
----
88
<dependency>
99
<groupId>io.openmanufacturing</groupId>
10-
<artifactId>aspect-meta-model</artifactId>
10+
<artifactId>sds-aspect-meta-model</artifactId>
1111
<version>{aspect-meta-model-version}</version>
1212
</dependency>
1313
----
@@ -17,15 +17,15 @@ Gradle Groovy DSL::
1717
--
1818
[source,gradle,subs=attributes+]
1919
----
20-
implementation 'io.openmanufacturing:aspect-meta-model:{aspect-meta-model-version}'
20+
implementation 'io.openmanufacturing:sds-aspect-meta-model:{aspect-meta-model-version}'
2121
----
2222
--
2323
Gradle Kotlin DSL::
2424
+
2525
--
2626
[source,gradle,subs=attributes+]
2727
----
28-
implementation("io.openmanufacturing:aspect-meta-model:{aspect-meta-model-version}")
28+
implementation("io.openmanufacturing:sds-aspect-meta-model:{aspect-meta-model-version}")
2929
----
3030
--
3131
====

documentation/developer-guide/modules/tooling-guide/pages/bamm-cli.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ The BAMM CLI is a command line tool for the validation of Aspect models and the
77

88
TIP: Download latest version: icon:download[] https://github.com/OpenManufacturingPlatform/sds-sdk/releases/download/v{sds-sdk-version}/bamm-cli-{sds-sdk-version}.jar[bamm-cli-{sds-sdk-version}.jar]
99

10+
NOTE: For technical reasons, Java 11 is required to successfully run the tool.
11+
1012
[[bamm-cli-getting-started]]
1113
== Running the BAMM CLI
1214

0 commit comments

Comments
 (0)