Fix findbugs violations in sal-rest-docgen 46/68946/2
authorTom Pantelis <tompantelis@gmail.com>
Thu, 1 Mar 2018 14:15:53 +0000 (09:15 -0500)
committerTom Pantelis <tompantelis@gmail.com>
Mon, 5 Mar 2018 19:26:28 +0000 (14:26 -0500)
- Reliance on default encoding
- Field is a mutable collection
- Write to static field from instance method
- Exception is caught when Exception is not thrown
- Field not initialized in constructor but dereferenced without null check
- Useless object created

Change-Id: Iff717b38d3a5bee082e7a9fb30969a0d755bf4c2
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocGenerator.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/ApiDocServiceImpl.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/BaseYangSwaggerGenerator.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/model/builder/OperationBuilder.java
restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/mountpoints/MountPointSwagger.java

index 1f4b3b52c0e7c66a52d2f1723e5f2e1e2afa316b..76030f380c835952f19d1297950f69c69dd00bbc 100644 (file)
@@ -31,6 +31,7 @@ public class ApiDocGenerator extends BaseYangSwaggerGenerator {
     }
 
     public ApiDeclaration getApiDeclaration(final String module, final String revision, final UriInfo uriInfo) {
+        Preconditions.checkState(schemaService != null);
         final SchemaContext schemaContext = schemaService.getGlobalContext();
         Preconditions.checkState(schemaContext != null);
         return super.getApiDeclaration(module, revision, uriInfo, schemaContext, "");
@@ -43,10 +44,6 @@ public class ApiDocGenerator extends BaseYangSwaggerGenerator {
         return INSTANCE;
     }
 
-    public void setDraft(final boolean newDraft) {
-        super.setDraft(newDraft);
-    }
-
     public void setSchemaService(final SchemaService schemaService) {
         this.schemaService = schemaService;
     }
index 7db2161cc008d12421b6951566fe771277e5cef8..f309982e54bceb9a1c0d060ae6ba9c69b949f0d4 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.netconf.sal.rest.doc.impl;
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonGenerator;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.util.Map.Entry;
 import javax.ws.rs.core.Response;
@@ -82,7 +84,6 @@ public class ApiDocServiceImpl implements ApiDocService {
         return Response.seeOther(uriInfo.getBaseUriBuilder().path("../explorer/index.html").build()).build();
     }
 
-    @SuppressWarnings("checkstyle:IllegalCatch")
     @Override
     public synchronized Response getListOfMounts(final UriInfo uriInfo) {
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -98,10 +99,16 @@ public class ApiDocServiceImpl implements ApiDocService {
             }
             writer.writeEndArray();
             writer.flush();
-        } catch (final Exception e) {
-            return Response.status(500).entity(e.getMessage()).build();
+        } catch (IOException e) {
+            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
+        }
+
+        try {
+            String responseStr = baos.toString(StandardCharsets.UTF_8.name());
+            return Response.status(Response.Status.OK).entity(responseStr).build();
+        } catch (UnsupportedEncodingException e) {
+            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
         }
-        return Response.status(200).entity(baos.toString()).build();
     }
 
     @Override
index 9c333f793c2e8aa282fb71348284a385460989d4..85462a76781aa3012edd3ca80caefce11ded5803 100644 (file)
@@ -42,7 +42,6 @@ import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
@@ -64,7 +63,7 @@ public class BaseYangSwaggerGenerator {
 
     // private Map<String, ApiDeclaration> MODULE_DOC_CACHE = new HashMap<>()
     private final ObjectMapper mapper = new ObjectMapper();
-    private static boolean newDraft;
+    private volatile boolean newDraft;
 
     protected BaseYangSwaggerGenerator() {
         this.mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
@@ -230,7 +229,7 @@ public class BaseYangSwaggerGenerator {
         return null;
     }
 
-    private static void addRootPostLink(final Module module, final DataNodeContainer node,
+    private void addRootPostLink(final Module module, final DataNodeContainer node,
             final List<Parameter> pathParams, final String resourcePath, final String dataStore, final List<Api> apis) {
         if (containsListOrContainer(module.getChildNodes())) {
             final Api apiForRootPostUri = new Api();
@@ -295,7 +294,7 @@ public class BaseYangSwaggerGenerator {
         }
     }
 
-    protected static String getContent(final String dataStore) {
+    protected String getContent(final String dataStore) {
         if (newDraft) {
             if ("operational".contains(dataStore)) {
                 return "?content=nonconfig";
@@ -352,9 +351,8 @@ public class BaseYangSwaggerGenerator {
         return operations;
     }
 
-    private static String createPath(final DataSchemaNode schemaNode, final List<Parameter> pathParams,
+    private String createPath(final DataSchemaNode schemaNode, final List<Parameter> pathParams,
             final SchemaContext schemaContext) {
-        final ArrayList<LeafSchemaNode> pathListParams = new ArrayList<>();
         final StringBuilder path = new StringBuilder();
         final String localName = resolvePathArgumentsName(schemaNode, schemaContext);
         path.append(localName);
@@ -368,7 +366,6 @@ public class BaseYangSwaggerGenerator {
 
             for (final QName listKey : listKeys) {
                 final DataSchemaNode dataChildByName = ((DataNodeContainer) schemaNode).getDataChildByName(listKey);
-                pathListParams.add((LeafSchemaNode) dataChildByName);
                 final String pathParamIdentifier;
                 if (newDraft) {
                     pathParamIdentifier = keyBuilder.append("{").append(listKey.getLocalName()).append("}").toString();
@@ -444,6 +441,10 @@ public class BaseYangSwaggerGenerator {
     }
 
     public void setDraft(final boolean draft) {
-        BaseYangSwaggerGenerator.newDraft = draft;
+        this.newDraft = draft;
+    }
+
+    protected boolean isNewDraft() {
+        return newDraft;
     }
 }
index 4a4eba98d1d2bc51d09b9cbeeb982b8076c31727..42c194aa95567c4ea36bf21b688a811e09788cdf 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.netconf.sal.rest.doc.model.builder;
 
+import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.List;
 import org.opendaylight.netconf.sal.rest.doc.swagger.Operation;
@@ -22,12 +23,7 @@ public final class OperationBuilder {
     public static final String CONFIG = "(config)";
     public static final String TOP = "-TOP";
 
-    public static final List<String> CONSUMES_PUT_POST = new ArrayList<>();
-
-    static {
-        CONSUMES_PUT_POST.add("application/json");
-        CONSUMES_PUT_POST.add("application/xml");
-    }
+    public static final List<String> CONSUMES_PUT_POST = ImmutableList.of("application/json", "application/xml");
 
     private OperationBuilder() {
 
index caf01d4ba55c08d25e9d60125be008a6da88ca3f..e81d1e5c158c37d56ba25bc6978704e100f7ac17 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.netconf.sal.rest.doc.mountpoints;
 
 import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -39,7 +40,6 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
 
     private static final String DATASTORES_REVISION = "-";
     private static final String DATASTORES_LABEL = "Datastores";
-    private static final String RESTCONF_DRAFT = "18";
     private static final AtomicReference<MountPointSwagger> SELF_REF = new AtomicReference<>();
 
     private DOMMountPointService mountService;
@@ -51,9 +51,9 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
 
     private final AtomicLong idKey = new AtomicLong(0);
     private SchemaService globalSchema;
-    private static boolean newDraft;
 
     public Map<String, Long> getInstanceIdentifiers() {
+        Preconditions.checkState(globalSchema != null);
         final Map<String, Long> urlToId = new HashMap<>();
         synchronized (this.lock) {
             final SchemaContext context = this.globalSchema.getGlobalContext();
@@ -90,7 +90,7 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
             if (arg instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates) {
                 final NodeIdentifierWithPredicates nodeId = (NodeIdentifierWithPredicates) arg;
                 for (final Entry<QName, Object> entry : nodeId.getKeyValues().entrySet()) {
-                    if (newDraft) {
+                    if (isNewDraft()) {
                         builder.deleteCharAt(builder.length() - 1).append("=").append(entry.getValue()).append('/');
                     } else {
                         builder.append(entry.getValue()).append('/');
@@ -104,6 +104,7 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
     }
 
     private String getYangMountUrl(final YangInstanceIdentifier key) {
+        Preconditions.checkState(globalSchema != null);
         final String modName = findModuleName(key, this.globalSchema.getGlobalContext());
         return generateUrlPrefixFromInstanceID(key, modName) + "yang-ext:mount";
     }
@@ -143,6 +144,7 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
             return null;
         }
 
+        Preconditions.checkState(mountService != null);
         final Optional<DOMMountPoint> mountPoint = this.mountService.getMountPoint(id);
         if (!mountPoint.isPresent()) {
             return null;
@@ -224,7 +226,8 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
             SELF_REF.compareAndSet(null, new MountPointSwagger());
             swagger = SELF_REF.get();
         }
-        newDraft = false;
+
+        swagger.setDraft(false);
         return swagger;
     }
 
@@ -234,7 +237,8 @@ public class MountPointSwagger extends BaseYangSwaggerGenerator implements Mount
             SELF_REF.compareAndSet(null, new MountPointSwagger());
             swagger = SELF_REF.get();
         }
-        newDraft = true;
+
+        swagger.setDraft(true);
         return swagger;
     }
 }