X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=restconf%2Fsal-rest-docgen%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Frest%2Fdoc%2Fimpl%2FApiDocServiceImpl.java;h=377059638658c421454b4f34298b42b0cc8096bb;hb=f402dcd49a468e018192c96151bef3a0cdf70d62;hp=dba66b416e82badc1f7084f8446e57a0e51432bf;hpb=15047776c449b6043e85047466c2215ed31036f1;p=netconf.git 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 dba66b416e..3770596386 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,24 +7,25 @@ */ package org.opendaylight.netconf.sal.rest.doc.impl; -import java.io.ByteArrayOutputStream; -import java.io.OutputStreamWriter; -import java.util.Map.Entry; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.json.JSONWriter; import org.opendaylight.netconf.sal.rest.doc.api.ApiDocService; import org.opendaylight.netconf.sal.rest.doc.mountpoints.MountPointSwagger; import org.opendaylight.netconf.sal.rest.doc.swagger.ApiDeclaration; +import org.opendaylight.netconf.sal.rest.doc.swagger.MountPointInstance; import org.opendaylight.netconf.sal.rest.doc.swagger.ResourceList; /** - * This service generates swagger (See https://helloreverb.com/developers/swagger) compliant documentation for * RESTCONF APIs. The output of this is used by embedded Swagger UI. * - *
NOTE: These API's need to be synchronized due to bug 1198. Thread access to + *
+ * NOTE: These API's need to be synchronized due to bug 1198. Thread access to
* the SchemaContext is not synchronized properly and thus you can end up with
* missing definitions without this synchronization. There are likely otherways
* to work around this limitation, but given that this API is a dev only tool
@@ -32,10 +33,27 @@ import org.opendaylight.netconf.sal.rest.doc.swagger.ResourceList;
*/
public class ApiDocServiceImpl implements ApiDocService {
- private static final ApiDocService INSTANCE = new ApiDocServiceImpl();
+ public static final int DEFAULT_PAGESIZE = 20;
+ // Query parameter
+ private static final String TOTAL_PAGES = "totalPages";
+ private static final String PAGE_NUM = "pageNum";
- public static ApiDocService getInstance() {
- return INSTANCE;
+ public enum URIType { RFC8040, DRAFT02 }
+
+ private final MountPointSwagger mountPointSwaggerDraft02;
+ private final MountPointSwagger mountPointSwaggerRFC8040;
+ private final ApiDocGeneratorDraftO2 apiDocGeneratorDraft02;
+ private final ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040;
+
+ public ApiDocServiceImpl(MountPointSwaggerGeneratorDraft02 mountPointSwaggerGeneratorDraft02,
+ MountPointSwaggerGeneratorRFC8040 mountPointSwaggerGeneratorRFC8040,
+ ApiDocGeneratorDraftO2 apiDocGeneratorDraft02, ApiDocGeneratorRFC8040 apiDocGeneratorRFC8040) {
+ this.mountPointSwaggerDraft02 =
+ Objects.requireNonNull(mountPointSwaggerGeneratorDraft02).getMountPointSwagger();
+ this.mountPointSwaggerRFC8040 =
+ Objects.requireNonNull(mountPointSwaggerGeneratorRFC8040).getMountPointSwagger();
+ this.apiDocGeneratorDraft02 = Objects.requireNonNull(apiDocGeneratorDraft02);
+ this.apiDocGeneratorRFC8040 = Objects.requireNonNull(apiDocGeneratorRFC8040);
}
/**
@@ -45,8 +63,12 @@ public class ApiDocServiceImpl implements ApiDocService {
*/
@Override
public synchronized Response getRootDoc(final UriInfo uriInfo) {
- final ApiDocGenerator generator = ApiDocGenerator.getInstance();
- final ResourceList rootDoc = generator.getResourceListing(uriInfo);
+ final ResourceList rootDoc;
+ if (isNew(uriInfo).equals(URIType.RFC8040)) {
+ rootDoc = apiDocGeneratorRFC8040.getResourceListing(uriInfo, URIType.RFC8040);
+ } else {
+ rootDoc = apiDocGeneratorDraft02.getResourceListing(uriInfo, URIType.DRAFT02);
+ }
return Response.ok(rootDoc).build();
}
@@ -56,9 +78,13 @@ public class ApiDocServiceImpl implements ApiDocService {
*/
@Override
public synchronized Response getDocByModule(final String module, final String revision, final UriInfo uriInfo) {
- final ApiDocGenerator generator = ApiDocGenerator.getInstance();
+ final ApiDeclaration doc;
+ if (isNew(uriInfo).equals(URIType.RFC8040)) {
+ doc = apiDocGeneratorRFC8040.getApiDeclaration(module, revision, uriInfo, URIType.RFC8040);
+ } else {
+ doc = apiDocGeneratorDraft02.getApiDeclaration(module, revision, uriInfo, URIType.DRAFT02);
+ }
- final ApiDeclaration doc = generator.getApiDeclaration(module, revision, uriInfo);
return Response.ok(doc).build();
}
@@ -67,44 +93,70 @@ public class ApiDocServiceImpl implements ApiDocService {
*/
@Override
public synchronized Response getApiExplorer(final UriInfo uriInfo) {
- return Response
- .seeOther(uriInfo.getBaseUriBuilder().path("../explorer/index.html").build())
- .build();
+ return Response.seeOther(uriInfo.getBaseUriBuilder().path("../explorer/index.html").build()).build();
}
@Override
public synchronized Response getListOfMounts(final UriInfo uriInfo) {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try (OutputStreamWriter streamWriter = new OutputStreamWriter(baos)) {
- final JSONWriter writer = new JSONWriter(streamWriter);
- writer.array();
- for (final Entry