From: Robert Varga Date: Tue, 3 May 2022 13:31:15 +0000 (+0200) Subject: Remove Bierman02 support from sal-rest-docgen X-Git-Tag: v4.0.0~79 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=40331af8b57ab84b92b9d5a50f19e74a88bb0cde;hp=badf6773b082d081d4c472c86b5ad6f01e63db63;p=netconf.git Remove Bierman02 support from sal-rest-docgen sal-rest-docgen still has references to bierman02, remove them. Since we are touching blueprint, ditch ODL extension reference. JIRA: NETCONF-837 Change-Id: If9b89c40779dc9a87e9e26b38ca2bc2ba0dc5500 Signed-off-by: Robert Varga --- diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/AllModulesDocGenerator.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/AllModulesDocGenerator.java index 3cd24ed4de..ee6e0ff225 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/AllModulesDocGenerator.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/AllModulesDocGenerator.java @@ -7,32 +7,23 @@ */ package org.opendaylight.netconf.sal.rest.doc.impl; -import static org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; +import static java.util.Objects.requireNonNull; -import java.util.Objects; import javax.ws.rs.core.UriInfo; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; +import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; import org.opendaylight.netconf.sal.rest.doc.swagger.CommonApiObject; import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject; public class AllModulesDocGenerator { - private final ApiDocGeneratorDraftO2 apiDocGeneratorDraft02; private final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040; - public AllModulesDocGenerator(final ApiDocGeneratorDraftO2 apiDocGeneratorDraft02, - final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040) { - this.apiDocGeneratorDraft02 = Objects.requireNonNull(apiDocGeneratorDraft02); - this.apiDocGeneratorRFC8040 = Objects.requireNonNull(apiDocGeneratorRFC8040); + public AllModulesDocGenerator(final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040) { + this.apiDocGeneratorRFC8040 = requireNonNull(apiDocGeneratorRFC8040); } - public CommonApiObject getAllModulesDoc(final UriInfo uriInfo, final URIType uriType, final OAversion oaversion) { + public CommonApiObject getAllModulesDoc(final UriInfo uriInfo, final OAversion oaversion) { final DefinitionNames definitionNames = new DefinitionNames(); - final SwaggerObject doc; - if (uriType.equals(URIType.DRAFT02)) { - doc = apiDocGeneratorDraft02.getAllModulesDoc(uriInfo, definitionNames, uriType, oaversion); - } else { - doc = apiDocGeneratorRFC8040.getAllModulesDoc(uriInfo, definitionNames, uriType, oaversion); - } + final SwaggerObject doc = apiDocGeneratorRFC8040.getAllModulesDoc(uriInfo, definitionNames, oaversion); return BaseYangSwaggerGenerator.getAppropriateDoc(doc, oaversion); } diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorDraftO2.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorDraftO2.java deleted file mode 100644 index 8423b0ea44..0000000000 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorDraftO2.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.netconf.sal.rest.doc.impl; - -import java.util.Objects; -import java.util.Optional; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; - -/** - * This class gathers all YANG-defined {@link org.opendaylight.yangtools.yang.model.api.Module}s and - * generates Swagger compliant documentation for the bierman draft02 version. - */ -public class ApiDocGeneratorDraftO2 extends BaseYangSwaggerGeneratorDraft02 { - - public ApiDocGeneratorDraftO2(final DOMSchemaService schemaService) { - super(Optional.of(Objects.requireNonNull(schemaService))); - } - - public ApiDocGeneratorDraftO2(final DOMSchemaService schemaService, final String basePath) { - super(Optional.of(Objects.requireNonNull(schemaService)), basePath); - } -} diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorRFC8040.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorRFC8040.java index aadd8039bc..5d80043416 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorRFC8040.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGeneratorRFC8040.java @@ -7,7 +7,6 @@ */ package org.opendaylight.netconf.sal.rest.doc.impl; -import java.util.Objects; import java.util.Optional; import org.opendaylight.mdsal.dom.api.DOMSchemaService; @@ -18,12 +17,11 @@ import org.opendaylight.mdsal.dom.api.DOMSchemaService; * @author Thomas Pantelis */ public class ApiDocGeneratorRFC8040 extends BaseYangSwaggerGeneratorRFC8040 { - public ApiDocGeneratorRFC8040(final DOMSchemaService schemaService) { - super(Optional.of(Objects.requireNonNull(schemaService))); + super(Optional.of(schemaService)); } public ApiDocGeneratorRFC8040(final DOMSchemaService schemaService, final String basePath) { - super(Optional.of(Objects.requireNonNull(schemaService)), basePath); + super(Optional.of(schemaService), basePath); } } diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java index 0f68a1cd79..21dd225952 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java @@ -7,8 +7,9 @@ */ package org.opendaylight.netconf.sal.rest.doc.impl; +import static java.util.Objects.requireNonNull; + import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import javax.ws.rs.core.Response; @@ -38,35 +39,24 @@ public class ApiDocServiceImpl implements ApiDocService { // Query parameter private static final String PAGE_NUM = "pageNum"; - public enum URIType { RFC8040, DRAFT02 } - public enum OAversion { V2_0, V3_0 } - private final MountPointSwagger mountPointSwaggerDraft02; private final MountPointSwagger mountPointSwaggerRFC8040; - private final ApiDocGeneratorDraftO2 apiDocGeneratorDraft02; private final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040; private final AllModulesDocGenerator allModulesDocGenerator; - public ApiDocServiceImpl(final MountPointSwaggerGeneratorDraft02 mountPointSwaggerGeneratorDraft02, - final MountPointSwaggerGeneratorRFC8040 mountPointSwaggerGeneratorRFC8040, - final ApiDocGeneratorDraftO2 apiDocGeneratorDraft02, + public ApiDocServiceImpl(final MountPointSwaggerGeneratorRFC8040 mountPointSwaggerGeneratorRFC8040, final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040, final AllModulesDocGenerator allModulesDocGenerator) { - this.mountPointSwaggerDraft02 = - Objects.requireNonNull(mountPointSwaggerGeneratorDraft02).getMountPointSwagger(); - this.mountPointSwaggerRFC8040 = - Objects.requireNonNull(mountPointSwaggerGeneratorRFC8040).getMountPointSwagger(); - this.apiDocGeneratorDraft02 = Objects.requireNonNull(apiDocGeneratorDraft02); - this.apiDocGeneratorRFC8040 = Objects.requireNonNull(apiDocGeneratorRFC8040); - this.allModulesDocGenerator = Objects.requireNonNull(allModulesDocGenerator); + mountPointSwaggerRFC8040 = + requireNonNull(mountPointSwaggerGeneratorRFC8040).getMountPointSwagger(); + this.apiDocGeneratorRFC8040 = requireNonNull(apiDocGeneratorRFC8040); + this.allModulesDocGenerator = requireNonNull(allModulesDocGenerator); } @Override public synchronized Response getAllModulesDoc(final UriInfo uriInfo) { - final CommonApiObject allModulesDoc = allModulesDocGenerator.getAllModulesDoc(uriInfo, identifyUriType(uriInfo), - identifyOpenApiVersion(uriInfo)); - return Response.ok(allModulesDoc).build(); + return Response.ok(allModulesDocGenerator.getAllModulesDoc(uriInfo, identifyOpenApiVersion(uriInfo))).build(); } /** @@ -74,15 +64,9 @@ public class ApiDocServiceImpl implements ApiDocService { */ @Override public synchronized Response getDocByModule(final String module, final String revision, final UriInfo uriInfo) { - final CommonApiObject doc; - final OAversion oaversion = identifyOpenApiVersion(uriInfo); - if (identifyUriType(uriInfo).equals(URIType.RFC8040)) { - doc = apiDocGeneratorRFC8040.getApiDeclaration(module, revision, uriInfo, URIType.RFC8040, oaversion); - } else { - doc = apiDocGeneratorDraft02.getApiDeclaration(module, revision, uriInfo, URIType.DRAFT02, oaversion); - } - - return Response.ok(doc).build(); + return Response.ok( + apiDocGeneratorRFC8040.getApiDeclaration(module, revision, uriInfo, identifyOpenApiVersion(uriInfo))) + .build(); } /** @@ -95,13 +79,7 @@ public class ApiDocServiceImpl implements ApiDocService { @Override public synchronized Response getListOfMounts(final UriInfo uriInfo) { - final MountPointSwagger mountPointSwagger; - if (identifyUriType(uriInfo).equals(URIType.RFC8040)) { - mountPointSwagger = mountPointSwaggerRFC8040; - } else { - mountPointSwagger = mountPointSwaggerDraft02; - } - final List entity = mountPointSwagger + final List entity = mountPointSwaggerRFC8040 .getInstanceIdentifiers().entrySet().stream() .map(MountPointInstance::new).collect(Collectors.toList()); return Response.ok(entity).build(); @@ -110,17 +88,9 @@ public class ApiDocServiceImpl implements ApiDocService { @Override public synchronized Response getMountDocByModule(final String instanceNum, final String module, final String revision, final UriInfo uriInfo) { - final CommonApiObject api; final OAversion oaversion = identifyOpenApiVersion(uriInfo); - if (identifyUriType(uriInfo).equals(URIType.RFC8040)) { - api = mountPointSwaggerRFC8040 - .getMountPointApi(uriInfo, Long.parseLong(instanceNum), module, revision, URIType.RFC8040, - oaversion); - } else { - api = mountPointSwaggerDraft02 - .getMountPointApi(uriInfo, Long.parseLong(instanceNum), module, revision, URIType.DRAFT02, - oaversion); - } + final CommonApiObject api = mountPointSwaggerRFC8040.getMountPointApi(uriInfo, Long.parseLong(instanceNum), + module, revision, oaversion); return Response.ok(api).build(); } @@ -131,25 +101,10 @@ public class ApiDocServiceImpl implements ApiDocService { final String stringPageNum = uriInfo.getQueryParameters().getFirst(PAGE_NUM); final Optional pageNum = stringPageNum != null ? Optional.of(Integer.valueOf(stringPageNum)) : Optional.empty(); - if (identifyUriType(uriInfo).equals(URIType.RFC8040)) { - api = mountPointSwaggerRFC8040 - .getMountPointApi(uriInfo, Long.parseLong(instanceNum), pageNum, URIType.RFC8040, - oaversion); - } else { - api = mountPointSwaggerDraft02 - .getMountPointApi(uriInfo, Long.parseLong(instanceNum), pageNum, URIType.DRAFT02, - oaversion); - } + api = mountPointSwaggerRFC8040.getMountPointApi(uriInfo, Long.parseLong(instanceNum), pageNum, oaversion); return Response.ok(api).build(); } - private static URIType identifyUriType(final UriInfo uriInfo) { - if (uriInfo.getBaseUri().toString().contains("/18/")) { - return URIType.RFC8040; - } - return URIType.DRAFT02; - } - private static OAversion identifyOpenApiVersion(final UriInfo uriInfo) { if (uriInfo.getBaseUri().toString().contains("/swagger2/")) { return OAversion.V2_0; diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java index 2d5593c6e0..7c987afd20 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java @@ -8,7 +8,6 @@ package org.opendaylight.netconf.sal.rest.doc.impl; import static org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.DEFAULT_PAGESIZE; -import static org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.CONFIG; import static org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.TOP; import static org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.buildDelete; import static org.opendaylight.netconf.sal.rest.doc.model.builder.OperationBuilder.buildGet; @@ -47,7 +46,6 @@ import java.util.TreeSet; import javax.ws.rs.core.UriInfo; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; import org.opendaylight.netconf.sal.rest.doc.swagger.CommonApiObject; import org.opendaylight.netconf.sal.rest.doc.swagger.Components; import org.opendaylight.netconf.sal.rest.doc.swagger.Info; @@ -92,7 +90,7 @@ public abstract class BaseYangSwaggerGenerator { protected BaseYangSwaggerGenerator(final Optional schemaService) { this.schemaService = schemaService.orElse(null); - this.mapper.configure(SerializationFeature.INDENT_OUTPUT, true); + mapper.configure(SerializationFeature.INDENT_OUTPUT, true); } public DOMSchemaService getSchemaService() { @@ -100,8 +98,8 @@ public abstract class BaseYangSwaggerGenerator { } public ResourceList getResourceListing(final UriInfo uriInfo, final EffectiveModelContext schemaContext, - final String context, final URIType uriType, final OAversion oaversion) { - return getResourceListing(uriInfo, schemaContext, context, 0, true, uriType, oaversion); + final String context, final OAversion oaversion) { + return getResourceListing(uriInfo, schemaContext, context, 0, true, oaversion); } /** @@ -109,7 +107,7 @@ public abstract class BaseYangSwaggerGenerator { */ public ResourceList getResourceListing(final UriInfo uriInfo, final EffectiveModelContext schemaContext, final String context, final int pageNum, final boolean all, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final ResourceList resourceList = createResourceList(); final Set modules = getSortedModules(schemaContext); @@ -125,7 +123,7 @@ public abstract class BaseYangSwaggerGenerator { LOG.debug("Working on [{},{}]...", module.getName(), revisionString); final SwaggerObject doc = getApiDeclaration(module.getName(), revisionString, uriInfo, schemaContext, - context, uriType, oaversion); + context, oaversion); if (doc != null) { count++; if (count >= start && count < end || all) { @@ -148,17 +146,17 @@ public abstract class BaseYangSwaggerGenerator { } public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final DefinitionNames definitionNames, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final EffectiveModelContext schemaContext = schemaService.getGlobalContext(); Preconditions.checkState(schemaContext != null); return getAllModulesDoc(uriInfo, Optional.empty(), schemaContext, Optional.empty(), "", definitionNames, - uriType, oaversion); + oaversion); } public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final Optional> range, final EffectiveModelContext schemaContext, final Optional deviceName, final String context, final DefinitionNames definitionNames, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final String schema = createSchemaFromUriInfo(uriInfo); final String host = createHostFromUriInfo(uriInfo); String name = "Controller"; @@ -166,19 +164,19 @@ public abstract class BaseYangSwaggerGenerator { name = deviceName.get(); } - final String title = String.format("%s modules of RestConf version %s", name, uriType.name()); + final String title = name + " modules of RESTCONF"; final SwaggerObject doc = createSwaggerObject(schema, host, BASE_PATH, title); doc.setDefinitions(JsonNodeFactory.instance.objectNode()); doc.setPaths(JsonNodeFactory.instance.objectNode()); - fillDoc(doc, range, schemaContext, context, deviceName, uriType, oaversion, definitionNames); + fillDoc(doc, range, schemaContext, context, deviceName, oaversion, definitionNames); return doc; } public void fillDoc(final SwaggerObject doc, final Optional> range, final EffectiveModelContext schemaContext, final String context, - final Optional deviceName, final URIType uriType, final OAversion oaversion, + final Optional deviceName, final OAversion oaversion, final DefinitionNames definitionNames) { final SortedSet modules = getSortedModules(schemaContext); final Set filteredModules; @@ -193,8 +191,7 @@ public abstract class BaseYangSwaggerGenerator { LOG.debug("Working on [{},{}]...", module.getName(), revisionString); - getSwaggerDocSpec(module, context, deviceName, schemaContext, uriType, oaversion, definitionNames, doc, - false); + getSwaggerDocSpec(module, context, deviceName, schemaContext, oaversion, definitionNames, doc, false); } } @@ -236,17 +233,16 @@ public abstract class BaseYangSwaggerGenerator { } public CommonApiObject getApiDeclaration(final String module, final String revision, final UriInfo uriInfo, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final EffectiveModelContext schemaContext = schemaService.getGlobalContext(); Preconditions.checkState(schemaContext != null); - final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "", uriType, - oaversion); + final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "", oaversion); return getAppropriateDoc(doc, oaversion); } public SwaggerObject getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo, final EffectiveModelContext schemaContext, final String context, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final Optional rev; try { @@ -259,16 +255,15 @@ public abstract class BaseYangSwaggerGenerator { Preconditions.checkArgument(module != null, "Could not find module by name,revision: " + moduleName + "," + revision); - return getApiDeclaration(module, uriInfo, context, schemaContext, uriType, oaversion); + return getApiDeclaration(module, uriInfo, context, schemaContext, oaversion); } - public SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, - final String context, final EffectiveModelContext schemaContext, - final URIType uriType, final OAversion oaversion) { + public SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, final String context, + final EffectiveModelContext schemaContext, final OAversion oaversion) { final String schema = createSchemaFromUriInfo(uriInfo); final String host = createHostFromUriInfo(uriInfo); - return getSwaggerDocSpec(module, schema, host, BASE_PATH, context, schemaContext, uriType, oaversion); + return getSwaggerDocSpec(module, schema, host, BASE_PATH, context, schemaContext, oaversion); } public String createHostFromUriInfo(final UriInfo uriInfo) { @@ -286,33 +281,32 @@ public abstract class BaseYangSwaggerGenerator { public SwaggerObject getSwaggerDocSpec(final Module module, final String schema, final String host, final String basePath, final String context, - final EffectiveModelContext schemaContext, final URIType uriType, - final OAversion oaversion) { + final EffectiveModelContext schemaContext, final OAversion oaversion) { final SwaggerObject doc = createSwaggerObject(schema, host, basePath, module.getName()); final DefinitionNames definitionNames = new DefinitionNames(); - return getSwaggerDocSpec(module, context, Optional.empty(), schemaContext, uriType, oaversion, - definitionNames, doc, true); + return getSwaggerDocSpec(module, context, Optional.empty(), schemaContext, oaversion, definitionNames, doc, + true); } public SwaggerObject getSwaggerDocSpec(final Module module, final String context, final Optional deviceName, - final EffectiveModelContext schemaContext, final URIType uriType, - final OAversion oaversion, final DefinitionNames definitionNames, - final SwaggerObject doc, final boolean isForSingleModule) { + final EffectiveModelContext schemaContext, final OAversion oaversion, + final DefinitionNames definitionNames, final SwaggerObject doc, + final boolean isForSingleModule) { final ObjectNode definitions; try { if (isForSingleModule) { - definitions = this.jsonConverter.convertToJsonSchema(module, schemaContext, definitionNames, oaversion, + definitions = jsonConverter.convertToJsonSchema(module, schemaContext, definitionNames, oaversion, true); doc.setDefinitions(definitions); } else { - definitions = this.jsonConverter.convertToJsonSchema(module, schemaContext, definitionNames, oaversion, + definitions = jsonConverter.convertToJsonSchema(module, schemaContext, definitionNames, oaversion, false); addFields(doc.getDefinitions(), definitions.fields()); } if (LOG.isDebugEnabled()) { - LOG.debug("Document: {}", this.mapper.writeValueAsString(doc)); + LOG.debug("Document: {}", mapper.writeValueAsString(doc)); } } catch (final IOException e) { LOG.error("Exception occured in DefinitionGenerator", e); @@ -350,17 +344,16 @@ public abstract class BaseYangSwaggerGenerator { } final String resolvedPath = resourcePath + "/" + createPath(node, pathParams, oaversion, localName); - addPaths(node, deviceName, moduleName, paths, pathParams, schemaContext, true, - module.getName(), definitionNames, uriType, oaversion, resolvedPath); + addPaths(node, deviceName, moduleName, paths, pathParams, schemaContext, true, module.getName(), + definitionNames, oaversion, resolvedPath); } pathParams = JsonNodeFactory.instance.arrayNode(); resourcePath = getResourcePath("operational", context); - if (uriType.equals(URIType.DRAFT02) - || uriType.equals(URIType.RFC8040) && !node.isConfiguration()) { + if (!node.isConfiguration()) { final String resolvedPath = resourcePath + "/" + createPath(node, pathParams, oaversion, localName); - addPaths(node, deviceName, moduleName, paths, pathParams, schemaContext, false, - moduleName, definitionNames, uriType, oaversion, resolvedPath); + addPaths(node, deviceName, moduleName, paths, pathParams, schemaContext, false, moduleName, + definitionNames, oaversion, resolvedPath); } } } @@ -446,8 +439,7 @@ public abstract class BaseYangSwaggerGenerator { private void addPaths(final DataSchemaNode node, final Optional deviceName, final String moduleName, final ObjectNode paths, final ArrayNode parentPathParams, final EffectiveModelContext schemaContext, final boolean isConfig, final String parentName, - final DefinitionNames definitionNames, final URIType uriType, final OAversion oaversion, - final String resourcePath) { + final DefinitionNames definitionNames, final OAversion oaversion, final String resourcePath) { LOG.debug("Adding path: [{}]", resourcePath); final ArrayNode pathParams = JsonUtil.copy(parentPathParams); @@ -459,10 +451,10 @@ public abstract class BaseYangSwaggerGenerator { final ObjectNode path = JsonNodeFactory.instance.objectNode(); path.setAll(operations(node, moduleName, deviceName, pathParams, isConfig, parentName, definitionNames, - uriType, oaversion)); + oaversion)); paths.set(resourcePath, path); - if (uriType.equals(URIType.RFC8040)) { + if (node instanceof ActionNodeContainer) { ((ActionNodeContainer) node).getActions().forEach(actionDef -> { final String resolvedPath = "rests/operations" + resourcePath.substring(11) + "/" + resolvePathArgumentsName(actionDef.getQName(), node.getQName(), schemaContext); @@ -477,16 +469,9 @@ public abstract class BaseYangSwaggerGenerator { final String localName = resolvePathArgumentsName(childNode.getQName(), node.getQName(), schemaContext); final String newResourcePath = resourcePath + "/" + createPath(childNode, pathParams, oaversion, localName); - if (uriType.equals(URIType.RFC8040)) { - final boolean newIsConfig = isConfig && childNode.isConfiguration(); - addPaths(childNode, deviceName, moduleName, paths, pathParams, schemaContext, - newIsConfig, newParent, definitionNames, uriType, oaversion, newResourcePath); - } else { - if (!isConfig || childNode.isConfiguration()) { - addPaths(childNode, deviceName, moduleName, paths, pathParams, schemaContext, - isConfig, newParent, definitionNames, uriType, oaversion, newResourcePath); - } - } + final boolean newIsConfig = isConfig && childNode.isConfiguration(); + addPaths(childNode, deviceName, moduleName, paths, pathParams, schemaContext, + newIsConfig, newParent, definitionNames, oaversion, newResourcePath); } } } @@ -503,21 +488,15 @@ public abstract class BaseYangSwaggerGenerator { private static Map operations(final DataSchemaNode node, final String moduleName, final Optional deviceName, final ArrayNode pathParams, final boolean isConfig, final String parentName, - final DefinitionNames definitionNames, final URIType uriType, + final DefinitionNames definitionNames, final OAversion oaversion) { final Map operations = new HashMap<>(); final String discriminator = definitionNames.getDiscriminator(node); final String nodeName = node.getQName().getLocalName(); - String prefix = "_"; - if (isConfig && uriType.equals(URIType.DRAFT02)) { - prefix = CONFIG + "_"; - } - - final String defName = parentName + prefix + nodeName + TOP + discriminator; - final ObjectNode get = buildGet(node, moduleName, deviceName, pathParams, defName, isConfig, uriType, - oaversion); + final String defName = parentName + "_" + nodeName + TOP + discriminator; + final ObjectNode get = buildGet(node, moduleName, deviceName, pathParams, defName, isConfig, oaversion); operations.put("get", get); diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorDraft02.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorDraft02.java deleted file mode 100644 index 497d9c56ca..0000000000 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorDraft02.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018 Inocybe Technologies and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.netconf.sal.rest.doc.impl; - -import java.util.Optional; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; - -/** - * Base class for a bierman draft02 implementation. - * - * @author Thomas Pantelis - */ -public abstract class BaseYangSwaggerGeneratorDraft02 extends BaseYangSwaggerGenerator { - - private static final String PATH_VERSION = "draft02"; - private static final String DEFAULT_BASE_PATH = "restconf"; - private final String basePath; - - protected BaseYangSwaggerGeneratorDraft02(final Optional schemaService) { - super(schemaService); - this.basePath = DEFAULT_BASE_PATH; - } - - protected BaseYangSwaggerGeneratorDraft02(final Optional schemaService, final String basePath) { - super(schemaService); - this.basePath = basePath; - } - - @Override - protected String getPathVersion() { - return PATH_VERSION; - } - - @Override - public String getResourcePath(final String resourceType, final String context) { - return "/" + basePath + "/" + resourceType + context; - } - - @Override - public String getResourcePathPart(final String resourceType) { - return resourceType; - } - - @Override - protected ListPathBuilder newListPathBuilder() { - return key -> "/{" + key + "}"; - } - - @Override - protected void appendPathKeyValue(final StringBuilder builder, final Object value) { - builder.append(value).append('/'); - } -} diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java index f9a4615bff..9090887982 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGeneratorRFC8040.java @@ -7,6 +7,8 @@ */ package org.opendaylight.netconf.sal.rest.doc.impl; +import static java.util.Objects.requireNonNull; + import java.util.Optional; import org.opendaylight.mdsal.dom.api.DOMSchemaService; @@ -16,24 +18,20 @@ import org.opendaylight.mdsal.dom.api.DOMSchemaService; * @author Thomas Pantelis */ public abstract class BaseYangSwaggerGeneratorRFC8040 extends BaseYangSwaggerGenerator { - - private static final String DEFAULT_BASE_PATH = "rests"; - private static final String PATH_VERSION = "rfc8040"; private final String basePath; protected BaseYangSwaggerGeneratorRFC8040(final Optional schemaService) { - super(schemaService); - this.basePath = DEFAULT_BASE_PATH; + this(schemaService, "rests"); } protected BaseYangSwaggerGeneratorRFC8040(final Optional schemaService, final String basePath) { super(schemaService); - this.basePath = basePath; + this.basePath = requireNonNull(basePath); } @Override protected String getPathVersion() { - return PATH_VERSION; + return "rfc8040"; } @Override diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/MountPointSwaggerGeneratorDraft02.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/MountPointSwaggerGeneratorDraft02.java deleted file mode 100644 index 6843bfa790..0000000000 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/MountPointSwaggerGeneratorDraft02.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018 Inocybe Technologies and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.netconf.sal.rest.doc.impl; - -import java.util.Optional; -import org.opendaylight.mdsal.dom.api.DOMMountPointService; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; -import org.opendaylight.netconf.sal.rest.doc.mountpoints.MountPointSwagger; - -/** - * MountPoint generator implementation for bierman draft02. - * - * @author Thomas Pantelis - */ -public class MountPointSwaggerGeneratorDraft02 extends BaseYangSwaggerGeneratorDraft02 implements AutoCloseable { - - private final MountPointSwagger mountPointSwagger; - - public MountPointSwaggerGeneratorDraft02(final DOMSchemaService schemaService, - final DOMMountPointService mountService) { - super(Optional.of(schemaService)); - mountPointSwagger = new MountPointSwagger(schemaService, mountService, this); - mountPointSwagger.init(); - } - - public MountPointSwaggerGeneratorDraft02(final DOMSchemaService schemaService, - final DOMMountPointService mountService, final String basePath) { - super(Optional.of(schemaService), basePath); - mountPointSwagger = new MountPointSwagger(schemaService, mountService, this); - mountPointSwagger.init(); - } - - public MountPointSwagger getMountPointSwagger() { - return mountPointSwagger; - } - - @Override - public void close() { - mountPointSwagger.close(); - } -} diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java index d5ee84fd2f..8ba66aa608 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java @@ -21,9 +21,7 @@ import java.util.Optional; import javax.ws.rs.HttpMethod; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; import org.opendaylight.netconf.sal.rest.doc.impl.DefinitionNames; import org.opendaylight.netconf.sal.rest.doc.util.JsonUtil; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -107,8 +105,7 @@ public final class OperationBuilder { public static ObjectNode buildGet(final DataSchemaNode node, final String moduleName, final Optional deviceName, final ArrayNode pathParams, - final String defName, final boolean isConfig, - final URIType uriType, final OAversion oaversion) { + final String defName, final boolean isConfig, final OAversion oaversion) { final ObjectNode value = JsonNodeFactory.instance.objectNode(); value.put(DESCRIPTION_KEY, node.getDescription().orElse("")); value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.GET, moduleName, deviceName, @@ -116,7 +113,7 @@ public final class OperationBuilder { value.set(TAGS_KEY, buildTagsValue(deviceName, moduleName)); final ArrayNode parameters = JsonUtil.copy(pathParams); - addQueryParameters(parameters, isConfig, uriType, oaversion); + addQueryParameters(parameters, isConfig, oaversion); value.set(PARAMETERS_KEY, parameters); @@ -131,25 +128,23 @@ public final class OperationBuilder { } private static void addQueryParameters(final ArrayNode parameters, final boolean isConfig, - final ApiDocServiceImpl.URIType uriType, final OAversion oaversion) { - if (uriType.equals(ApiDocServiceImpl.URIType.RFC8040)) { - final ObjectNode contentParam = JsonNodeFactory.instance.objectNode(); - final ArrayNode cases = JsonNodeFactory.instance.arrayNode(); - cases.add(NONCONFIG_QUERY_PARAM); - if (isConfig) { - cases.add(CONFIG_QUERY_PARAM); - } else { - contentParam.put(REQUIRED_KEY, true); - } - contentParam.put(IN_KEY, QUERY); - contentParam.put(NAME_KEY, CONTENT); + final OAversion oaversion) { + final ObjectNode contentParam = JsonNodeFactory.instance.objectNode(); + final ArrayNode cases = JsonNodeFactory.instance.arrayNode(); + cases.add(NONCONFIG_QUERY_PARAM); + if (isConfig) { + cases.add(CONFIG_QUERY_PARAM); + } else { + contentParam.put(REQUIRED_KEY, true); + } + contentParam.put(IN_KEY, QUERY); + contentParam.put(NAME_KEY, CONTENT); - final ObjectNode typeParent = getTypeParentNode(contentParam, oaversion); - typeParent.put(TYPE_KEY, STRING); - typeParent.set(ENUM_KEY, cases); + final ObjectNode typeParent = getTypeParentNode(contentParam, oaversion); + typeParent.put(TYPE_KEY, STRING); + typeParent.set(ENUM_KEY, cases); - parameters.add(contentParam); - } + parameters.add(contentParam); } public static ObjectNode buildPut(final String parentName, final String nodeName, final String discriminator, diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java index c75a2daa82..c51b485f4d 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java @@ -35,7 +35,6 @@ import org.opendaylight.mdsal.dom.api.DOMMountPointListener; import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; import org.opendaylight.netconf.sal.rest.doc.impl.BaseYangSwaggerGenerator; import org.opendaylight.netconf.sal.rest.doc.impl.DefinitionNames; import org.opendaylight.netconf.sal.rest.doc.swagger.CommonApiObject; @@ -89,9 +88,9 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { public Map getInstanceIdentifiers() { final Map urlToId = new HashMap<>(); - synchronized (this.lock) { - final SchemaContext context = this.globalSchema.getGlobalContext(); - for (final Entry entry : this.instanceIdToLongId.entrySet()) { + synchronized (lock) { + final SchemaContext context = globalSchema.getGlobalContext(); + for (final Entry entry : instanceIdToLongId.entrySet()) { final String modName = findModuleName(entry.getKey(), context); urlToId.put(swaggerGenerator.generateUrlPrefixFromInstanceID(entry.getKey(), modName), entry.getValue()); @@ -111,14 +110,14 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { } private String getYangMountUrl(final YangInstanceIdentifier key) { - final String modName = findModuleName(key, this.globalSchema.getGlobalContext()); + final String modName = findModuleName(key, globalSchema.getGlobalContext()); return swaggerGenerator.generateUrlPrefixFromInstanceID(key, modName) + "yang-ext:mount"; } private YangInstanceIdentifier getInstanceId(final Long id) { final YangInstanceIdentifier instanceId; - synchronized (this.lock) { - instanceId = this.longIdToInstanceId.get(id); + synchronized (lock) { + instanceId = longIdToInstanceId.get(id); } return instanceId; } @@ -129,14 +128,14 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { } checkState(mountService != null); - return this.mountService.getMountPoint(id) + return mountService.getMountPoint(id) .flatMap(mountPoint -> mountPoint.getService(DOMSchemaService.class)) .flatMap(svc -> Optional.ofNullable(svc.getGlobalContext())) .orElse(null); } public CommonApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final String module, - final String revision, final URIType uriType, final OAversion oaversion) { + final String revision, final OAversion oaversion) { final YangInstanceIdentifier iid = getInstanceId(id); final EffectiveModelContext context = getSchemaContext(iid); final String urlPrefix = getYangMountUrl(iid); @@ -150,12 +149,12 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { return generateDataStoreApiDoc(uriInfo, urlPrefix, deviceName); } final SwaggerObject swaggerObject = swaggerGenerator.getApiDeclaration(module, revision, uriInfo, context, - urlPrefix, uriType, oaversion); + urlPrefix, oaversion); return BaseYangSwaggerGenerator.getAppropriateDoc(swaggerObject, oaversion); } public CommonApiObject getMountPointApi(final UriInfo uriInfo, final Long id, final Optional pageNum, - final URIType uriType, final OAversion oaversion) { + final OAversion oaversion) { final YangInstanceIdentifier iid = getInstanceId(id); final EffectiveModelContext context = getSchemaContext(iid); final String urlPrefix = getYangMountUrl(iid); @@ -184,7 +183,7 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { final SwaggerObject doc; final SwaggerObject swaggerObject = swaggerGenerator.getAllModulesDoc(uriInfo, range, context, - Optional.of(deviceName), urlPrefix, definitionNames, uriType, oaversion); + Optional.of(deviceName), urlPrefix, definitionNames, oaversion); if (includeDataStore) { doc = generateDataStoreApiDoc(uriInfo, urlPrefix, deviceName); @@ -244,20 +243,20 @@ public class MountPointSwagger implements DOMMountPointListener, AutoCloseable { @Override public void onMountPointCreated(final YangInstanceIdentifier path) { - synchronized (this.lock) { + synchronized (lock) { LOG.debug("Mount point {} created", path); - final Long idLong = this.idKey.incrementAndGet(); - this.instanceIdToLongId.put(path, idLong); - this.longIdToInstanceId.put(idLong, path); + final Long idLong = idKey.incrementAndGet(); + instanceIdToLongId.put(path, idLong); + longIdToInstanceId.put(idLong, path); } } @Override public void onMountPointRemoved(final YangInstanceIdentifier path) { - synchronized (this.lock) { + synchronized (lock) { LOG.debug("Mount point {} removed", path); - final Long id = this.instanceIdToLongId.remove(path); - this.longIdToInstanceId.remove(id); + final Long id = instanceIdToLongId.remove(path); + longIdToInstanceId.remove(id); } } } diff --git a/restconf/sal-rest-docgen/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/restconf/sal-rest-docgen/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 7d1c2fe771..439099bbbf 100644 --- a/restconf/sal-rest-docgen/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/restconf/sal-rest-docgen/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -7,45 +7,29 @@ This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html --> - - + - - - - - - - - - - - - @@ -60,5 +44,5 @@ and is available at http://www.eclipse.org/legal/epl-v10.html - + diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorDraftO2Test.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorDraftO2Test.java deleted file mode 100644 index 77a3583d3f..0000000000 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorDraftO2Test.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.sal.rest.doc.impl; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.collect.ImmutableList; -import java.util.List; -import org.junit.Test; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorDraftO2; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; -import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject; -import org.opendaylight.yangtools.yang.common.Revision; - -public final class ApiDocGeneratorDraftO2Test extends AbstractApiDocTest { - private static final String NAME = "toaster2"; - private static final String REVISION_DATE = "2009-11-20"; - private static final String NAME_2 = "toaster"; - private static final String REVISION_DATE_2 = "2009-11-20"; - - private final ApiDocGeneratorDraftO2 generator = new ApiDocGeneratorDraftO2(SCHEMA_SERVICE); - - /** - * Test that paths are generated according to the model. - */ - @Test - public void testPaths() { - final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); - final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, URIType.DRAFT02, - ApiDocServiceImpl.OAversion.V2_0); - - assertEquals(List.of("/restconf/config", - "/restconf/config/toaster2:toaster", - "/restconf/config/toaster2:toaster/toasterSlot/{slotId}", - "/restconf/config/toaster2:toaster/toasterSlot/{slotId}/toaster-augmented:slotInfo", - "/restconf/operational/toaster2:toaster", - "/restconf/operational/toaster2:toaster/toasterSlot/{slotId}", - "/restconf/operational/toaster2:toaster/toasterSlot/{slotId}/toaster-augmented:slotInfo", - "/restconf/config/toaster2:lst", - "/restconf/config/toaster2:lst/cont1", - "/restconf/config/toaster2:lst/cont1/cont11", - "/restconf/config/toaster2:lst/cont1/lst11", - "/restconf/config/toaster2:lst/lst1/{key1}/{key2}", - "/restconf/operational/toaster2:lst", - "/restconf/operational/toaster2:lst/cont1", - "/restconf/operational/toaster2:lst/cont1/cont11", - "/restconf/operational/toaster2:lst/cont1/lst11", - "/restconf/operational/toaster2:lst/lst1/{key1}/{key2}", - "/restconf/operations/toaster2:make-toast", - "/restconf/operations/toaster2:cancel-toast", - "/restconf/operations/toaster2:restock-toaster"), - ImmutableList.copyOf(doc.getPaths().fieldNames())); - } - - /** - * Test that generated configuration paths allow to use operations: get, put, delete and post. - */ - @Test - public void testConfigPaths() { - final List configPaths = List.of("/restconf/config/toaster2:lst", - "/restconf/config/toaster2:lst/cont1", - "/restconf/config/toaster2:lst/cont1/cont11", - "/restconf/config/toaster2:lst/cont1/lst11", - "/restconf/config/toaster2:lst/lst1/{key1}/{key2}"); - - final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); - final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0); - - for (final String path : configPaths) { - final JsonNode node = doc.getPaths().get(path); - assertFalse(node.path("get").isMissingNode()); - assertFalse(node.path("put").isMissingNode()); - assertFalse(node.path("delete").isMissingNode()); - assertFalse(node.path("post").isMissingNode()); - } - } - - /** - * Test that generated document contains the following definitions. - */ - @Test - public void testDefinitions() { - final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); - final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0); - - final ObjectNode definitions = doc.getDefinitions(); - assertNotNull(definitions); - - final JsonNode configLstTop = definitions.get("toaster2_config_lst_TOP"); - assertNotNull(configLstTop); - DocGenTestHelper.containsReferences(configLstTop, "lst", "#/definitions/toaster2_config_lst"); - - final JsonNode configLst = definitions.get("toaster2_config_lst"); - assertNotNull(configLst); - DocGenTestHelper.containsReferences(configLst, "lst1", "#/definitions/toaster2_lst_config_lst1"); - DocGenTestHelper.containsReferences(configLst, "cont1", "#/definitions/toaster2_lst_config_cont1"); - - final JsonNode configLst1Top = definitions.get("toaster2_lst_config_lst1_TOP"); - assertNotNull(configLst1Top); - DocGenTestHelper.containsReferences(configLst1Top, "lst1", "#/definitions/toaster2_lst_config_lst1"); - - final JsonNode configLst1 = definitions.get("toaster2_lst_config_lst1"); - assertNotNull(configLst1); - - final JsonNode configCont1Top = definitions.get("toaster2_lst_config_cont1_TOP"); - assertNotNull(configCont1Top); - DocGenTestHelper.containsReferences(configCont1Top, "cont1", "#/definitions/toaster2_lst_config_cont1"); - - final JsonNode configCont1 = definitions.get("toaster2_lst_config_cont1"); - assertNotNull(configCont1); - DocGenTestHelper.containsReferences(configCont1, "cont11", "#/definitions/toaster2_lst_cont1_config_cont11"); - DocGenTestHelper.containsReferences(configCont1, "lst11", "#/definitions/toaster2_lst_cont1_config_lst11"); - - final JsonNode configCont11Top = definitions.get("toaster2_lst_cont1_config_cont11_TOP"); - assertNotNull(configCont11Top); - DocGenTestHelper.containsReferences(configCont11Top, - "cont11", "#/definitions/toaster2_lst_cont1_config_cont11"); - - final JsonNode configCont11 = definitions.get("toaster2_lst_cont1_config_cont11"); - assertNotNull(configCont11); - - final JsonNode configLst11Top = definitions.get("toaster2_lst_cont1_config_lst11_TOP"); - assertNotNull(configLst11Top); - DocGenTestHelper.containsReferences(configLst11Top, "lst11", "#/definitions/toaster2_lst_cont1_config_lst11"); - - final JsonNode configLst11 = definitions.get("toaster2_lst_cont1_config_lst11"); - assertNotNull(configLst11); - } - - /** - * Test that generated document contains RPC definition for "make-toast" with correct input. - */ - @Test - public void testRPC() { - final var module = CONTEXT.findModule(NAME_2, Revision.of(REVISION_DATE_2)).orElseThrow(); - final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.DRAFT02, ApiDocServiceImpl.OAversion.V2_0); - assertNotNull(doc); - - final ObjectNode definitions = doc.getDefinitions(); - final JsonNode inputTop = definitions.get("toaster_make-toast_input_TOP"); - assertNotNull(inputTop); - final String testString = "{\"input\":{\"$ref\":\"#/definitions/toaster_make-toast_input\"}}"; - assertEquals(testString, inputTop.get("properties").toString()); - final JsonNode input = definitions.get("toaster_make-toast_input"); - final JsonNode properties = input.get("properties"); - assertTrue(properties.has("toasterDoneness")); - assertTrue(properties.has("toasterToastType")); - } -} diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorRFC8040Test.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorRFC8040Test.java index ff56d801a0..5ff1573413 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorRFC8040Test.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocGeneratorRFC8040Test.java @@ -19,7 +19,6 @@ import java.util.List; import org.junit.Test; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorRFC8040; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject; import org.opendaylight.yangtools.yang.common.Revision; @@ -38,7 +37,7 @@ public final class ApiDocGeneratorRFC8040Test extends AbstractApiDocTest { public void testPaths() { final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.RFC8040, ApiDocServiceImpl.OAversion.V2_0); + ApiDocServiceImpl.OAversion.V2_0); assertEquals(List.of("/rests/data", "/rests/data/toaster2:toaster", @@ -68,7 +67,7 @@ public final class ApiDocGeneratorRFC8040Test extends AbstractApiDocTest { final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.RFC8040, ApiDocServiceImpl.OAversion.V2_0); + ApiDocServiceImpl.OAversion.V2_0); for (final String path : configPaths) { final JsonNode node = doc.getPaths().get(path); @@ -86,7 +85,7 @@ public final class ApiDocGeneratorRFC8040Test extends AbstractApiDocTest { public void testDefinitions() { final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow(); final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.RFC8040, ApiDocServiceImpl.OAversion.V2_0); + ApiDocServiceImpl.OAversion.V2_0); final ObjectNode definitions = doc.getDefinitions(); assertNotNull(definitions); @@ -139,7 +138,7 @@ public final class ApiDocGeneratorRFC8040Test extends AbstractApiDocTest { public void testRPC() { final var module = CONTEXT.findModule(NAME_2, Revision.of(REVISION_DATE_2)).orElseThrow(); final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT, - URIType.RFC8040, ApiDocServiceImpl.OAversion.V2_0); + ApiDocServiceImpl.OAversion.V2_0); assertNotNull(doc); final ObjectNode definitions = doc.getDefinitions(); diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImplTest.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImplTest.java index 61ee1ed28e..ec9b3a2590 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImplTest.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/ApiDocServiceImplTest.java @@ -21,10 +21,8 @@ import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.rest.doc.api.ApiDocService; import org.opendaylight.netconf.sal.rest.doc.impl.AllModulesDocGenerator; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorDraftO2; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocGeneratorRFC8040; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl; -import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorDraft02; import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorRFC8040; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -45,17 +43,12 @@ public final class ApiDocServiceImplTest extends AbstractApiDocTest { final DOMMountPointService service = mock(DOMMountPointService.class); when(service.getMountPoint(INSTANCE_ID)).thenReturn(Optional.of(mountPoint)); - final MountPointSwaggerGeneratorDraft02 mountPointDraft02 = - new MountPointSwaggerGeneratorDraft02(SCHEMA_SERVICE, service); final MountPointSwaggerGeneratorRFC8040 mountPointRFC8040 = new MountPointSwaggerGeneratorRFC8040(SCHEMA_SERVICE, service); - final ApiDocGeneratorDraftO2 apiDocGeneratorDraftO2 = new ApiDocGeneratorDraftO2(SCHEMA_SERVICE); final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040 = new ApiDocGeneratorRFC8040(SCHEMA_SERVICE); - mountPointDraft02.getMountPointSwagger().onMountPointCreated(INSTANCE_ID); - final AllModulesDocGenerator allModulesDocGenerator = new AllModulesDocGenerator(apiDocGeneratorDraftO2, - apiDocGeneratorRFC8040); - apiDocService = new ApiDocServiceImpl(mountPointDraft02, mountPointRFC8040, apiDocGeneratorDraftO2, - apiDocGeneratorRFC8040, allModulesDocGenerator); + mountPointRFC8040.getMountPointSwagger().onMountPointCreated(INSTANCE_ID); + final AllModulesDocGenerator allModulesDocGenerator = new AllModulesDocGenerator(apiDocGeneratorRFC8040); + apiDocService = new ApiDocServiceImpl(mountPointRFC8040, apiDocGeneratorRFC8040, allModulesDocGenerator); } @Test @@ -64,6 +57,6 @@ public final class ApiDocServiceImplTest extends AbstractApiDocTest { // simulate the behavior of JacksonJaxbJsonProvider final ObjectMapper mapper = new ObjectMapper(); final String result = mapper.writer().writeValueAsString(apiDocService.getListOfMounts(mockInfo).getEntity()); - assertEquals("[{\"instance\":\"/nodes/node/123/\",\"id\":1}]", result); + assertEquals("[{\"instance\":\"/nodes/node=123/\",\"id\":1}]", result); } } diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/MountPointSwaggerTest.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/MountPointSwaggerTest.java index 56d3e910dc..1f241da3dd 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/MountPointSwaggerTest.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/MountPointSwaggerTest.java @@ -15,7 +15,6 @@ import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -27,8 +26,7 @@ import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion; -import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.URIType; -import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorDraft02; +import org.opendaylight.netconf.sal.rest.doc.impl.MountPointSwaggerGeneratorRFC8040; import org.opendaylight.netconf.sal.rest.doc.mountpoints.MountPointSwagger; import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject; import org.opendaylight.yangtools.yang.common.QName; @@ -40,7 +38,7 @@ public final class MountPointSwaggerTest extends AbstractApiDocTest { .node(QName.create("", "nodes")) .node(QName.create("", "node")) .nodeWithKey(QName.create("", "node"), QName.create("", "id"), "123").build(); - private static final String INSTANCE_URL = "/nodes/node/123/"; + private static final String INSTANCE_URL = "/nodes/node=123/"; private MountPointSwagger swagger; @@ -55,7 +53,7 @@ public final class MountPointSwaggerTest extends AbstractApiDocTest { final DOMMountPointService service = mock(DOMMountPointService.class); when(service.getMountPoint(INSTANCE_ID)).thenReturn(Optional.of(mountPoint)); - swagger = new MountPointSwaggerGeneratorDraft02(SCHEMA_SERVICE, service).getMountPointSwagger(); + swagger = new MountPointSwaggerGeneratorRFC8040(SCHEMA_SERVICE, service).getMountPointSwagger(); } @Test() @@ -76,14 +74,14 @@ public final class MountPointSwaggerTest extends AbstractApiDocTest { final UriInfo mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL); swagger.onMountPointCreated(INSTANCE_ID); // add this ID into the list of mount points - final SwaggerObject mountPointApi = (SwaggerObject) swagger.getMountPointApi(mockInfo, 1L, "Datastores", - "-", URIType.DRAFT02, OAversion.V2_0); + final SwaggerObject mountPointApi = (SwaggerObject) swagger.getMountPointApi(mockInfo, 1L, "Datastores", "-", + OAversion.V2_0); assertNotNull("failed to find Datastore API", mountPointApi); final ObjectNode pathsObject = mountPointApi.getPaths(); assertNotNull(pathsObject); - assertEquals("Unexpected api list size", 3, pathsObject.size()); + assertEquals("Unexpected api list size", 2, pathsObject.size()); final Set actualUrls = new TreeSet<>(); @@ -102,10 +100,7 @@ public final class MountPointSwaggerTest extends AbstractApiDocTest { assertNotNull("expected non-null desc on " + path, getOperation.get("description")); } - final Set expectedUrls = new TreeSet<>(List.of( - "/restconf/config" + INSTANCE_URL + "yang-ext:mount", - "/restconf/operational" + INSTANCE_URL + "yang-ext:mount", - "/restconf/operations" + INSTANCE_URL + "yang-ext:mount")); - assertEquals(expectedUrls, actualUrls); + assertEquals(Set.of("/rests/data" + INSTANCE_URL + "yang-ext:mount", + "/rests/operations" + INSTANCE_URL + "yang-ext:mount"), actualUrls); } }