From fa1e0f7b61954a21240c567495d1113bba6148d2 Mon Sep 17 00:00:00 2001 From: "mark.j.leonard" Date: Mon, 18 Mar 2019 18:31:05 +0000 Subject: [PATCH] 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 --- .../entity/model/AbstractModelArtifact.java | 26 +++++++++++----------- .../onap/aai/modelloader/util/GizmoTranslator.java | 16 ++++++------- .../aai/modelloader/util/TestGizmoTranslator.java | 21 +++++++++-------- 3 files changed, 33 insertions(+), 30 deletions(-) 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.modelloader.util.GizmoTranslator; 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 abstract class AbstractModelArtifact extends Artifact implements IModelAr 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 @@ public abstract class AbstractModelArtifact extends Artifact implements IModelAr 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 @@ public abstract class AbstractModelArtifact extends Artifact implements IModelAr @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.Set; 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 @@ public class GizmoTranslator { 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 static org.junit.Assert.assertThat; 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 @@ public class TestGizmoTranslator { } @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 @@ public class TestGizmoTranslator { } @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)); } -- 2.16.6