Skip to content

Commit b6ce399

Browse files
authored
Merge pull request #539 from bci-oss/340-add-model-information-to-the-openapi-spec
Add Model information to the Openapi Spec
2 parents 62e6a8a + 69a8040 commit b6ce399

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/jsonschema/AspectModelJsonSchemaVisitor.java

+5
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ public JsonNode visitBase( final ModelElement modelElement, final ObjectNode con
231231

232232
public JsonNode visitAspectForOpenApi( final Aspect aspect ) {
233233
addDescription( rootNode, aspect, locale );
234+
addXSammAspectModelUrn( rootNode, aspect );
234235
return visitHasProperties( aspect, rootNode );
235236
}
236237

@@ -671,4 +672,8 @@ private ObjectNode addDescription( final ObjectNode node, final NamedElement des
671672

672673
return node;
673674
}
675+
676+
private void addXSammAspectModelUrn( final ObjectNode node, final NamedElement describedElement ) {
677+
describedElement.getAspectModelUrn().ifPresent( urn -> node.put( "x-samm-aspect-model-urn", urn.toString() ) );
678+
}
674679
}

core/esmf-aspect-model-document-generators/src/main/java/org/eclipse/esmf/aspectmodel/generator/openapi/AspectModelOpenApiGenerator.java

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import org.eclipse.esmf.aspectmodel.generator.jsonschema.AspectModelJsonSchemaGenerator;
2929
import org.eclipse.esmf.aspectmodel.generator.jsonschema.AspectModelJsonSchemaVisitor;
30+
import org.eclipse.esmf.aspectmodel.urn.AspectModelUrn;
3031
import org.eclipse.esmf.metamodel.Aspect;
3132
import org.eclipse.esmf.metamodel.NamedElement;
3233
import org.eclipse.esmf.metamodel.Operation;
@@ -169,6 +170,7 @@ public JsonNode applyForJson( final Aspect aspect, final boolean useSemanticVers
169170

170171
( (ObjectNode) rootNode.get( "info" ) ).put( "title", aspect.getPreferredName( locale ) );
171172
( (ObjectNode) rootNode.get( "info" ) ).put( "version", apiVersion );
173+
( (ObjectNode) rootNode.get( "info" ) ).put( "x-samm-aspect-model-urn", aspect.getAspectModelUrn().map( Object::toString ).orElse( "" ) );
172174

173175
setServers( rootNode, baseUrl, apiVersion, READ_SERVER_PATH );
174176
final boolean includePaging = includePaging( aspect, pagingOption );

core/esmf-aspect-model-document-generators/src/test/java/org/eclipse/esmf/aspectmodel/generator/openapi/OpenApiTest.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ public void testUseSemanticVersion( final KnownVersion metaModelVersion ) {
9595
final OpenAPI openApi = result.getOpenAPI();
9696

9797
assertThat( openApi.getInfo().getVersion() ).isEqualTo( "v1.0.0" );
98+
assertThat( json.get( "info" ).get( "x-samm-aspect-model-urn" ) ).isNotNull();
99+
assertThat( json.get( "info" ).get( "x-samm-aspect-model-urn" ).asText() ).isEqualTo( aspect.getAspectModelUrn().map( Object::toString ).orElse( "" ) );
98100

99101
openApi.getServers().forEach( server -> assertThat( server.getUrl() ).contains( "v1.0.0" ) );
100102
}
@@ -412,7 +414,7 @@ private void assertSpecificationIsValid( final JsonNode jsonNode, final String j
412414
validateUnsupportedKeywords( jsonNode );
413415

414416
final SwaggerParseResult result = new OpenAPIParser().readContents( json, null, null );
415-
assertThat( result.getMessages().size() ).isZero();
417+
assertThat( result.getMessages() ).isEmpty();
416418

417419
final OpenAPI openApi = result.getOpenAPI();
418420
validateOpenApiSpec( jsonNode, openApi, aspect );
@@ -436,6 +438,10 @@ private void validateOpenApiSpec( final JsonNode node, final OpenAPI openApi, fi
436438
final String expectedApiVersion = getExpectedApiVersion( aspect );
437439
assertThat( openApi.getInfo().getVersion() ).isEqualTo( expectedApiVersion );
438440

441+
final String xSammAspectModelUrn = "x-samm-aspect-model-urn";
442+
assertThat( node.get( "info" ).get( xSammAspectModelUrn ) ).isNotNull();
443+
assertThat( node.get( "info" ).get( xSammAspectModelUrn ).asText() ).isEqualTo( aspect.getAspectModelUrn().map( Object::toString ).orElse( "" ) );
444+
439445
assertThat( openApi.getServers() ).hasSize( 1 );
440446
assertThat( openApi.getServers().get( 0 ).getUrl() ).isEqualTo( TEST_BASE_URL + "/api/" + expectedApiVersion );
441447

@@ -450,6 +456,8 @@ private void validateOpenApiSpec( final JsonNode node, final OpenAPI openApi, fi
450456
assertThat( openApi.getComponents().getSchemas().keySet() ).contains( aspect.getName() );
451457
assertThat( openApi.getComponents().getResponses().keySet() ).contains( aspect.getName() );
452458
assertThat( openApi.getComponents().getRequestBodies().keySet() ).contains( aspect.getName() );
459+
assertThat( openApi.getComponents().getSchemas().get( aspect.getName() ).getExtensions().get( xSammAspectModelUrn ) ).isNotNull();
460+
assertThat( openApi.getComponents().getSchemas().get( aspect.getName() ).getExtensions().get( xSammAspectModelUrn ).toString() ).contains( aspect.getAspectModelUrn().map( Object::toString ).orElse( "" ));
453461

454462
validateReferences( node );
455463
}

0 commit comments

Comments
 (0)