2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.mso.asdc.installer;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
27 import java.util.Map.Entry;
29 import org.openecomp.sdc.api.notification.IArtifactInfo;
30 import org.openecomp.sdc.api.notification.IResourceInstance;
31 import org.openecomp.sdc.api.notification.IVfModuleMetadata;
32 import org.openecomp.mso.asdc.client.ASDCConfiguration;
35 * A class representing a generic element whose information can be used for example to log artifacts, resource... data.
37 public class ASDCElementInfo {
40 * A default, empty instance used in case a source element was not correctly provided.
42 public static final ASDCElementInfo EMPTY_INSTANCE = new ASDCElementInfo();
45 * Used to define the other possible ASDC Element types (usually in addition to existing artifact types, etc.).<br/>
47 * Possible types allowed:<br/>
49 * <li>{@link ASDCElementTypeEnum#VNF_RESOURCE}</li>
52 public static enum ASDCElementTypeEnum {
54 * The type VNF_RESOURCE. Represents a VNF_RESOURCE element.
60 * The map of element information fields useful for logging. The complete contents of this list will be concatenated.
62 private final Map<String, String> elementInfoMap = new HashMap<>();
65 * The type of this element.
67 private final String type;
69 private ASDCElementInfo () {
70 // Private parameterless constructor. Not visible, only used for EMPTY_INSTANCE.
75 * Artifact-type based constructor. Requires a valid artifact type.
76 * @param artifactType The artifact type
78 private ASDCElementInfo (String artifactType) {
79 // We need the exact type name here...
80 this.type = artifactType;
84 * 'Other element type'-based constructor. Requires a valid element type.
85 * @param elementType An ASDCElementTypeEnum entry. This will usually contain enumerated types not in the existing
87 private ASDCElementInfo (ASDCElementTypeEnum elementType) {
88 // We need the exact type name here...
89 this.type = elementType.name();
93 * Add an information entry (name, UUID, etc.) from an artifact/resource/..., once a at time.
95 * @param key The key (name) of the information entry (Artifact UUID, Resource Name, etc.)
96 * @param value The value bound to the information entry.
98 public final void addElementInfo(String key, String value) {
99 if ((key != null) && (value != null)) {
100 this.getElementInfoMap().put(key, value);
105 * Returns an aggregated, formatted list of the expected details about an ASDC element.
107 * @return An aggregated list of element information entries, comma-separated.
108 * @see java.lang.Object#toString()
111 public final String toString() {
112 StringBuffer sb = new StringBuffer();
113 List<String> aggregatedElements = new ArrayList<>();
114 for (Entry<String, String> entry : this.getElementInfoMap().entrySet()) {
115 aggregatedElements.add(entry.getKey() + ": " + entry.getValue());
117 sb.append(aggregatedElements.size() > 0 ? aggregatedElements.get(0) : "");
118 if (aggregatedElements.size() > 1) {
119 for (int i = 1; i < aggregatedElements.size(); ++i) {
121 sb.append(aggregatedElements.get(i));
124 return sb.toString();
128 * The type that was defined at creation time. This is typically VNF_RESOURCE, VF_MODULE_METADATA, HEAT_ENV, etc.
129 * @return The type of this element information type. This will usually be either an ArtifactTypeEnum entry name or an ASDCElementTypeEnum entry name.
130 * @see ASDCElementInfo.ASDCElementTypeEnum
132 public String getType() {
137 * Provides the map of all element information entries for this type.
138 * @return A map of all element information entries which will be used by the toString() method.
139 * @see ASDCElementInfo#toString()
141 protected Map<String, String> getElementInfoMap() {
142 return elementInfoMap;
146 * Create an ASDCElementInfo object from a VNF Resource.<br/>
148 * <b>Used information:</b><br/>
150 * <li>Resource Instance Name</li>
151 * <li>Resource Instance UUID</li>
154 * @param vfResourceStructure The VfResourceStructure to use as source of information (see {@link VfResourceStructure}).
155 * @return an ASDCElementInfo using the information held in the VNF Resource.
157 public static final ASDCElementInfo createElementFromVfResourceStructure (VfResourceStructure vfResourceStructure) {
158 if (vfResourceStructure == null) {
159 return EMPTY_INSTANCE;
161 ASDCElementInfo elementInfo = new ASDCElementInfo(ASDCElementTypeEnum.VNF_RESOURCE);
162 IResourceInstance resourceInstance = vfResourceStructure.getResourceInstance();
163 elementInfo.addElementInfo("Resource Instance Name", resourceInstance.getResourceInstanceName());
164 elementInfo.addElementInfo("Resource Instance Invariant UUID", resourceInstance.getResourceInvariantUUID());
169 * Create an ASDCElementInfo object from a VF Module.<br/>
171 * <b>Used information:</b><br/>
173 * <li>Module Model Name</li>
174 * <li>Module Model UUID</li>
177 * @param vfModuleStructure The VfModuleStructure to use as source of information (see {@link VfModuleStructure}).
178 * @return an ASDCElementInfo using the information held in the VF Module.
180 public static final ASDCElementInfo createElementFromVfModuleStructure (VfModuleStructure vfModuleStructure) {
181 if (vfModuleStructure == null) {
182 return EMPTY_INSTANCE;
184 ASDCElementInfo elementInfo = new ASDCElementInfo(ASDCConfiguration.VF_MODULES_METADATA);
185 IVfModuleMetadata moduleMetadata = vfModuleStructure.getVfModuleMetadata();
186 elementInfo.addElementInfo("Module Model Name", moduleMetadata.getVfModuleModelName());
187 elementInfo.addElementInfo("Module Model Invariant UUID", moduleMetadata.getVfModuleModelInvariantUUID());
192 * Create an ASDCElementInfo object from an IArtfiactInfo instance.<br/>
194 * <b>Used information:</b><br/>
196 * <li>IArtifactInfo Name</li>
197 * <li>IArtifactInfo UUID</li>
200 * @param artifactInfo The VfModuleStructure to use as source of information (see {@link IArtifactInfo}).
201 * @return an ASDCElementInfo using the information held in the IArtifactInfo instance.
203 public static final ASDCElementInfo createElementFromVfArtifactInfo (IArtifactInfo artifactInfo) {
204 if (artifactInfo == null) {
205 return EMPTY_INSTANCE;
207 ASDCElementInfo elementInfo = new ASDCElementInfo(artifactInfo.getArtifactType());
208 elementInfo.addElementInfo(elementInfo.getType() + " Name", artifactInfo.getArtifactName());
209 elementInfo.addElementInfo(elementInfo.getType() + " UUID", artifactInfo.getArtifactUUID());