diff options
Diffstat (limited to 'asdc-controller/src/main/java/org/openecomp/mso/asdc')
9 files changed, 794 insertions, 341 deletions
diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCConfiguration.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCConfiguration.java index 1d87ccbe21..61ca698678 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCConfiguration.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCConfiguration.java @@ -7,9 +7,9 @@ * 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. @@ -75,8 +75,8 @@ public class ASDCConfiguration implements IConfiguration { public static final String HEAT_VOL="HEAT_VOL"; public static final String OTHER="OTHER"; public static final String VF_MODULES_METADATA="VF_MODULES_METADATA"; - - + + private static final String[] SUPPORTED_ARTIFACT_TYPES = {HEAT, HEAT_ARTIFACT, HEAT_ENV, @@ -84,10 +84,10 @@ public class ASDCConfiguration implements IConfiguration { HEAT_NET, HEAT_VOL, OTHER, - VF_MODULES_METADATA}; - - public static final List<String> SUPPORTED_ARTIFACT_TYPES_LIST = Collections.unmodifiableList(Arrays.asList(SUPPORTED_ARTIFACT_TYPES)); - + VF_MODULES_METADATA}; + + public static final List<String> SUPPORTED_ARTIFACT_TYPES_LIST = Collections.unmodifiableList(Arrays.asList(SUPPORTED_ARTIFACT_TYPES)); + /** * Default constructor, the mso.properties is searched in the classpath (for testing) * Or in /etc/ecomp/mso/config/mso.properties @@ -97,7 +97,7 @@ public class ASDCConfiguration implements IConfiguration { * @throws IOException If the key file has not been loaded properly */ public ASDCConfiguration (String controllerName) throws ASDCParametersException, IOException { - + Properties keyProp = new Properties (); this.asdcControllerName = controllerName; @@ -287,7 +287,7 @@ public class ASDCConfiguration implements IConfiguration { return 0; } } - + @Override public boolean activateServerTLSAuth() { JsonNode masterConfigNode = getASDCControllerConfigJsonNode(); @@ -415,4 +415,12 @@ public class ASDCConfiguration implements IConfiguration { } + /** + * The flag allows the client to receive metadata for all resources of the service regardless of the artifacts associated to them. + * Setting the flag to false will preserve legacy behavior. + */ + public boolean isFilterInEmptyResources() { + return true; + } + } diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java index b553100816..a0de24a9cd 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCController.java @@ -7,9 +7,9 @@ * 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. @@ -270,17 +270,17 @@ public class ASDCController { this.changeControllerStatus (ASDCControllerStatus.STOPPED); } - private boolean checkResourceAlreadyDeployed (VfResourceStructure vfResource) throws ArtifactInstallerException { + private boolean checkResourceAlreadyDeployed (VfResourceStructure resource) throws ArtifactInstallerException { - if (this.resourceInstaller.isResourceAlreadyDeployed (vfResource)) { + if (this.resourceInstaller.isResourceAlreadyDeployed (resource)) { LOGGER.info (MessageEnum.ASDC_ARTIFACT_ALREADY_EXIST, - vfResource.getResourceInstance().getResourceInstanceName(), - vfResource.getResourceInstance().getResourceUUID(), - vfResource.getResourceInstance().getResourceName(), "", ""); - - this.sendDeployNotificationsForResource(vfResource,DistributionStatusEnum.ALREADY_DOWNLOADED,null); - this.sendDeployNotificationsForResource(vfResource,DistributionStatusEnum.ALREADY_DEPLOYED,null); - + resource.getResourceInstance().getResourceInstanceName(), + resource.getResourceInstance().getResourceUUID(), + resource.getResourceInstance().getResourceName(), "", ""); + + this.sendDeployNotificationsForResource(resource,DistributionStatusEnum.ALREADY_DOWNLOADED,null); + this.sendDeployNotificationsForResource(resource,DistributionStatusEnum.ALREADY_DEPLOYED,null); + return true; } else { return false; @@ -289,7 +289,7 @@ public class ASDCController { } private final static String UUID_PARAM = "(UUID:"; - + private IDistributionClientDownloadResult downloadTheArtifact (IArtifactInfo artifact, String distributionId) throws ASDCDownloadException { @@ -299,7 +299,7 @@ public class ASDCController { + ")"); IDistributionClientDownloadResult downloadResult; - + try { downloadResult = distributionClient.download (artifact); if (null == downloadResult) { @@ -366,14 +366,14 @@ public class ASDCController { } - + private void sendDeployNotificationsForResource(VfResourceStructure vfResourceStructure,DistributionStatusEnum distribStatus, String errorReason) { - + for (IArtifactInfo artifactInfo : vfResourceStructure.getResourceInstance().getArtifacts()) { - - if (DistributionStatusEnum.DEPLOY_OK.equals(distribStatus) + + if (DistributionStatusEnum.DEPLOY_OK.equals(distribStatus) // This could be NULL if the artifact is a VF module artifact, this won't be present in the MAP - && vfResourceStructure.getArtifactsMapByUUID().get(artifactInfo.getArtifactUUID()) != null + && vfResourceStructure.getArtifactsMapByUUID().get(artifactInfo.getArtifactUUID()) != null && vfResourceStructure.getArtifactsMapByUUID().get(artifactInfo.getArtifactUUID()).getDeployedInDb() == 0) { this.sendASDCNotification (NotificationType.DEPLOY, artifactInfo.getArtifactURL (), @@ -393,26 +393,30 @@ public class ASDCController { } } } - - private void deployResourceStructure (VfResourceStructure vfResourceStructure) throws ArtifactInstallerException { - LOGGER.info (MessageEnum.ASDC_START_DEPLOY_ARTIFACT, vfResourceStructure.getResourceInstance().getResourceInstanceName(), vfResourceStructure.getResourceInstance().getResourceUUID(), "ASDC", "deployResourceStructure"); + private void deployResourceStructure (VfResourceStructure resourceStructure) throws ArtifactInstallerException { + + LOGGER.info (MessageEnum.ASDC_START_DEPLOY_ARTIFACT, resourceStructure.getResourceInstance().getResourceInstanceName(), resourceStructure.getResourceInstance().getResourceUUID(), "ASDC", "deployResourceStructure"); try { - vfResourceStructure.createVfModuleStructures(); - resourceInstaller.installTheResource (vfResourceStructure); - + String resourceType = resourceStructure.getResourceInstance().getResourceType(); + String category = resourceStructure.getResourceInstance().getCategory(); + if(resourceType.equals("VF") && !category.equalsIgnoreCase("Allotted Resource")){ + resourceStructure.createVfModuleStructures(); + } + resourceInstaller.installTheResource (resourceStructure); + } catch (ArtifactInstallerException e) { - - sendDeployNotificationsForResource(vfResourceStructure,DistributionStatusEnum.DEPLOY_ERROR,e.getMessage()); + + sendDeployNotificationsForResource(resourceStructure,DistributionStatusEnum.DEPLOY_ERROR,e.getMessage()); throw e; } - if (vfResourceStructure.isDeployedSuccessfully()) { + if (resourceStructure.isDeployedSuccessfully()) { LOGGER.info (MessageEnum.ASDC_ARTIFACT_DEPLOY_SUC, - vfResourceStructure.getResourceInstance().getResourceName(), - vfResourceStructure.getResourceInstance().getResourceUUID(), - String.valueOf (vfResourceStructure.getVfModuleStructure().size()), "ASDC", "deployResourceStructure"); - sendDeployNotificationsForResource(vfResourceStructure,DistributionStatusEnum.DEPLOY_OK ,null); + resourceStructure.getResourceInstance().getResourceName(), + resourceStructure.getResourceInstance().getResourceUUID(), + String.valueOf (resourceStructure.getVfModuleStructure().size()), "ASDC", "deployResourceStructure"); + sendDeployNotificationsForResource(resourceStructure,DistributionStatusEnum.DEPLOY_OK ,null); } } @@ -428,14 +432,14 @@ public class ASDCController { DistributionStatusEnum status, String errorReason, long timestamp) { - + String event = "Sending " + notificationType.name () + "(" + status.name () + ")" + " notification to ASDC for artifact:" + artifactURL; - + if (errorReason != null) { event=event+"("+errorReason+")"; } @@ -480,7 +484,7 @@ public class ASDCController { } public void treatNotification (INotificationData iNotif) { - + int noOfArtifacts = 0; for (IResourceInstance resource : iNotif.getResources ()) { noOfArtifacts += resource.getArtifacts ().size (); @@ -488,7 +492,7 @@ public class ASDCController { LOGGER.info (MessageEnum.ASDC_RECEIVE_CALLBACK_NOTIF, String.valueOf (noOfArtifacts), iNotif.getServiceUUID (), "ASDC", "treatNotification"); - + try { LOGGER.debug(ASDCNotificationLogging.dumpASDCNotification(iNotif)); LOGGER.info(MessageEnum.ASDC_RECEIVE_SERVICE_NOTIF, iNotif.getServiceUUID(), "ASDC", "treatNotification"); @@ -496,14 +500,15 @@ public class ASDCController { // Process only the Resource artifacts in MSO for (IResourceInstance resource : iNotif.getResources()) { + // We process only VNF(VF) and Network(VL) resources on MSO Side // We process only VNF resource on MSO Side - if ("VF".equals(resource.getResourceType())) { - this.processResourceNotification(iNotif,resource); + if ("VF".equals(resource.getResourceType()) || "VL".equals(resource.getResourceType())) { + this.processResourceNotification(iNotif,resource); } } - - - + + + } catch (RuntimeException e) { LOGGER.error (MessageEnum.ASDC_GENERAL_EXCEPTION_ARG, "Unexpected exception caught during the notification processing", "ASDC", "treatNotification", MsoLogger.ErrorCode.SchemaError, "RuntimeException in treatNotification", @@ -513,40 +518,41 @@ public class ASDCController { } } - + private void processResourceNotification (INotificationData iNotif,IResourceInstance resource) { // For each artifact, create a structure describing the VFModule in a ordered flat level - VfResourceStructure vfResourceStructure = new VfResourceStructure(iNotif,resource); + VfResourceStructure resourceStructure = new VfResourceStructure(iNotif,resource); + try { - - if (!this.checkResourceAlreadyDeployed(vfResourceStructure)) { + + if (!this.checkResourceAlreadyDeployed(resourceStructure)) { for (IArtifactInfo artifact : resource.getArtifacts()) { - - IDistributionClientDownloadResult resultArtifact = this.downloadTheArtifact(artifact, + + IDistributionClientDownloadResult resultArtifact = this.downloadTheArtifact(artifact, iNotif.getDistributionID()); if (resultArtifact != null) { if (ASDCConfiguration.VF_MODULES_METADATA.equals(artifact.getArtifactType())) { LOGGER.debug("VF_MODULE_ARTIFACT: "+new String(resultArtifact.getArtifactPayload(),"UTF-8")); - LOGGER.debug(ASDCNotificationLogging.dumpVfModuleMetaDataList(distributionClient.decodeVfModuleArtifact(resultArtifact.getArtifactPayload()))); + LOGGER.debug(ASDCNotificationLogging.dumpVfModuleMetaDataList(resourceStructure.decodeVfModuleArtifact(resultArtifact.getArtifactPayload()))); } - vfResourceStructure.addArtifactToStructure(distributionClient,artifact, resultArtifact); - - } + resourceStructure.addArtifactToStructure(distributionClient,artifact, resultArtifact); + + } } - - this.deployResourceStructure(vfResourceStructure); - - } + + this.deployResourceStructure(resourceStructure); + + } } catch (ArtifactInstallerException | ASDCDownloadException | UnsupportedEncodingException e) { LOGGER.error(MessageEnum.ASDC_GENERAL_EXCEPTION_ARG, "Exception caught during Installation of artifact", "ASDC", "processResourceNotification", MsoLogger.ErrorCode.BusinessProcesssError, "Exception in processResourceNotification", e); } } - + private static final String UNKNOWN="Unknown"; - + /** * @return the address of the ASDC we are connected to. */ diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/ASDCElementInfo.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/ASDCElementInfo.java index 5e59be526f..e649a992f8 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/ASDCElementInfo.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/ASDCElementInfo.java @@ -7,9 +7,9 @@ * 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. @@ -35,12 +35,12 @@ import org.openecomp.mso.asdc.client.ASDCConfiguration; * A class representing a generic element whose information can be used for example to log artifacts, resource... data. */ public class ASDCElementInfo { - + /** * A default, empty instance used in case a source element was not correctly provided. */ public static final ASDCElementInfo EMPTY_INSTANCE = new ASDCElementInfo(); - + /** * Used to define the other possible ASDC Element types (usually in addition to existing artifact types, etc.).<br/> * <br/> @@ -60,17 +60,17 @@ public class ASDCElementInfo { * The map of element information fields useful for logging. The complete contents of this list will be concatenated. */ private final Map<String, String> elementInfoMap = new HashMap<>(); - + /** * The type of this element. */ private final String type; - + private ASDCElementInfo () { // Private parameterless constructor. Not visible, only used for EMPTY_INSTANCE. this.type = ""; } - + /** * Artifact-type based constructor. Requires a valid artifact type. * @param artifactType The artifact type @@ -79,7 +79,7 @@ public class ASDCElementInfo { // We need the exact type name here... this.type = artifactType; } - + /** * 'Other element type'-based constructor. Requires a valid element type. * @param elementType An ASDCElementTypeEnum entry. This will usually contain enumerated types not in the existing @@ -88,10 +88,10 @@ public class ASDCElementInfo { // We need the exact type name here... this.type = elementType.name(); } - + /** * Add an information entry (name, UUID, etc.) from an artifact/resource/..., once a at time. - * + * * @param key The key (name) of the information entry (Artifact UUID, Resource Name, etc.) * @param value The value bound to the information entry. */ @@ -100,7 +100,7 @@ public class ASDCElementInfo { this.getElementInfoMap().put(key, value); } } - + /** * Returns an aggregated, formatted list of the expected details about an ASDC element. * (non-Javadoc) @@ -123,7 +123,7 @@ public class ASDCElementInfo { } return sb.toString(); } - + /** * The type that was defined at creation time. This is typically VNF_RESOURCE, VF_MODULE_METADATA, HEAT_ENV, etc. * @return The type of this element information type. This will usually be either an ArtifactTypeEnum entry name or an ASDCElementTypeEnum entry name. @@ -150,7 +150,7 @@ public class ASDCElementInfo { * <li>Resource Instance Name</li> * <li>Resource Instance UUID</li> * </ul> - * + * * @param vfResourceStructure The VfResourceStructure to use as source of information (see {@link VfResourceStructure}). * @return an ASDCElementInfo using the information held in the VNF Resource. */ @@ -173,7 +173,7 @@ public class ASDCElementInfo { * <li>Module Model Name</li> * <li>Module Model UUID</li> * </ul> - * + * * @param vfModuleStructure The VfModuleStructure to use as source of information (see {@link VfModuleStructure}). * @return an ASDCElementInfo using the information held in the VF Module. */ @@ -182,12 +182,12 @@ public class ASDCElementInfo { return EMPTY_INSTANCE; } ASDCElementInfo elementInfo = new ASDCElementInfo(ASDCConfiguration.VF_MODULES_METADATA); - IVfModuleMetadata moduleMetadata = vfModuleStructure.getVfModuleMetadata(); + IVfModuleData moduleMetadata = vfModuleStructure.getVfModuleMetadata(); elementInfo.addElementInfo("Module Model Name", moduleMetadata.getVfModuleModelName()); elementInfo.addElementInfo("Module Model Invariant UUID", moduleMetadata.getVfModuleModelInvariantUUID()); return elementInfo; } - + /** * Create an ASDCElementInfo object from an IArtfiactInfo instance.<br/> * <br/> @@ -196,7 +196,7 @@ public class ASDCElementInfo { * <li>IArtifactInfo Name</li> * <li>IArtifactInfo UUID</li> * </ul> - * + * * @param artifactInfo The VfModuleStructure to use as source of information (see {@link IArtifactInfo}). * @return an ASDCElementInfo using the information held in the IArtifactInfo instance. */ diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/IVfModuleData.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/IVfModuleData.java new file mode 100644 index 0000000000..d3aa0411a9 --- /dev/null +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/IVfModuleData.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 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.openecomp.mso.asdc.installer; + +import java.util.Map; + + +public interface IVfModuleData { + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelName(); + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelInvariantUUID(); + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelCustomizationUUID(); + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelVersion(); + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelUUID(); + + // Method descriptor #4 ()Ljava/lang/String; + public abstract java.lang.String getVfModuleModelDescription(); + + // Method descriptor #10 ()Z + public abstract boolean isBase(); + + // Method descriptor #12 ()Ljava/util/List; + // Signature: ()Ljava/util/List<Ljava/lang/String;>; + public abstract java.util.List<String> getArtifacts(); + + public abstract java.util.Map<String,String> getProperties(); +} diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleMetaData.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleMetaData.java new file mode 100644 index 0000000000..284141b91d --- /dev/null +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleMetaData.java @@ -0,0 +1,99 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 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.openecomp.mso.asdc.installer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.codehaus.jackson.annotate.JsonAnySetter; +import org.codehaus.jackson.annotate.JsonIgnore; +import org.codehaus.jackson.annotate.JsonProperty; + +import org.openecomp.sdc.api.notification.IVfModuleMetadata; + +public class VfModuleMetaData implements IVfModuleData { + + @JsonProperty("artifacts") + private List<String> artifacts; + + @JsonProperty("properties") + //private List<Map<String, Object>> properties = new ArrayList<>(); + private Map<String,String> properties = new HashMap<>(); + + @JsonIgnore + private Map<String,Object> attributesMap = new HashMap<>(); + + @Override + public List<String> getArtifacts() { + return artifacts; + } + + public Map<String, String> getProperties() { + return properties; + } + + @Override + public String getVfModuleModelDescription() { + return (String)attributesMap.get("vfModuleModelDescription"); + } + + @Override + public String getVfModuleModelInvariantUUID() { + return (String)attributesMap.get("vfModuleModelInvariantUUID"); + } + + public String getVfModuleModelCustomizationUUID() { + return (String)attributesMap.get("vfModuleModelCustomizationUUID"); + } + + @Override + public String getVfModuleModelName() { + return (String)attributesMap.get("vfModuleModelName"); + } + + @Override + public String getVfModuleModelUUID() { + return (String)attributesMap.get("vfModuleModelUUID"); + } + + @Override + public String getVfModuleModelVersion() { + return (String)attributesMap.get("vfModuleModelVersion"); + } + + @Override + public boolean isBase() { + return (boolean)attributesMap.get("isBase"); + } + + + + @SuppressWarnings("unused") + @JsonAnySetter + public final void setAttribute(String attrName, Object attrValue) { + if ((null != attrName) && (!attrName.isEmpty()) && (null != attrValue) && (null != attrValue.toString())) { + this.attributesMap.put(attrName,attrValue); + } + } + +} diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleStructure.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleStructure.java index 239bc8ab99..b1e670883c 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleStructure.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfModuleStructure.java @@ -7,9 +7,9 @@ * 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. @@ -31,24 +31,24 @@ import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException; import org.openecomp.mso.db.catalog.beans.VfModule; public final class VfModuleStructure { - - private final IVfModuleMetadata vfModuleMetadata; - + + private final IVfModuleData vfModuleMetadata; + private final VfResourceStructure parentVfResource; - + private VfModule catalogVfModule; /** * The list of artifact existing in this resource hashed by artifactType. */ private final Map<String, List<VfModuleArtifact>> artifactsMap; - - public VfModuleStructure(VfResourceStructure vfParentResource,IVfModuleMetadata vfmoduleMetadata) throws ArtifactInstallerException { - + + public VfModuleStructure(VfResourceStructure vfParentResource,IVfModuleData vfmoduleMetadata) throws ArtifactInstallerException { + vfModuleMetadata = vfmoduleMetadata; parentVfResource = vfParentResource; - + artifactsMap = new HashMap<String, List<VfModuleArtifact>>(); - + for (String artifactUUID:this.vfModuleMetadata.getArtifacts()) { if (vfParentResource.getArtifactsMapByUUID().containsKey(artifactUUID)) { this.addToStructure(vfParentResource.getArtifactsMapByUUID().get(artifactUUID)); @@ -57,42 +57,42 @@ public final class VfModuleStructure { } } } - + private void addToStructure(VfModuleArtifact vfModuleArtifact) { - + if (artifactsMap.containsKey(vfModuleArtifact.getArtifactInfo().getArtifactType())) { artifactsMap.get(vfModuleArtifact.getArtifactInfo().getArtifactType()).add(vfModuleArtifact); - + } else { List<VfModuleArtifact> nestedList = new LinkedList<VfModuleArtifact>(); nestedList.add(vfModuleArtifact); - + artifactsMap.put(vfModuleArtifact.getArtifactInfo().getArtifactType(), nestedList); } } - + public List<VfModuleArtifact> getOrderedArtifactList() { - + List <VfModuleArtifact> artifactsList = new LinkedList <VfModuleArtifact>(); - + artifactsList.addAll(artifactsMap.get(ASDCConfiguration.HEAT)); artifactsList.addAll(artifactsMap.get(ASDCConfiguration.HEAT_ENV)); artifactsList.addAll(artifactsMap.get(ASDCConfiguration.HEAT_VOL)); - + for (VfModuleArtifact artifact:(artifactsMap.get(ASDCConfiguration.HEAT_NESTED))) { artifactsList.add(artifact); } - + for (VfModuleArtifact artifact:(artifactsMap.get(ASDCConfiguration.HEAT_ARTIFACT))) { artifactsList.add(artifact); } - + artifactsList.addAll(artifactsMap.get(ASDCConfiguration.HEAT_VOL)); - + return null; } - public IVfModuleMetadata getVfModuleMetadata() { + public IVfModuleData getVfModuleMetadata() { return vfModuleMetadata; } @@ -112,6 +112,6 @@ public final class VfModuleStructure { public void setCatalogVfModule(VfModule catalogVfModule) { this.catalogVfModule = catalogVfModule; } - - + + } diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java index 7be5e7010b..d27819bb38 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/VfResourceStructure.java @@ -7,9 +7,9 @@ * 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. @@ -20,13 +20,18 @@ package org.openecomp.mso.asdc.installer; - +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import org.codehaus.jackson.JsonParseException; +import org.codehaus.jackson.map.JsonMappingException; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.type.TypeReference; + import org.openecomp.sdc.api.IDistributionClient; import org.openecomp.sdc.api.notification.IArtifactInfo; import org.openecomp.sdc.api.notification.INotificationData; @@ -35,72 +40,84 @@ import org.openecomp.sdc.api.notification.IVfModuleMetadata; import org.openecomp.sdc.api.results.IDistributionClientDownloadResult; import org.openecomp.mso.asdc.client.ASDCConfiguration; import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException; +import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization; +import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization; import org.openecomp.mso.db.catalog.beans.Service; +import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources; +import org.openecomp.mso.db.catalog.beans.ServiceToNetworks; import org.openecomp.mso.db.catalog.beans.VnfResource; /** * This structure exists to avoid having issues if the order of the vfResource/vfmodule artifact is not good (tree structure). - * * */ public final class VfResourceStructure { - + private boolean isDeployedSuccessfully=false; /** - * The Raw notification data. + * The Raw notification data. */ private final INotificationData notification; - + /** * The resource we will try to deploy. */ private final IResourceInstance resourceInstance; - + /** * The list of VfModules defined for this resource. */ private final List<VfModuleStructure> vfModulesStructureList; - + /** * The list of VfModulesMetadata defined for this resource. */ - private List<IVfModuleMetadata> vfModulesMetadataList; - + private List<IVfModuleData> vfModulesMetadataList; + private VnfResource catalogVnfResource; - + + private NetworkResourceCustomization catalogNetworkResourceCustomization; + + private ServiceToNetworks catalogServiceToNetworks; + + private ServiceToAllottedResources catalogServiceToAllottedResources; + + private AllottedResourceCustomization catalogResourceCustomization; + private Service catalogService; - + /** * The list of artifacts existing in this resource hashed by UUID. */ - private final Map<String, VfModuleArtifact> artifactsMapByUUID; - - + private final Map<String, VfModuleArtifact> artifactsMapByUUID; + + public VfResourceStructure(INotificationData notificationdata, IResourceInstance resourceinstance) { notification=notificationdata; resourceInstance=resourceinstance; - + vfModulesStructureList = new LinkedList<VfModuleStructure>(); artifactsMapByUUID = new HashMap<String, VfModuleArtifact>(); } - + + //@Override public void addArtifactToStructure(IDistributionClient distributionClient,IArtifactInfo artifactinfo,IDistributionClientDownloadResult clientResult) throws UnsupportedEncodingException { VfModuleArtifact vfModuleArtifact = new VfModuleArtifact(artifactinfo,clientResult); - + switch(artifactinfo.getArtifactType()) { case ASDCConfiguration.HEAT: case ASDCConfiguration.HEAT_ENV: case ASDCConfiguration.HEAT_VOL: case ASDCConfiguration.HEAT_NESTED: // For 1607 only 1 level tree is supported - case ASDCConfiguration.HEAT_ARTIFACT: + case ASDCConfiguration.HEAT_ARTIFACT: case ASDCConfiguration.HEAT_NET: case ASDCConfiguration.OTHER: artifactsMapByUUID.put(artifactinfo.getArtifactUUID(), vfModuleArtifact); break; case ASDCConfiguration.VF_MODULES_METADATA: - vfModulesMetadataList = distributionClient.decodeVfModuleArtifact(clientResult.getArtifactPayload()); + vfModulesMetadataList = this.decodeVfModuleArtifact(clientResult.getArtifactPayload()); break; default: @@ -110,15 +127,15 @@ public final class VfResourceStructure { } public void createVfModuleStructures() throws ArtifactInstallerException { - + if (vfModulesMetadataList == null) { throw new ArtifactInstallerException("VfModule Meta DATA could not be decoded properly or was not present in the notification"); } - for (IVfModuleMetadata vfModuleMeta:vfModulesMetadataList) { + for (IVfModuleData vfModuleMeta:vfModulesMetadataList) { vfModulesStructureList.add(new VfModuleStructure(this,vfModuleMeta)); } } - + public INotificationData getNotification() { return notification; } @@ -134,7 +151,7 @@ public final class VfResourceStructure { public boolean isDeployedSuccessfully() { return isDeployedSuccessfully; } - + public void setSuccessfulDeployment() { isDeployedSuccessfully = true; } @@ -155,6 +172,42 @@ public final class VfResourceStructure { this.catalogVnfResource = catalogVnfResource; } + // Network Only + public NetworkResourceCustomization getCatalogNetworkResourceCustomization() { + return catalogNetworkResourceCustomization; + } + // Network Only + public void setCatalogNetworkResourceCustomization(NetworkResourceCustomization catalogNetworkResourceCustomization) { + this.catalogNetworkResourceCustomization = catalogNetworkResourceCustomization; + } + // Network Only + public ServiceToNetworks getCatalogServiceToNetworks() { + return catalogServiceToNetworks; + } + // Network Only + public void setCatalogServiceToNetworks( + ServiceToNetworks catalogServiceToNetworks) { + this.catalogServiceToNetworks = catalogServiceToNetworks; + } + + public ServiceToAllottedResources getCatalogServiceToAllottedResources() { + return catalogServiceToAllottedResources; + } + + public void setCatalogServiceToAllottedResources( + ServiceToAllottedResources catalogServiceToAllottedResources) { + this.catalogServiceToAllottedResources = catalogServiceToAllottedResources; + } + + public AllottedResourceCustomization getCatalogResourceCustomization() { + return catalogResourceCustomization; + } + + public void setCatalogResourceCustomization( + AllottedResourceCustomization catalogResourceCustomization) { + this.catalogResourceCustomization = catalogResourceCustomization; + } + public Service getCatalogService() { return catalogService; } @@ -162,4 +215,19 @@ public final class VfResourceStructure { public void setCatalogService(Service catalogService) { this.catalogService = catalogService; } + + public List<IVfModuleData> decodeVfModuleArtifact(byte[] arg0) { + try { + List<IVfModuleData> listVFModuleMetaData = new ObjectMapper().readValue(arg0, new TypeReference<List<VfModuleMetaData>>(){}); + return listVFModuleMetaData; + + } catch (JsonParseException e) { + e.printStackTrace(); + } catch (JsonMappingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } } diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/VfResourceInstaller.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/VfResourceInstaller.java index 4cef0f1013..114f6f246b 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/VfResourceInstaller.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/VfResourceInstaller.java @@ -7,9 +7,9 @@ * 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. @@ -20,15 +20,19 @@ package org.openecomp.mso.asdc.installer.heat; - +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.LockAcquisitionException; - import org.openecomp.sdc.api.notification.IArtifactInfo; + import org.openecomp.mso.asdc.client.ASDCConfiguration; import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException; import org.openecomp.mso.asdc.installer.ASDCElementInfo; @@ -43,7 +47,11 @@ import org.openecomp.mso.db.catalog.beans.HeatEnvironment; import org.openecomp.mso.db.catalog.beans.HeatFiles; import org.openecomp.mso.db.catalog.beans.HeatTemplate; import org.openecomp.mso.db.catalog.beans.HeatTemplateParam; +import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization; +import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization; import org.openecomp.mso.db.catalog.beans.Service; +import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources; +import org.openecomp.mso.db.catalog.beans.ServiceToNetworks; import org.openecomp.mso.db.catalog.beans.VfModule; import org.openecomp.mso.db.catalog.beans.VnfResource; import org.openecomp.mso.logger.MessageEnum; @@ -58,18 +66,26 @@ public class VfResourceInstaller implements IVfResourceInstaller { } @Override - public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStructure) + public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStruct) throws ArtifactInstallerException { + + CatalogDatabase db = new CatalogDatabase(); boolean status = false; + VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct; + + try { - try (CatalogDatabase db = new CatalogDatabase()) { + String resourceType = vfResourceStruct.getResourceInstance().getResourceType(); + String category = vfResourceStruct.getResourceInstance().getCategory(); - logger.info(MessageEnum.ASDC_CHECK_HEAT_TEMPLATE, "VNFResource", + // Check for duplicate VF Module that is not an Allotted Resource + if(resourceType.equals("VF") && !category.equalsIgnoreCase("Allotted Resource")){ + logger.info(MessageEnum.ASDC_CHECK_HEAT_TEMPLATE, "VNFResource", VfResourceInstaller.createVNFName(vfResourceStructure), BigDecimalVersion.castAndCheckNotificationVersionToString( vfResourceStructure.getNotification().getServiceVersion()), "", ""); - VnfResource vnfResource = db.getVnfResource( + VnfResource vnfResource = db.getVnfResource( VfResourceInstaller.createVNFName(vfResourceStructure), BigDecimalVersion.castAndCheckNotificationVersionToString( vfResourceStructure.getNotification().getServiceVersion())); @@ -79,23 +95,73 @@ public class VfResourceInstaller implements IVfResourceInstaller { } + } + + // Check dup for VF Allotted Resource + if(resourceType.equals("VF") && category.equalsIgnoreCase("Allotted Resource")){ + logger.info(MessageEnum.ASDC_CHECK_HEAT_TEMPLATE, "AllottedResource", + vfResourceStruct.getResourceInstance().getResourceInstanceName(), + BigDecimalVersion.castAndCheckNotificationVersionToString( + vfResourceStructure.getNotification().getServiceVersion()), "", ""); + + List<AllottedResourceCustomization> allottedResources = db.getAllAllottedResourcesByServiceModelUuid(vfResourceStruct.getNotification().getServiceUUID()); + + if(allottedResources != null && allottedResources.size() > 0){ + for(AllottedResourceCustomization allottedResource : allottedResources){ + + String existingAllottedResource = allottedResource.getModelCustomizationUuid(); + String notificationAllottedResource = vfResourceStruct.getResourceInstance().getResourceCustomizationUUID(); + + if(existingAllottedResource.equals(notificationAllottedResource)){ + status=true; + break; + } + } + + } + } + + // Check Network for duplicates + if(resourceType.equals("VL")){ + logger.info(MessageEnum.ASDC_CHECK_HEAT_TEMPLATE, "NetworkResource", + vfResourceStruct.getResourceInstance().getResourceInstanceName(), + BigDecimalVersion.castAndCheckNotificationVersionToString( + vfResourceStructure.getNotification().getServiceVersion()), "", ""); + + List<NetworkResourceCustomization> networkResources = db.getAllNetworksByServiceModelUuid(vfResourceStruct.getNotification().getServiceUUID()); + + if(networkResources != null && networkResources.size() > 0){ + for(NetworkResourceCustomization networkResource : networkResources){ + + String existingNetworkResource = networkResource.getModelCustomizationUuid(); + String notificationNetworkResource = vfResourceStruct.getResourceInstance().getResourceCustomizationUUID(); + + if(existingNetworkResource.equals(notificationNetworkResource)){ + status=true; + break; + } + } + + } + } + if (status) { logger.info(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL, vfResourceStructure.getResourceInstance().getResourceInstanceName(), - vfResourceStructure.getResourceInstance().getResourceUUID(), + vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(), vfResourceStructure.getNotification().getServiceName(), BigDecimalVersion.castAndCheckNotificationVersionToString( vfResourceStructure.getNotification().getServiceVersion()), vfResourceStructure.getNotification().getServiceUUID(), - vfResourceStructure.getResourceInstance().getResourceName(), "", ""); + vfResourceStructure.getResourceInstance().getResourceName(),"", ""); } else { logger.info(MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL, vfResourceStructure.getResourceInstance().getResourceInstanceName(), - vfResourceStructure.getResourceInstance().getResourceUUID(), + vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(), vfResourceStructure.getNotification().getServiceName(), BigDecimalVersion.castAndCheckNotificationVersionToString( vfResourceStructure.getNotification().getServiceVersion()), - vfResourceStructure.getNotification().getServiceUUID(), + vfResourceStructure.getNotification().getServiceUUID(), vfResourceStructure.getResourceInstance().getResourceName(),"", ""); } @@ -108,13 +174,15 @@ public class VfResourceInstaller implements IVfResourceInstaller { } @Override - public void installTheResource(VfResourceStructure vfResourceStructure) throws ArtifactInstallerException { + public void installTheResource(VfResourceStructure vfResourceStruct) throws ArtifactInstallerException { // 1. Add the DB object list (Hashed) to be created from the HashMap // UUID // The DB objects will be stored in each VfModuleArtifact objects // Those objects could be reused by different VfModule + VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct; + for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) { switch (vfModuleArtifact.getArtifactInfo().getArtifactType()) { @@ -138,26 +206,53 @@ public class VfResourceInstaller implements IVfResourceInstaller { } } - + // in case of deployment failure, use a string that will represent the type of artifact that failed... List<ASDCElementInfo> artifactListForLogging = new ArrayList<>(); - + CatalogDatabase catalogDB = new CatalogDatabase(); // 2. Create the VFModules/VNFResource objects by linking them to the // objects created before and store them in Resource/module structure // Opening a DB transaction, starting from here try { - + VfResourceInstaller.createService(vfResourceStructure); - - VfResourceInstaller.createVnfResource(vfResourceStructure); + + String resourceType = vfResourceStructure.getResourceInstance().getResourceType(); + String resourceCategory = vfResourceStructure.getResourceInstance().getCategory(); + + if(resourceType.equals("VF")){ + + if(resourceCategory.equalsIgnoreCase("Allotted Resource")){ + VfResourceInstaller.createAllottedResourceCustomization(vfResourceStructure); + catalogDB.saveAllottedResourceCustomization(vfResourceStructure.getCatalogResourceCustomization()); + } else { + VfResourceInstaller.createVnfResource(vfResourceStructure); + catalogDB.saveOrUpdateVnfResource(vfResourceStructure.getCatalogVnfResource()); + } + } + + if(resourceType.equals("VL")){ + VfResourceInstaller.createNetworkResourceCustomization(vfResourceStructure); + catalogDB.saveNetworkResourceCustomization(vfResourceStructure.getCatalogNetworkResourceCustomization()); + } // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfResourceStructure(vfResourceStructure)); - - catalogDB.saveOrUpdateVnfResource(vfResourceStructure.getCatalogVnfResource()); + + //catalogDB.saveOrUpdateVnfResource(vfResourceStructure.getCatalogVnfResource()); catalogDB.saveService(vfResourceStructure.getCatalogService()); - + + // Now that the service has been added we can populate the Service_to_AllottedResources table + if(resourceType.equals("VF") && resourceCategory.equalsIgnoreCase("Allotted Resource")){ + catalogDB.saveServiceToAllottedResources(vfResourceStructure.getCatalogServiceToAllottedResources()); + } + + // Now that the service has been added we can populate the Service_to_Network table + if(resourceType.equals("VL")){ + catalogDB.saveServiceToNetworks(vfResourceStructure.getCatalogServiceToNetworks()); + } + for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) { // Here we set the right db structure according to the Catalog @@ -170,14 +265,14 @@ public class VfResourceInstaller implements IVfResourceInstaller { HeatTemplate heatMainTemplate = null; HeatEnvironment heatEnv = null; - + HeatTemplate heatVolumeTemplate = null; HeatEnvironment heatVolumeEnv = null; - + if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) { IArtifactInfo mainEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) .get(0).getArtifactInfo().getGeneratedArtifact(); - + // MAIN HEAT heatMainTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap() .get(ASDCConfiguration.HEAT).get(0).getCatalogObject(); @@ -185,77 +280,77 @@ public class VfResourceInstaller implements IVfResourceInstaller { // Add this one for logging artifactListForLogging.add(ASDCElementInfo .createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo())); - + catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters()); // Indicate we have deployed it in the DB vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).incrementDeployedInDB(); - - + + // VOLUME HEAT // We expect only one VOL HEAT per VFMODULE // we can also obtain from it the Env ArtifactInfo, that's why // we get the Volume IArtifactInfo - + if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) { IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0) .getArtifactInfo().getGeneratedArtifact(); - + heatVolumeTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap() .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject(); - + // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo())); catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters()); // Indicate we have deployed it in the DB vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).incrementDeployedInDB(); - + if (volEnvArtifactInfo != null) { heatVolumeEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID() .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject(); // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo)); - + catalogDB.saveHeatEnvironment(heatVolumeEnv); // Indicate we have deployed it in the DB vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB(); } - + } - + // NESTED HEAT // Here we expect many HEAT_NESTED template to be there // check first if we really have nested heat templates if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) { for (VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap() .get(ASDCConfiguration.HEAT_NESTED)) { - + // Check if this nested is well referenced by the MAIN HEAT String parentArtifactType = VfResourceInstaller.identifyParentOfNestedTemplate(vfModuleStructure,heatNestedArtifact); HeatTemplate heatNestedTemplate = (HeatTemplate) heatNestedArtifact.getCatalogObject(); - + if (parentArtifactType != null) { - + switch (parentArtifactType) { case ASDCConfiguration.HEAT: - + // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo())); - + catalogDB.saveNestedHeatTemplate (heatMainTemplate.getId(), heatNestedTemplate, heatNestedTemplate.getTemplateName()); // Indicate we have deployed it in the DB heatNestedArtifact.incrementDeployedInDB(); break; case ASDCConfiguration.HEAT_VOL: - + // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo())); catalogDB.saveNestedHeatTemplate (heatVolumeTemplate.getId(), heatNestedTemplate, heatNestedTemplate.getTemplateName()); // Indicate we have deployed it in the DB heatNestedArtifact.incrementDeployedInDB(); break; - + default: break; @@ -263,49 +358,49 @@ public class VfResourceInstaller implements IVfResourceInstaller { } else { // Assume it belongs to HEAT MAIN // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo())); - + catalogDB.saveNestedHeatTemplate (heatMainTemplate.getId(), heatNestedTemplate, heatNestedTemplate.getTemplateName()); // Indicate we have deployed it in the DB heatNestedArtifact.incrementDeployedInDB(); } } } - + if (mainEnvArtifactInfo != null) { heatEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID() .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject(); // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo)); - + catalogDB.saveHeatEnvironment(heatEnv); // Indicate we have deployed it in the DB vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB(); } - + } - - + + // here we expect one VFModule to be there VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate, heatVolumeTemplate, heatEnv, heatVolumeEnv); VfModule vfModule = vfModuleStructure.getCatalogVfModule(); // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure)); - + catalogDB.saveOrUpdateVfModule(vfModule); // Here we expect many HEAT_TEMPLATE files to be there if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) { for (VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap() .get(ASDCConfiguration.HEAT_ARTIFACT)) { - + HeatFiles heatFile = (HeatFiles) heatArtifact.getCatalogObject(); - + // Add this one for logging artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo())); - - + + catalogDB.saveVfModuleToHeatFiles (vfModule.getId(), heatFile); // Indicate we will deploy it in the DB heatArtifact.incrementDeployedInDB(); @@ -313,10 +408,10 @@ public class VfResourceInstaller implements IVfResourceInstaller { } } - + catalogDB.commit(); vfResourceStructure.setSuccessfulDeployment(); - + } catch (Exception e) { Throwable dbExceptionToCapture = e; @@ -329,12 +424,12 @@ public class VfResourceInstaller implements IVfResourceInstaller { logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED, vfResourceStructure.getResourceInstance().getResourceName(), vfResourceStructure.getNotification().getServiceVersion(), "", "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e); } else { - String endEvent = "Exception caught during installation of the VFResource. Transaction rollback."; + String endEvent = "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback."; String elementToLog = (artifactListForLogging.size() > 0 ? artifactListForLogging.get(artifactListForLogging.size()-1).toString() : "No element listed"); - logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of the VFResource. Transaction rollback", e); + logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback", e); catalogDB.rollback(); throw new ArtifactInstallerException( - "Exception caught during installation of the VFResource. Transaction rollback.", e); + "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e); } } finally { @@ -344,10 +439,10 @@ public class VfResourceInstaller implements IVfResourceInstaller { } } - + private static String identifyParentOfNestedTemplate(VfModuleStructure vfModuleStructure,VfModuleArtifact heatNestedArtifact) { - if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null + if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo().getRelatedArtifacts() != null) { for (IArtifactInfo unknownArtifact : vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0) .getArtifactInfo().getRelatedArtifacts()) { @@ -356,29 +451,29 @@ public class VfResourceInstaller implements IVfResourceInstaller { } } - } - - if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null + } + + if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts() != null) { for (IArtifactInfo unknownArtifact:vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts()) { if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) { return ASDCConfiguration.HEAT_VOL; } - + } } - + // Does not belong to anything return null; - + } - + private static void createVnfResource(VfResourceStructure vfResourceStructure) { VnfResource vnfResource = new VnfResource(); - + vnfResource.setAsdcUuid(vfResourceStructure.getResourceInstance().getResourceUUID()); vnfResource.setDescription(vfResourceStructure.getNotification().getServiceDescription()); - + vnfResource.setOrchestrationMode("HEAT"); // Set the version but Version is stored into ASDC_SERVICE_MODEL_VERSION vnfResource.setVersion(BigDecimalVersion @@ -386,15 +481,59 @@ public class VfResourceInstaller implements IVfResourceInstaller { vnfResource.setVnfType(VfResourceInstaller.createVNFName(vfResourceStructure)); vnfResource.setModelVersion(BigDecimalVersion .castAndCheckNotificationVersionToString(vfResourceStructure.getResourceInstance().getResourceVersion())); - + vnfResource.setModelInvariantUuid(vfResourceStructure.getResourceInstance().getResourceInvariantUUID()); vnfResource.setModelCustomizationName(vfResourceStructure.getResourceInstance().getResourceInstanceName()); + vnfResource.setModelCustomizationUuid(vfResourceStructure.getResourceInstance().getResourceCustomizationUUID()); vnfResource.setModelName(vfResourceStructure.getResourceInstance().getResourceName()); vnfResource.setServiceModelInvariantUUID(vfResourceStructure.getNotification().getServiceInvariantUUID()); - + //vnfResource.setCreated(getCurrentTimeStamp()); + vfResourceStructure.setCatalogVnfResource(vnfResource); } + private static void createNetworkResourceCustomization(VfResourceStructure vfResourceStructure) { + NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization(); + + networkResourceCustomization.setModelCustomizationUuid(vfResourceStructure.getResourceInstance().getResourceCustomizationUUID().trim()); + networkResourceCustomization.setModelName(vfResourceStructure.getResourceInstance().getResourceName().trim()); + networkResourceCustomization.setModelInstanceName(vfResourceStructure.getResourceInstance().getResourceInstanceName().trim()); + networkResourceCustomization.setModelInvariantUuid(vfResourceStructure.getResourceInstance().getResourceInvariantUUID().trim()); + networkResourceCustomization.setModelUuid(vfResourceStructure.getResourceInstance().getResourceUUID().trim()); + networkResourceCustomization.setModelVersion(vfResourceStructure.getResourceInstance().getResourceVersion().trim()); + //networkResourceCustomization.setCreated(getCurrentTimeStamp()); + + vfResourceStructure.setCatalogNetworkResourceCustomization(networkResourceCustomization); + + ServiceToNetworks serviceNetworks = new ServiceToNetworks(); + serviceNetworks.setNetworkModelCustomizationUuid(networkResourceCustomization.getModelCustomizationUuid()); + serviceNetworks.setServiceModelUuid(vfResourceStructure.getNotification().getServiceUUID()); + + vfResourceStructure.setCatalogServiceToNetworks(serviceNetworks); + + } + + private static void createAllottedResourceCustomization(VfResourceStructure vfResourceStructure) { + AllottedResourceCustomization resourceCustomization = new AllottedResourceCustomization(); + + resourceCustomization.setModelCustomizationUuid(vfResourceStructure.getResourceInstance().getResourceCustomizationUUID().trim()); + resourceCustomization.setModelName(vfResourceStructure.getResourceInstance().getResourceName().trim()); + resourceCustomization.setModelInstanceName(vfResourceStructure.getResourceInstance().getResourceInstanceName().trim()); + resourceCustomization.setModelInvariantUuid(vfResourceStructure.getResourceInstance().getResourceInvariantUUID().trim()); + resourceCustomization.setModelUuid(vfResourceStructure.getResourceInstance().getResourceUUID().trim()); + resourceCustomization.setVersion(vfResourceStructure.getResourceInstance().getResourceVersion().trim()); + //resourceCustomization.setCreated(getCurrentTimeStamp()); + + vfResourceStructure.setCatalogResourceCustomization(resourceCustomization); + + ServiceToAllottedResources serviceAllottedResources = new ServiceToAllottedResources(); + serviceAllottedResources.setArModelCustomizationUuid(resourceCustomization.getModelCustomizationUuid()); + serviceAllottedResources.setServiceModelUuid(vfResourceStructure.getNotification().getServiceUUID()); + + vfResourceStructure.setCatalogServiceToAllottedResources(serviceAllottedResources); + + } + private static void createVfModule(VfModuleStructure vfModuleStructure,HeatTemplate heatMain, HeatTemplate heatVolume,HeatEnvironment heatEnv, HeatEnvironment heatVolumeEnv) { VfModule vfModule = new VfModule(); vfModule.setType(createVfModuleName(vfModuleStructure)); @@ -407,21 +546,41 @@ public class VfResourceInstaller implements IVfResourceInstaller { vfModule.setIsBase(0); } + vfModule.setModelCustomizationUuid(vfModuleStructure.getVfModuleMetadata().getVfModuleModelCustomizationUUID()); vfModule.setModelInvariantUuid(vfModuleStructure.getVfModuleMetadata().getVfModuleModelInvariantUUID()); vfModule.setModelName(vfModuleStructure.getVfModuleMetadata().getVfModuleModelName()); - + vfModule.setVersion(BigDecimalVersion.castAndCheckNotificationVersionToString(vfModuleStructure.getParentVfResource().getNotification().getServiceVersion())); vfModule.setModelVersion(BigDecimalVersion.castAndCheckNotificationVersionToString( vfModuleStructure.getVfModuleMetadata().getVfModuleModelVersion())); - + + Map<String,String> map = vfModuleStructure.getVfModuleMetadata().getProperties(); + + if(map != null){ + + if(map.get("vf_module_label") != null){ + vfModule.setLabel(map.get("vf_module_label")); + } + if(map.get("initial_count") != null && map.get("initial_count").length() > 0){ + vfModule.setInitialCount(Integer.parseInt(map.get("initial_count"))); + } + if(map.get("min_vf_module_instances") != null && map.get("min_vf_module_instances").length() > 0){ + vfModule.setMinInstances(Integer.parseInt(map.get("min_vf_module_instances"))); + } + if(map.get("max_vf_module_instances") != null && map.get("max_vf_module_instances").length() > 0){ + vfModule.setMaxInstances(Integer.parseInt(map.get("max_vf_module_instances"))); + } + + } + vfModuleStructure.setCatalogVfModule(vfModule); - + VfResourceInstaller.createVfModuleLinks(vfModule, vfModuleStructure.getParentVfResource().getCatalogVnfResource(), heatMain,heatVolume, heatEnv,heatVolumeEnv); } private static void createVfModuleLinks(VfModule vfModule, VnfResource vnfResource, HeatTemplate heatMain, HeatTemplate heatVolume, HeatEnvironment heatEnv, HeatEnvironment heatVolumeEnv) { - + if (heatMain !=null) { vfModule.setTemplateId(heatMain.getId()); } @@ -434,7 +593,7 @@ public class VfResourceInstaller implements IVfResourceInstaller { if (heatVolumeEnv != null) { vfModule.setVolEnvironmentId(heatVolumeEnv.getId()); } - + vfModule.setVnfResourceId(vnfResource.getId()); } @@ -448,53 +607,53 @@ public class VfResourceInstaller implements IVfResourceInstaller { } - + public static String verifyTheFilePrefixInArtifacts(String filebody, VfResourceStructure vfResourceStructure, List<String> listTypes) { String newFileBody = filebody; for (VfModuleArtifact moduleArtifact:vfResourceStructure.getArtifactsMapByUUID().values()) { - + if (listTypes.contains(moduleArtifact.getArtifactInfo().getArtifactType())) { - + newFileBody = verifyTheFilePrefixInString(newFileBody,moduleArtifact.getArtifactInfo().getArtifactName()); } } return newFileBody; } - + public static String verifyTheFilePrefixInString(final String body, final String filenameToVerify) { - + String needlePrefix = "file:///"; String prefixedFilenameToVerify = needlePrefix+filenameToVerify; - - if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) { - return body; - } - - StringBuffer sb = new StringBuffer(body.length()); - - int currentIndex = 0; - int startIndex = 0; - - while (currentIndex != -1) { - startIndex = currentIndex; - currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex); - - if (currentIndex == -1) { - break; - } - - // We append from the startIndex up to currentIndex (start of File Name) - sb.append(body.substring(startIndex, currentIndex)); - sb.append(filenameToVerify); - - currentIndex += prefixedFilenameToVerify.length(); - } - - sb.append(body.substring(startIndex)); - + + if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) { + return body; + } + + StringBuffer sb = new StringBuffer(body.length()); + + int currentIndex = 0; + int startIndex = 0; + + while (currentIndex != -1) { + startIndex = currentIndex; + currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex); + + if (currentIndex == -1) { + break; + } + + // We append from the startIndex up to currentIndex (start of File Name) + sb.append(body.substring(startIndex, currentIndex)); + sb.append(filenameToVerify); + + currentIndex += prefixedFilenameToVerify.length(); + } + + sb.append(body.substring(startIndex)); + return sb.toString(); } - + private static void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure, VfModuleArtifact vfModuleArtifact) { HeatTemplate heatTemplate = new HeatTemplate(); @@ -505,11 +664,11 @@ public class VfResourceInstaller implements IVfResourceInstaller { // reused heatTemplate.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName()); heatTemplate.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID()); - + List<String> typeList = new ArrayList<String>(); typeList.add(ASDCConfiguration.HEAT_NESTED); typeList.add(ASDCConfiguration.HEAT_ARTIFACT); - + heatTemplate.setTemplateBody(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList)); heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName()); @@ -522,6 +681,13 @@ public class VfResourceInstaller implements IVfResourceInstaller { heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription()); heatTemplate.setVersion(BigDecimalVersion .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion())); + + if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){ + heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum()); + } else { + heatTemplate.setArtifactChecksum("MANUAL_RECORD"); + } + Set<HeatTemplateParam> heatParam = VfResourceInstaller .extractHeatTemplateParameters(vfModuleArtifact.getResult()); heatTemplate.setParameters(heatParam); @@ -536,11 +702,11 @@ public class VfResourceInstaller implements IVfResourceInstaller { heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName()); // TODO Set the label heatEnvironment.setAsdcLabel("Label"); - + List<String> typeList = new ArrayList<String>(); typeList.add(ASDCConfiguration.HEAT); typeList.add(ASDCConfiguration.HEAT_VOL); - + heatEnvironment.setEnvironment(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList)); heatEnvironment.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID()); heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription()); @@ -548,8 +714,14 @@ public class VfResourceInstaller implements IVfResourceInstaller { .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion())); heatEnvironment.setAsdcResourceName(VfResourceInstaller.createVNFName(vfResourceStructure)); + if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){ + heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum()); + } else{ + heatEnvironment.setArtifactChecksum("MANUAL_RECORD"); + } + vfModuleArtifact.setCatalogObject(heatEnvironment); - + } private static void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure, @@ -566,31 +738,45 @@ public class VfResourceInstaller implements IVfResourceInstaller { .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion())); heatFile.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName()); + + if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){ + heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum()); + } else { + heatFile.setArtifactChecksum("MANUAL_RECORD"); + } + vfModuleArtifact.setCatalogObject(heatFile); - + } private static void createService(VfResourceStructure vfResourceStructure) { - + Service service = new Service(); service.setDescription(vfResourceStructure.getNotification().getServiceDescription()); service.setServiceName(vfResourceStructure.getNotification().getServiceName()); service.setServiceNameVersionId(vfResourceStructure.getNotification().getServiceUUID()); service.setVersion(vfResourceStructure.getNotification().getServiceVersion()); service.setModelInvariantUUID(vfResourceStructure.getNotification().getServiceInvariantUUID()); - + vfResourceStructure.setCatalogService(service); } - - + + private static String createVNFName(VfResourceStructure vfResourceStructure) { return vfResourceStructure.getNotification().getServiceName() + "/" + vfResourceStructure.getResourceInstance().getResourceInstanceName(); } private static String createVfModuleName(VfModuleStructure vfModuleStructure) { - + return createVNFName(vfModuleStructure.getParentVfResource())+"::"+vfModuleStructure.getVfModuleMetadata().getVfModuleModelName(); } + + private static Timestamp getCurrentTimeStamp() { + + return new Timestamp(new Date().getTime()); + } + + } diff --git a/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/ASDCNotificationLogging.java b/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/ASDCNotificationLogging.java index 312613d1bc..a355f0547a 100644 --- a/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/ASDCNotificationLogging.java +++ b/asdc-controller/src/main/java/org/openecomp/mso/asdc/util/ASDCNotificationLogging.java @@ -7,9 +7,9 @@ * 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. @@ -22,122 +22,126 @@ package org.openecomp.mso.asdc.util; import java.util.List; +import java.util.Map; 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.notification.IVfModuleMetadata; + +import org.openecomp.mso.asdc.installer.IVfModuleData; public class ASDCNotificationLogging { public static String dumpASDCNotification(INotificationData asdcNotification) { - + if (asdcNotification == null) { return "NULL"; } StringBuffer buffer = new StringBuffer("ASDC Notification:"); buffer.append(System.lineSeparator()); - + buffer.append("DistributionID:"); buffer.append(testNull(asdcNotification.getDistributionID())); buffer.append(System.lineSeparator()); - - + + buffer.append("ServiceName:"); buffer.append(testNull(asdcNotification.getServiceName())); buffer.append(System.lineSeparator()); - - + + buffer.append("ServiceVersion:"); buffer.append(testNull(asdcNotification.getServiceVersion())); buffer.append(System.lineSeparator()); - - + + buffer.append("ServiceUUID:"); buffer.append(testNull(asdcNotification.getServiceUUID())); buffer.append(System.lineSeparator()); - - + + buffer.append("ServiceInvariantUUID:"); buffer.append(testNull(asdcNotification.getServiceInvariantUUID())); buffer.append(System.lineSeparator()); - - + + buffer.append("ServiceDescription:"); buffer.append(testNull(asdcNotification.getServiceDescription())); buffer.append(System.lineSeparator()); - - + + buffer.append("Service Artifacts List:"); buffer.append(System.lineSeparator()); buffer.append(testNull(dumpArtifactInfoList(asdcNotification.getServiceArtifacts()))); buffer.append(System.lineSeparator()); - + buffer.append("Resource Instances List:"); buffer.append(System.lineSeparator()); buffer.append(testNull(dumpASDCResourcesList(asdcNotification))); buffer.append(System.lineSeparator()); - - + + return buffer.toString(); } - - public static String dumpVfModuleMetaDataList(List<IVfModuleMetadata> moduleMetaDataList) { + + public static String dumpVfModuleMetaDataList(List<IVfModuleData> moduleMetaDataList) { if (moduleMetaDataList == null ) { return null; } - - StringBuffer buffer = new StringBuffer(); + + StringBuffer buffer = new StringBuffer("VfModuleMetaData List:"); + buffer.append(System.lineSeparator()); + buffer.append("{"); - - for (IVfModuleMetadata moduleMetaData:moduleMetaDataList) { + + for (IVfModuleData moduleMetaData:moduleMetaDataList) { buffer.append(System.lineSeparator()); buffer.append(testNull(dumpVfModuleMetaData(moduleMetaData))); buffer.append(System.lineSeparator()); buffer.append(","); - + } buffer.replace(buffer.length()-1,buffer.length(), System.lineSeparator()); buffer.append("}"); buffer.append(System.lineSeparator()); - + return buffer.toString(); } - - private static String dumpVfModuleMetaData(IVfModuleMetadata moduleMetaData) { - + + private static String dumpVfModuleMetaData(IVfModuleData moduleMetaData) { + if (moduleMetaData == null ) { return "NULL"; } - + StringBuffer buffer = new StringBuffer("VfModuleMetaData:"); buffer.append(System.lineSeparator()); - + buffer.append("VfModuleModelName:"); buffer.append(testNull(moduleMetaData.getVfModuleModelName())); buffer.append(System.lineSeparator()); - + buffer.append("VfModuleModelVersion:"); buffer.append(testNull(moduleMetaData.getVfModuleModelVersion())); buffer.append(System.lineSeparator()); - + buffer.append("VfModuleModelUUID:"); buffer.append(testNull(moduleMetaData.getVfModuleModelUUID())); buffer.append(System.lineSeparator()); - + buffer.append("VfModuleModelInvariantUUID:"); buffer.append(testNull(moduleMetaData.getVfModuleModelInvariantUUID())); buffer.append(System.lineSeparator()); - + buffer.append("VfModuleModelDescription:"); buffer.append(testNull(moduleMetaData.getVfModuleModelDescription())); buffer.append(System.lineSeparator()); - + buffer.append("Artifacts UUID List:"); - + if (moduleMetaData.getArtifacts() != null) { buffer.append("{"); - + for (String artifactUUID:moduleMetaData.getArtifacts()) { buffer.append(System.lineSeparator()); buffer.append(testNull(artifactUUID)); @@ -150,17 +154,33 @@ public class ASDCNotificationLogging { } else { buffer.append("NULL"); } - - + + if (moduleMetaData.getProperties() != null) { + Map<String, String> vfModuleMap = moduleMetaData.getProperties(); + buffer.append("Properties List:"); + buffer.append("{"); + + for (Map.Entry<String, String> entry : vfModuleMap.entrySet()) { + buffer.append(System.lineSeparator()); + buffer.append(" " + entry.getKey() + " : " + entry.getValue()); + } + buffer.replace(buffer.length()-1,buffer.length(), System.lineSeparator()); + buffer.append("}"); + buffer.append(System.lineSeparator()); + } else { + buffer.append("NULL"); + } + + buffer.append(System.lineSeparator()); - + buffer.append("isBase:"); buffer.append(moduleMetaData.isBase()); buffer.append(System.lineSeparator()); - + return buffer.toString(); } - + private static String testNull(Object object) { if (object == null) { return "NULL"; @@ -172,15 +192,15 @@ public class ASDCNotificationLogging { return "Type not recognized"; } } - + private static String dumpASDCResourcesList(INotificationData asdcNotification) { if (asdcNotification == null || asdcNotification.getResources() == null) { return null; } - - StringBuffer buffer = new StringBuffer(); + + StringBuffer buffer = new StringBuffer(); buffer.append("{"); - + for (IResourceInstance resourceInstanceElem:asdcNotification.getResources()) { buffer.append(System.lineSeparator()); buffer.append(testNull(dumpASDCResourceInstance(resourceInstanceElem))); @@ -190,136 +210,148 @@ public class ASDCNotificationLogging { buffer.replace(buffer.length()-1,buffer.length(), System.lineSeparator()); buffer.append("}"); buffer.append(System.lineSeparator()); - + return buffer.toString(); - + } - + private static String dumpASDCResourceInstance(IResourceInstance resourceInstance) { - + if (resourceInstance == null) { return null; } - + StringBuffer buffer = new StringBuffer("Resource Instance Info:"); buffer.append(System.lineSeparator()); - + buffer.append("ResourceInstanceName:"); buffer.append(testNull(resourceInstance.getResourceInstanceName())); buffer.append(System.lineSeparator()); - + + buffer.append("ResourceCustomizationUUID:"); + buffer.append(testNull(resourceInstance.getResourceCustomizationUUID())); + buffer.append(System.lineSeparator()); + buffer.append("ResourceInvariantUUID:"); buffer.append(testNull(resourceInstance.getResourceInvariantUUID())); buffer.append(System.lineSeparator()); - + buffer.append("ResourceName:"); buffer.append(testNull(resourceInstance.getResourceName())); buffer.append(System.lineSeparator()); - + buffer.append("ResourceType:"); buffer.append(testNull(resourceInstance.getResourceType())); buffer.append(System.lineSeparator()); - + buffer.append("ResourceUUID:"); buffer.append(testNull(resourceInstance.getResourceUUID())); buffer.append(System.lineSeparator()); - + buffer.append("ResourceVersion:"); buffer.append(testNull(resourceInstance.getResourceVersion())); buffer.append(System.lineSeparator()); - + + buffer.append("Category:"); + buffer.append(testNull(resourceInstance.getCategory())); + buffer.append(System.lineSeparator()); + + buffer.append("SubCategory:"); + buffer.append(testNull(resourceInstance.getSubcategory())); + buffer.append(System.lineSeparator()); + buffer.append("Resource Artifacts List:"); buffer.append(System.lineSeparator()); buffer.append(testNull(dumpArtifactInfoList(resourceInstance.getArtifacts()))); buffer.append(System.lineSeparator()); - + return buffer.toString(); - + } - - + + private static String dumpArtifactInfoList(List<IArtifactInfo> artifactsList) { - + if (artifactsList == null || artifactsList.isEmpty()) { return null; } - - StringBuffer buffer = new StringBuffer(); + + StringBuffer buffer = new StringBuffer(); buffer.append("{"); for (IArtifactInfo artifactInfoElem:artifactsList) { buffer.append(System.lineSeparator()); buffer.append(testNull(dumpASDCArtifactInfo(artifactInfoElem))); buffer.append(System.lineSeparator()); buffer.append(","); - + } buffer.replace(buffer.length()-1,buffer.length(), System.lineSeparator()); buffer.append("}"); buffer.append(System.lineSeparator()); - + return buffer.toString(); } - + private static String dumpASDCArtifactInfo(IArtifactInfo artifactInfo) { - + if (artifactInfo == null) { return null; } - + StringBuffer buffer = new StringBuffer("Service Artifacts Info:"); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactName:"); buffer.append(testNull(artifactInfo.getArtifactName())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactVersion:"); buffer.append(testNull(artifactInfo.getArtifactVersion())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactType:"); buffer.append(testNull(artifactInfo.getArtifactType())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactDescription:"); buffer.append(testNull(artifactInfo.getArtifactDescription())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactTimeout:"); buffer.append(testNull(artifactInfo.getArtifactTimeout())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactURL:"); buffer.append(testNull(artifactInfo.getArtifactURL())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactUUID:"); buffer.append(testNull(artifactInfo.getArtifactUUID())); buffer.append(System.lineSeparator()); - + buffer.append("ArtifactChecksum:"); buffer.append(testNull(artifactInfo.getArtifactChecksum())); buffer.append(System.lineSeparator()); - + buffer.append("GeneratedArtifact:"); buffer.append("{"); buffer.append(testNull(dumpASDCArtifactInfo(artifactInfo.getGeneratedArtifact()))); buffer.append(System.lineSeparator()); buffer.append("}"); buffer.append(System.lineSeparator()); - + buffer.append("RelatedArtifacts:"); - - + + if (artifactInfo.getRelatedArtifacts() != null) { buffer.append("{"); buffer.append(System.lineSeparator()); for (IArtifactInfo artifactInfoElem:artifactInfo.getRelatedArtifacts()) { - + buffer.append(testNull(dumpASDCArtifactInfo(artifactInfoElem))); buffer.append(System.lineSeparator()); buffer.append(","); - + } buffer.replace(buffer.length()-1,buffer.length(), System.lineSeparator()); buffer.append("}"); @@ -327,9 +359,9 @@ public class ASDCNotificationLogging { } else { buffer.append("NULL"); } - + buffer.append(System.lineSeparator()); - + return buffer.toString(); } } |