X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fclamp%2Fclds%2Fsdc%2Fcontroller%2Finstaller%2FCsarHandler.java;h=8835438681bcf46c5cc0743c622fe193a88acbaa;hb=d67bf35d358de09054049641892cab72eacbb7ce;hp=b11385239824237f745ca5e0268c03fb1b9cbd2d;hpb=350b41105138242190f0dd42396721a0195e04d2;p=clamp.git diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java index b1138523..88354386 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java @@ -18,7 +18,7 @@ * limitations under the License. * ============LICENSE_END============================================ * =================================================================== - * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * */ package org.onap.clamp.clds.sdc.controller.installer; @@ -27,27 +27,28 @@ import com.att.aft.dme2.internal.apache.commons.io.IOUtils; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.Enumeration; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; -import org.openecomp.sdc.api.notification.IArtifactInfo; -import org.openecomp.sdc.api.notification.INotificationData; -import org.openecomp.sdc.api.notification.IResourceInstance; -import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; -import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper; -import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.openecomp.sdc.tosca.parser.impl.SdcToscaParserFactory; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; +import org.onap.sdc.api.notification.IResourceInstance; +import org.onap.sdc.api.results.IDistributionClientDownloadResult; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; /** * CsarDescriptor that will be used to deploy file in CLAMP file system. Some @@ -61,12 +62,12 @@ public class CsarHandler { private String controllerName; private SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); private ISdcCsarHelper sdcCsarHelper; - private String dcaeBlueprint; - private String blueprintArtifactName; - private String blueprintInvariantResourceUuid; - private String blueprintInvariantServiceUuid; + private Map mapOfBlueprints = new HashMap<>(); public static final String CSAR_TYPE = "TOSCA_CSAR"; + public static final String BLUEPRINT_TYPE = "DCAE_INVENTORY_BLUEPRINT"; private INotificationData sdcNotification; + public static final String RESOURCE_INSTANCE_NAME_PREFIX = "/Artifacts/Resources/"; + public static final String RESOURCE_INSTANCE_NAME_SUFFIX = "/Deployment/"; public CsarHandler(INotificationData iNotif, String controller, String clampCsarPath) throws CsarHandlerException { this.sdcNotification = iNotif; @@ -92,53 +93,60 @@ public class CsarHandler { public synchronized void save(IDistributionClientDownloadResult resultArtifact) throws SdcArtifactInstallerException, SdcToscaParserException { try { - logger.info("Writing CSAR file : " + artifactElement.getArtifactURL() + " UUID " - + artifactElement.getArtifactUUID() + ")"); + logger.info("Writing CSAR file to: " + csarFilePath + " UUID " + artifactElement.getArtifactUUID() + ")"); Path path = Paths.get(csarFilePath); Files.createDirectories(path.getParent()); - Files.createFile(path); - try (FileOutputStream outFile = new FileOutputStream(csarFilePath)) { - outFile.write(resultArtifact.getArtifactPayload(), 0, resultArtifact.getArtifactPayload().length); + // Create or replace the file + try (OutputStream out = Files.newOutputStream(path)) { + out.write(resultArtifact.getArtifactPayload(), 0, resultArtifact.getArtifactPayload().length); } sdcCsarHelper = factory.getSdcCsarHelper(csarFilePath); this.loadDcaeBlueprint(); - this.loadBlueprintArtifactDetails(); } catch (IOException e) { throw new SdcArtifactInstallerException( "Exception caught when trying to write the CSAR on the file system to " + csarFilePath, e); } } - private void loadBlueprintArtifactDetails() { - blueprintInvariantServiceUuid = this.getSdcNotification().getServiceInvariantUUID(); - for (IResourceInstance resource : this.getSdcNotification().getResources()) { - if ("VF".equals(resource.getResourceType())) { - for (IArtifactInfo artifact : resource.getArtifacts()) { - if ("DCAE_INVENTORY_BLUEPRINT".equals(artifact.getArtifactType())) { - blueprintArtifactName = artifact.getArtifactName(); - blueprintInvariantResourceUuid = resource.getResourceInvariantUUID(); - } - } + private IResourceInstance searchForResourceByInstanceName(String blueprintResourceInstanceName) + throws SdcArtifactInstallerException { + for (IResourceInstance resource : this.sdcNotification.getResources()) { + String filteredString = resource.getResourceInstanceName().replaceAll("-", ""); + filteredString = filteredString.replaceAll(" ", ""); + if (filteredString.equalsIgnoreCase(blueprintResourceInstanceName)) { + return resource; } } + throw new SdcArtifactInstallerException("Error when searching for " + blueprintResourceInstanceName + + " as ResourceInstanceName in Sdc notification and did not find it"); } private void loadDcaeBlueprint() throws IOException, SdcArtifactInstallerException { - List listEntries = new ArrayList<>(); try (ZipFile zipFile = new ZipFile(csarFilePath)) { Enumeration entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); - if (entry.getName().contains("DCAE_INVENTORY_BLUEPRINT")) { - listEntries.add(entry); + if (entry.getName().contains(BLUEPRINT_TYPE)) { + BlueprintArtifact blueprintArtifact = new BlueprintArtifact(); + blueprintArtifact.setBlueprintArtifactName( + entry.getName().substring(entry.getName().lastIndexOf('/') + 1, entry.getName().length())); + blueprintArtifact + .setBlueprintInvariantServiceUuid(this.getSdcNotification().getServiceInvariantUUID()); + try (InputStream stream = zipFile.getInputStream(entry)) { + blueprintArtifact.setDcaeBlueprint(IOUtils.toString(stream)); + } + blueprintArtifact.setResourceAttached(searchForResourceByInstanceName(entry.getName().substring( + entry.getName().indexOf(RESOURCE_INSTANCE_NAME_PREFIX) + + RESOURCE_INSTANCE_NAME_PREFIX.length(), + entry.getName().indexOf(RESOURCE_INSTANCE_NAME_SUFFIX)))); + this.mapOfBlueprints.put(blueprintArtifact.getResourceAttached().getResourceInstanceName(), + blueprintArtifact); + logger.info("Found a blueprint entry in the CSAR " + blueprintArtifact.getBlueprintArtifactName() + + " for resource instance Name " + + blueprintArtifact.getResourceAttached().getResourceInstanceName()); } } - if (listEntries.size() > 1) { - throw new SdcArtifactInstallerException("There are multiple entries in the DCAE inventory"); - } - try (InputStream stream = zipFile.getInputStream(listEntries.get(0))) { - this.dcaeBlueprint = IOUtils.toString(stream); - } + logger.info(this.mapOfBlueprints.size() + " blueprint(s) will be converted to closed loop"); } } @@ -154,23 +162,11 @@ public class CsarHandler { return sdcCsarHelper; } - public synchronized String getDcaeBlueprint() { - return dcaeBlueprint; - } - public INotificationData getSdcNotification() { return sdcNotification; } - public String getBlueprintArtifactName() { - return blueprintArtifactName; - } - - public String getBlueprintInvariantResourceUuid() { - return blueprintInvariantResourceUuid; - } - - public String getBlueprintInvariantServiceUuid() { - return blueprintInvariantServiceUuid; + public Map getMapOfBlueprints() { + return mapOfBlueprints; } }