From f9519c3fa6b47a46ad00da89f2aaccbe05e2f3c0 Mon Sep 17 00:00:00 2001 From: sebdet Date: Fri, 17 Jan 2020 15:14:27 +0100 Subject: [PATCH] Sonar fixes Sonar fixes on Csar service installation Issue-ID: CLAMP-566 Change-Id: I55f8d358efe9dc53471b78c31be363e0af6d0e80 Signed-off-by: sebdet --- .../onap/clamp/clds/util/drawing/ImageBuilder.java | 4 +- .../clamp/configuration/ClampGsonDataFormat.java | 24 ++-- .../java/org/onap/clamp/loop/CsarInstaller.java | 107 +++-------------- .../clamp/loop/service/CsarServiceInstaller.java | 130 +++++++++++++++++++++ 4 files changed, 158 insertions(+), 107 deletions(-) create mode 100644 src/main/java/org/onap/clamp/loop/service/CsarServiceInstaller.java diff --git a/src/main/java/org/onap/clamp/clds/util/drawing/ImageBuilder.java b/src/main/java/org/onap/clamp/clds/util/drawing/ImageBuilder.java index 4b887e4d..f63ead8e 100644 --- a/src/main/java/org/onap/clamp/clds/util/drawing/ImageBuilder.java +++ b/src/main/java/org/onap/clamp/clds/util/drawing/ImageBuilder.java @@ -78,8 +78,8 @@ public class ImageBuilder { } ImageBuilder circle(String dataElementId, int lineThickness) { - Shape circleStart = new Ellipse2D.Double(currentPoint.x, currentPoint.y - CIRCLE_RADIUS, 2 * CIRCLE_RADIUS, - 2 * CIRCLE_RADIUS); + Shape circleStart = new Ellipse2D.Double(currentPoint.x, ((double) currentPoint.y) - CIRCLE_RADIUS, + 2.0 * CIRCLE_RADIUS, 2.0 * CIRCLE_RADIUS); Stroke oldStroke = g2d.getStroke(); g2d.setStroke(new BasicStroke(lineThickness)); diff --git a/src/main/java/org/onap/clamp/configuration/ClampGsonDataFormat.java b/src/main/java/org/onap/clamp/configuration/ClampGsonDataFormat.java index c4d28be2..ca5f3765 100644 --- a/src/main/java/org/onap/clamp/configuration/ClampGsonDataFormat.java +++ b/src/main/java/org/onap/clamp/configuration/ClampGsonDataFormat.java @@ -53,8 +53,7 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D /** * Use the default Gson {@link Gson} and with a custom unmarshal type. * - * @param unmarshalType - * the custom unmarshal type + * @param unmarshalType the custom unmarshal type */ public ClampGsonDataFormat(Class unmarshalType) { this(null, unmarshalType); @@ -63,10 +62,8 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D /** * Use a custom Gson mapper and and unmarshal type. * - * @param gson - * the custom mapper - * @param unmarshalType - * the custom unmarshal type + * @param gson the custom mapper + * @param unmarshalType the custom unmarshal type */ public ClampGsonDataFormat(Gson gson, Class unmarshalType) { this.gson = gson; @@ -76,8 +73,7 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D /** * Use the default Gson {@link Gson} and with a custom unmarshal generic type. * - * @param unmarshalGenericType - * the custom unmarshal generic type + * @param unmarshalGenericType the custom unmarshal generic type */ public ClampGsonDataFormat(Type unmarshalGenericType) { this(null, unmarshalGenericType); @@ -86,10 +82,8 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D /** * Use a custom Gson mapper and and unmarshal token type. * - * @param gson - * the custom mapper - * @param unmarshalGenericType - * the custom unmarshal generic type + * @param gson the custom mapper + * @param unmarshalGenericType the custom unmarshal generic type */ public ClampGsonDataFormat(Gson gson, Type unmarshalGenericType) { this.gson = gson; @@ -104,7 +98,7 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D @Override public void marshal(final Exchange exchange, final Object graph, final OutputStream stream) throws Exception { try (final OutputStreamWriter osw = new OutputStreamWriter(stream, StandardCharsets.UTF_8); - final BufferedWriter writer = IOHelper.buffered(osw)) { + final BufferedWriter writer = IOHelper.buffered(osw)) { gson.toJson(graph, writer); } @@ -120,7 +114,7 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D @Override public Object unmarshal(final Exchange exchange, final InputStream stream) throws Exception { try (final InputStreamReader isr = new InputStreamReader(stream, StandardCharsets.UTF_8); - final BufferedReader reader = IOHelper.buffered(isr)) { + final BufferedReader reader = IOHelper.buffered(isr)) { if (unmarshalGenericType == null) { return gson.fromJson(reader, unmarshalType); } else { @@ -153,7 +147,7 @@ public class ClampGsonDataFormat extends ServiceSupport implements DataFormat, D } public Type getUnmarshalGenericType() { - return this.unmarshalType; + return this.unmarshalGenericType; } public void setUnmarshalGenericType(Type unmarshalGenericType) { diff --git a/src/main/java/org/onap/clamp/loop/CsarInstaller.java b/src/main/java/org/onap/clamp/loop/CsarInstaller.java index 16351b82..38a6f931 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstaller.java @@ -42,27 +42,18 @@ import org.onap.clamp.clds.sdc.controller.installer.BlueprintParser; import org.onap.clamp.clds.sdc.controller.installer.ChainGenerator; import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; import org.onap.clamp.clds.sdc.controller.installer.MicroService; -import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.drawing.SvgFacade; import org.onap.clamp.loop.deploy.DcaeDeployParameters; +import org.onap.clamp.loop.service.CsarServiceInstaller; import org.onap.clamp.loop.service.Service; -import org.onap.clamp.loop.service.ServiceRepository; import org.onap.clamp.policy.Policy; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.operational.OperationalPolicy; -import org.onap.sdc.tosca.parser.api.IEntityDetails; -import org.onap.sdc.tosca.parser.elements.queries.EntityQuery; -import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery; -import org.onap.sdc.tosca.parser.enums.EntityTemplateType; -import org.onap.sdc.tosca.parser.enums.SdcTypes; -import org.onap.sdc.toscaparser.api.NodeTemplate; -import org.onap.sdc.toscaparser.api.Property; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import org.yaml.snakeyaml.Yaml; /** * This class will be instantiated by spring config, and used by Sdc Controller. @@ -82,9 +73,6 @@ public class CsarInstaller { @Autowired LoopsRepository loopRepository; - @Autowired - ServiceRepository serviceRepository; - @Autowired BlueprintParser blueprintParser; @@ -97,19 +85,18 @@ public class CsarInstaller { @Autowired private SvgFacade svgFacade; + @Autowired + CsarServiceInstaller csarServiceInstaller; + /** - * Verify whether Csar is deployed. - * - * @param csar The Csar Handler - * @return The flag indicating whether Csar is deployed - * @throws SdcArtifactInstallerException The SdcArtifactInstallerException - */ + * Verify whether Csar is deployed. + * + * @param csar The Csar Handler + * @return The flag indicating whether Csar is deployed + * @throws SdcArtifactInstallerException The SdcArtifactInstallerException + */ public boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { - boolean alreadyInstalled = true; - JsonObject serviceDetails = JsonUtils.GSON.fromJson( - JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); - alreadyInstalled = alreadyInstalled - && serviceRepository.existsById(serviceDetails.get("UUID").getAsString()); + boolean alreadyInstalled = csarServiceInstaller.isServiceAlreadyDeployed(csar); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { alreadyInstalled = alreadyInstalled @@ -118,7 +105,6 @@ public class CsarInstaller { blueprint.getValue().getResourceAttached().getResourceInstanceName(), blueprint.getValue().getBlueprintArtifactName())); } - return alreadyInstalled; } @@ -127,24 +113,24 @@ public class CsarInstaller { * * @param csar The Csar Handler * @throws SdcArtifactInstallerException The SdcArtifactInstallerException - * @throws InterruptedException The InterruptedException + * @throws InterruptedException The InterruptedException */ public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { logger.info("Installing the CSAR " + csar.getFilePath()); - installTheLoop(csar, installTheService(csar)); + installTheLoop(csar, csarServiceInstaller.installTheService(csar)); logger.info("Successfully installed the CSAR " + csar.getFilePath()); } /** * Install the Loop from the csar. * - * @param csar The Csar Handler + * @param csar The Csar Handler * @param service The service object that is related to the loop * @throws SdcArtifactInstallerException The SdcArtifactInstallerException - * @throws InterruptedException The InterruptedException + * @throws InterruptedException The InterruptedException */ - @Transactional(propagation = Propagation.REQUIRED) - public void installTheLoop(CsarHandler csar, Service service) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void installTheLoop(CsarHandler csar, Service service) throws SdcArtifactInstallerException, InterruptedException { try { logger.info("Installing the Loops"); @@ -160,30 +146,6 @@ public class CsarInstaller { } } - /** - * Install the Service from the csar. - * - * @param csar The Csar Handler - * @return The service object - */ - @Transactional - public Service installTheService(CsarHandler csar) { - logger.info("Start to install the Service from csar"); - JsonObject serviceDetails = JsonUtils.GSON.fromJson( - JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); - - // Add properties details for each type, VfModule, VF, VFC, .... - JsonObject resourcesProp = createServicePropertiesByType(csar); - resourcesProp.add("VFModule", createVfModuleProperties(csar)); - - Service modelService = new Service(serviceDetails, resourcesProp, - csar.getSdcNotification().getServiceVersion()); - - serviceRepository.save(modelService); - logger.info("Successfully installed the Service"); - return modelService; - } - private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact, Service service) throws IOException, ParseException, InterruptedException { Loop newLoop = new Loop(); @@ -243,41 +205,6 @@ public class CsarInstaller { return DcaeDeployParameters.getDcaeDeploymentParametersInJson(blueprintArtifact, newLoop); } - private static JsonObject createVfModuleProperties(CsarHandler csar) { - JsonObject vfModuleProps = new JsonObject(); - // Loop on all Groups defined in the service (VFModule entries type: - // org.openecomp.groups.VfModule) - for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity( - EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), - TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { - // Get all metadata info - JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties()); - vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps); - // now append the properties section so that we can also have isBase, - // volume_group, etc ... fields under the VFmodule name - for (Entry additionalProp : entity.getProperties().entrySet()) { - allVfProps.add(additionalProp.getValue().getName(), - JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); - } - } - return vfModuleProps; - } - - private static JsonObject createServicePropertiesByType(CsarHandler csar) { - JsonObject resourcesProp = new JsonObject(); - // Iterate on all types defined in the tosca lib - for (SdcTypes type : SdcTypes.values()) { - JsonObject resourcesPropByType = new JsonObject(); - // For each type, get the metadata of each nodetemplate - for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { - resourcesPropByType.add(nodeTemplate.getName(), - JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); - } - resourcesProp.add(type.getValue(), resourcesPropByType); - } - return resourcesProp; - } - /** * ll get the latest version of the artifact (version can be specified to DCAE * call). diff --git a/src/main/java/org/onap/clamp/loop/service/CsarServiceInstaller.java b/src/main/java/org/onap/clamp/loop/service/CsarServiceInstaller.java new file mode 100644 index 00000000..277fe004 --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/service/CsarServiceInstaller.java @@ -0,0 +1,130 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.loop.service; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.google.gson.JsonObject; + +import java.util.Map.Entry; + +import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; +import org.onap.clamp.clds.sdc.controller.installer.CsarHandler; +import org.onap.clamp.clds.util.JsonUtils; +import org.onap.sdc.tosca.parser.api.IEntityDetails; +import org.onap.sdc.tosca.parser.elements.queries.EntityQuery; +import org.onap.sdc.tosca.parser.elements.queries.TopologyTemplateQuery; +import org.onap.sdc.tosca.parser.enums.EntityTemplateType; +import org.onap.sdc.tosca.parser.enums.SdcTypes; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.Property; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Component +@Qualifier("csarInstaller") +public class CsarServiceInstaller { + private static final EELFLogger logger = EELFManager.getInstance().getLogger(CsarServiceInstaller.class); + + @Autowired + ServiceRepository serviceRepository; + + /** + * Install the Service from the csar. + * + * @param csar The Csar Handler + * @return The service object + */ + @Transactional(propagation = Propagation.REQUIRES_NEW) + public Service installTheService(CsarHandler csar) { + logger.info("Start to install the Service from csar"); + JsonObject serviceDetails = JsonUtils.GSON.fromJson( + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); + + // Add properties details for each type, VfModule, VF, VFC, .... + JsonObject resourcesProp = createServicePropertiesByType(csar); + resourcesProp.add("VFModule", createVfModuleProperties(csar)); + + Service modelService = new Service(serviceDetails, resourcesProp, + csar.getSdcNotification().getServiceVersion()); + + serviceRepository.save(modelService); + logger.info("Successfully installed the Service"); + return modelService; + } + + private static JsonObject createServicePropertiesByType(CsarHandler csar) { + JsonObject resourcesProp = new JsonObject(); + // Iterate on all types defined in the tosca lib + for (SdcTypes type : SdcTypes.values()) { + JsonObject resourcesPropByType = new JsonObject(); + // For each type, get the metadata of each nodetemplate + for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { + resourcesPropByType.add(nodeTemplate.getName(), + JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties())); + } + resourcesProp.add(type.getValue(), resourcesPropByType); + } + return resourcesProp; + } + + private static JsonObject createVfModuleProperties(CsarHandler csar) { + JsonObject vfModuleProps = new JsonObject(); + // Loop on all Groups defined in the service (VFModule entries type: + // org.openecomp.groups.VfModule) + for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity( + EntityQuery.newBuilder(EntityTemplateType.GROUP).build(), + TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) { + // Get all metadata info + JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties()); + vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps); + // now append the properties section so that we can also have isBase, + // volume_group, etc ... fields under the VFmodule name + for (Entry additionalProp : entity.getProperties().entrySet()) { + allVfProps.add(additionalProp.getValue().getName(), + JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue())); + } + } + return vfModuleProps; + } + + /** + * Verify whether Service in Csar is deployed. + * + * @param csar The Csar Handler + * @return The flag indicating whether Service is deployed + * @throws SdcArtifactInstallerException The SdcArtifactInstallerException + */ + public boolean isServiceAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { + boolean alreadyInstalled = true; + JsonObject serviceDetails = JsonUtils.GSON.fromJson( + JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); + alreadyInstalled = serviceRepository.existsById(serviceDetails.get("UUID").getAsString()); + + return alreadyInstalled; + } +} -- 2.16.6