Refactor GizmoTranslator.translate()

Address Sonar violation for the translate() method throwing multiple types
of checked Exception. Add a JUnit test case for this.

Change-Id: If3c18460895f8193c7b759da4537aad0a2cbf485
Issue-ID: AAI-2264
Signed-off-by: mark.j.leonard <mark.j.leonard@gmail.com>
diff --git a/src/main/java/org/onap/aai/modelloader/entity/model/AbstractModelArtifact.java b/src/main/java/org/onap/aai/modelloader/entity/model/AbstractModelArtifact.java
index c21a285..ee70939 100644
--- a/src/main/java/org/onap/aai/modelloader/entity/model/AbstractModelArtifact.java
+++ b/src/main/java/org/onap/aai/modelloader/entity/model/AbstractModelArtifact.java
@@ -2,8 +2,8 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
+ * Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (c) 2017-2019 European Software Marketing Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,8 +18,10 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.modelloader.entity.model;
 
+import java.io.IOException;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -35,7 +37,6 @@
 import org.onap.aai.restclient.client.OperationResult;
 import org.springframework.http.HttpStatus;
 
-
 public abstract class AbstractModelArtifact extends Artifact implements IModelArtifact {
 
     private static Logger logger = LoggerFactory.getInstance().getLogger(AbstractModelArtifact.class.getName());
@@ -65,7 +66,7 @@
     public void setModelNamespace(String modelNamespace) {
         this.modelNamespace = modelNamespace;
 
-        // Get the version from the namespace (in format 'http://org.openecomp.aai.inventory/v9')
+        // Get the version from the namespace (in format 'http://org.onap.aai.inventory/v14')
         String[] parts = modelNamespace.split("/");
         modelNamespaceVersion = parts[parts.length - 1].trim();
     }
@@ -90,10 +91,8 @@
             if (postResponse.getResultCode() != HttpStatus.OK.value()) {
                 return false;
             }
-
-        } catch (Exception e) {
-            logErrorMsg(
-                    "Ingest failed for " + getType().toString() + " " + getUniqueIdentifier() + ": " + e.getMessage());
+        } catch (IOException e) {
+            logErrorMsg("Ingest failed for " + getType() + " " + getUniqueIdentifier() + ": " + e.getMessage());
             return false;
         }
 
@@ -111,11 +110,12 @@
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
-        sb.append("\nType=" + getType().toString() + "\nId=" + getUniqueIdentifier() + "\nVersion="
-                + getModelNamespaceVersion() + "\nDependant models: ");
-        for (String dep : referencedModelIds) {
-            sb.append(dep + "  ");
-        }
+        sb.append("\n").append("Type=").append(getType()) //
+                .append("\n").append("Id=").append(getUniqueIdentifier()) //
+                .append("\n").append("Version=").append(getModelNamespaceVersion());
+
+        sb.append("\n").append("Dependant models: ");
+        referencedModelIds.forEach(dep -> sb.append(dep).append("  "));
 
         return sb.toString();
     }
diff --git a/src/main/java/org/onap/aai/modelloader/util/GizmoTranslator.java b/src/main/java/org/onap/aai/modelloader/util/GizmoTranslator.java
index a8c5d17..1b03933 100644
--- a/src/main/java/org/onap/aai/modelloader/util/GizmoTranslator.java
+++ b/src/main/java/org/onap/aai/modelloader/util/GizmoTranslator.java
@@ -30,7 +30,6 @@
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
-import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import org.onap.aai.cl.api.Logger;
@@ -56,19 +55,20 @@
 
     private static Logger logger = LoggerFactory.getInstance().getLogger(GizmoTranslator.class.getName());
 
-    public static String translate(String xmlPayload) throws ParserConfigurationException, SAXException, IOException {
+    public static String translate(String xmlPayload) throws IOException {
         logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Process XML model artifact: " + xmlPayload);
 
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        InputSource is = new InputSource(new StringReader(xmlPayload));
-        Document doc = builder.parse(is);
+        Document doc;
+        try {
+            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+            doc = factory.newDocumentBuilder().parse(new InputSource(new StringReader(xmlPayload)));
+        } catch (ParserConfigurationException | SAXException e) {
+            throw new IOException(e);
+        }
 
         GizmoBulkPayload gizmoPayload = new GizmoBulkPayload();
-
         processNode(doc.getDocumentElement(), null, null, gizmoPayload);
-
         return gizmoPayload.toJson();
     }
 
diff --git a/src/test/java/org/onap/aai/modelloader/util/TestGizmoTranslator.java b/src/test/java/org/onap/aai/modelloader/util/TestGizmoTranslator.java
index e82af47..97d7a19 100644
--- a/src/test/java/org/onap/aai/modelloader/util/TestGizmoTranslator.java
+++ b/src/test/java/org/onap/aai/modelloader/util/TestGizmoTranslator.java
@@ -2,8 +2,8 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 European Software Marketing Ltd.
+ * Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (c) 2017-2019 European Software Marketing Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.modelloader.util;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,15 +27,18 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import javax.xml.parsers.ParserConfigurationException;
 import org.junit.Test;
 import org.onap.aai.modelloader.gizmo.GizmoBulkPayload;
-import org.xml.sax.SAXException;
 
 public class TestGizmoTranslator {
 
+    @Test(expected = IOException.class)
+    public void translateInvalidXml() throws IOException {
+        GizmoTranslator.translate("not valid XML");
+    }
+
     @Test
-    public void translateXmlModel1() throws Exception {
+    public void translateXmlModel1() throws IOException {
         GizmoBulkPayload request = createBulkRequest("src/test/resources/models/AAI-stellService-service-1.xml");
         assertThat(request.getVertexOperations(GizmoBulkPayload.ADD_OP).size(), is(5));
         assertThat(request.getVertexOperations(GizmoBulkPayload.EXISTS_OP).size(), is(3));
@@ -42,7 +46,7 @@
     }
 
     @Test
-    public void translateXmlModel2() throws Exception {
+    public void translateXmlModel2() throws IOException {
         GizmoBulkPayload request = createBulkRequest("src/test/resources/models/l3-network-widget.xml");
         assertThat(request.getVertexOperations(GizmoBulkPayload.ADD_OP).size(), is(2));
         assertThat(request.getVertexOperations(GizmoBulkPayload.EXISTS_OP).size(), is(0));
@@ -50,15 +54,14 @@
     }
 
     @Test
-    public void translateXmlNamedQuery() throws Exception {
+    public void translateXmlNamedQuery() throws IOException {
         GizmoBulkPayload request = createBulkRequest("src/test/resources/models/named-query-wan-connector.xml");
         assertThat(request.getVertexOperations(GizmoBulkPayload.ADD_OP).size(), is(5));
         assertThat(request.getVertexOperations(GizmoBulkPayload.EXISTS_OP).size(), is(4));
         assertThat(request.getEdgeOperations(GizmoBulkPayload.ADD_OP).size(), is(8));
     }
 
-    private GizmoBulkPayload createBulkRequest(String filePath)
-            throws IOException, ParserConfigurationException, SAXException {
+    private GizmoBulkPayload createBulkRequest(String filePath) throws IOException {
         final String xmlPayload = new String(Files.readAllBytes(Paths.get(filePath)));
         return GizmoBulkPayload.fromJson(GizmoTranslator.translate(xmlPayload));
     }