Reformat catalog-model
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / Component.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.openecomp.sdc.be.model;
21
22 import static java.util.Collections.emptyList;
23 import static java.util.Collections.emptyMap;
24 import static java.util.stream.Collectors.toMap;
25 import static org.apache.commons.collections.CollectionUtils.isEmpty;
26 import static org.apache.commons.collections.MapUtils.isEmpty;
27
28 import com.fasterxml.jackson.annotation.JsonIgnore;
29 import com.google.common.collect.Maps;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.HashMap;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Objects;
36 import java.util.Optional;
37 import java.util.function.Predicate;
38 import java.util.stream.Collectors;
39 import lombok.EqualsAndHashCode;
40 import lombok.Getter;
41 import lombok.Setter;
42 import org.apache.commons.collections.MapUtils;
43 import org.openecomp.sdc.be.config.ConfigurationManager;
44 import org.openecomp.sdc.be.dao.utils.MapUtil;
45 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
46 import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition;
47 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
48 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
49 import org.openecomp.sdc.be.datatypes.elements.PropertiesOwner;
50 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
51 import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterDataDefinition;
52 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
53 import org.openecomp.sdc.be.model.category.CategoryDefinition;
54 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
55 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElementTypeEnum;
56 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
57 import org.openecomp.sdc.common.log.api.ILogConfiguration;
58
59 @Getter
60 @Setter
61 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
62 public abstract class Component implements PropertiesOwner {
63
64     protected List<AdditionalInformationDefinition> additionalInformation;
65     protected List<PropertyDefinition> properties;
66     protected List<AttributeDefinition> attributes;
67     private ComponentMetadataDefinition componentMetadataDefinition;
68     private Map<String, ArtifactDefinition> artifacts;
69     private Map<String, ArtifactDefinition> deploymentArtifacts;
70     private Map<String, ArtifactDefinition> toscaArtifacts;
71     @EqualsAndHashCode.Include
72     private List<CategoryDefinition> categories;
73     private List<ComponentInstance> componentInstances;
74     private List<RequirementCapabilityRelDef> componentInstancesRelations;
75     private Map<String, List<ComponentInstanceInput>> componentInstancesInputs;
76     private Map<String, List<ComponentInstanceOutput>> componentInstancesOutputs;
77     private Map<String, List<ComponentInstanceProperty>> componentInstancesProperties;
78     private Map<String, List<ComponentInstanceAttribute>> componentInstancesAttributes;
79     private Map<String, List<CapabilityDefinition>> capabilities;
80     private Map<String, List<RequirementDefinition>> requirements;
81     private Map<String, List<ComponentInstanceInterface>> componentInstancesInterfaces;
82     private List<InputDefinition> inputs;
83     private List<OutputDefinition> outputs;
84     private List<GroupDefinition> groups;
85     private Map<String, PolicyDefinition> policies;
86     private String derivedFromGenericType;
87     private String derivedFromGenericVersion;
88     private String toscaType;
89     private Map<String, CINodeFilterDataDefinition> nodeFilterComponents;
90     private Map<String, SubstitutionFilterDataDefinition> substitutionFilterComponents;
91     private Map<String, InterfaceDefinition> interfaces;
92     private List<DataTypeDefinition> dataTypes;
93     private SubstitutionFilterDataDefinition substitutionFilter;
94
95     protected Component(ComponentMetadataDefinition componentMetadataDefinition) {
96         this.componentMetadataDefinition = componentMetadataDefinition;
97     }
98
99     public Map<String, String> getCategorySpecificMetadata() {
100         final Map<String, String> categorySpecificMetadata = componentMetadataDefinition.getMetadataDataDefinition().getCategorySpecificMetadata();
101         return categorySpecificMetadata == null ? Collections.emptyMap() : categorySpecificMetadata;
102     }
103
104     public void setCategorySpecificMetadata(final Map<String, String> categorySpecificMetadata) {
105         componentMetadataDefinition.getMetadataDataDefinition().setCategorySpecificMetadata(categorySpecificMetadata);
106     }
107
108     @JsonIgnore
109     public ComponentMetadataDefinition getComponentMetadataDefinition() {
110         return componentMetadataDefinition;
111     }
112
113     @Override
114     @EqualsAndHashCode.Include
115     public String getUniqueId() {
116         return componentMetadataDefinition.getMetadataDataDefinition().getUniqueId();
117     }
118
119     public void setUniqueId(String uniqueId) {
120         componentMetadataDefinition.getMetadataDataDefinition().setUniqueId(uniqueId);
121     }
122
123     public void setHighestVersion(Boolean isHighestVersion) {
124         componentMetadataDefinition.getMetadataDataDefinition().setHighestVersion(isHighestVersion);
125     }
126
127     public void setState(LifecycleStateEnum state) {
128         componentMetadataDefinition.getMetadataDataDefinition().setState(state.name());
129     }
130
131     public String getCreatorUserId() {
132         return this.componentMetadataDefinition.getMetadataDataDefinition().getCreatorUserId();
133     }
134
135     public void setCreatorUserId(String creatorUserId) {
136         this.componentMetadataDefinition.getMetadataDataDefinition().setCreatorUserId(creatorUserId);
137     }
138
139     public String getCreatorFullName() {
140         return this.componentMetadataDefinition.getMetadataDataDefinition().getCreatorFullName();
141     }
142
143     public void setCreatorFullName(String creatorFullName) {
144         this.componentMetadataDefinition.getMetadataDataDefinition().setCreatorFullName(creatorFullName);
145     }
146
147     public String getLastUpdaterUserId() {
148         return this.componentMetadataDefinition.getMetadataDataDefinition().getLastUpdaterUserId();
149     }
150
151     public void setLastUpdaterUserId(String lastUpdaterUserId) {
152         this.componentMetadataDefinition.getMetadataDataDefinition().setLastUpdaterUserId(lastUpdaterUserId);
153     }
154
155     public String getLastUpdaterFullName() {
156         return this.componentMetadataDefinition.getMetadataDataDefinition().getLastUpdaterFullName();
157     }
158
159     public void setLastUpdaterFullName(String lastUpdaterFullName) {
160         this.componentMetadataDefinition.getMetadataDataDefinition().setLastUpdaterFullName(lastUpdaterFullName);
161     }
162
163     @Override
164     @EqualsAndHashCode.Include
165     public String getName() {
166         return componentMetadataDefinition.getMetadataDataDefinition().getName();
167     }
168
169     public void setName(String name) {
170         componentMetadataDefinition.getMetadataDataDefinition().setName(name);
171     }
172
173     public String getVersion() {
174         return componentMetadataDefinition.getMetadataDataDefinition().getVersion();
175     }
176
177     public void setVersion(String version) {
178         componentMetadataDefinition.getMetadataDataDefinition().setVersion(version);
179     }
180
181     public Boolean isHighestVersion() {
182         return componentMetadataDefinition.getMetadataDataDefinition().isHighestVersion();
183     }
184
185     public Long getCreationDate() {
186         return componentMetadataDefinition.getMetadataDataDefinition().getCreationDate();
187     }
188
189     public void setCreationDate(Long creationDate) {
190         componentMetadataDefinition.getMetadataDataDefinition().setCreationDate(creationDate);
191     }
192
193     public Long getLastUpdateDate() {
194         return componentMetadataDefinition.getMetadataDataDefinition().getLastUpdateDate();
195     }
196
197     public void setLastUpdateDate(Long lastUpdateDate) {
198         componentMetadataDefinition.getMetadataDataDefinition().setLastUpdateDate(lastUpdateDate);
199     }
200
201     public String getDescription() {
202         return componentMetadataDefinition.getMetadataDataDefinition().getDescription();
203     }
204
205     public void setDescription(String description) {
206         componentMetadataDefinition.getMetadataDataDefinition().setDescription(description);
207     }
208
209     public LifecycleStateEnum getLifecycleState() {
210         if (componentMetadataDefinition.getMetadataDataDefinition().getState() != null) {
211             return LifecycleStateEnum.valueOf(componentMetadataDefinition.getMetadataDataDefinition().getState());
212         } else {
213             return null;
214         }
215     }
216
217     public void setLifecycleState(LifecycleStateEnum state) {
218         if (state != null) {
219             this.componentMetadataDefinition.getMetadataDataDefinition().setState(state.name());
220         }
221     }
222
223     public List<String> getTags() {
224         return componentMetadataDefinition.getMetadataDataDefinition().getTags();
225     }
226
227     public void setTags(List<String> tags) {
228         componentMetadataDefinition.getMetadataDataDefinition().setTags(tags);
229     }
230
231     public String getConformanceLevel() {
232         return componentMetadataDefinition.getMetadataDataDefinition().getConformanceLevel();
233     }
234
235     public void setConformanceLevel(String conformanceLevel) {
236         componentMetadataDefinition.getMetadataDataDefinition().setConformanceLevel(conformanceLevel);
237     }
238
239     public String getIcon() {
240         return componentMetadataDefinition.getMetadataDataDefinition().getIcon();
241     }
242
243     public void setIcon(String icon) {
244         componentMetadataDefinition.getMetadataDataDefinition().setIcon(icon);
245     }
246
247     public String getContactId() {
248         return componentMetadataDefinition.getMetadataDataDefinition().getContactId();
249     }
250
251     public void setContactId(String contactId) {
252         componentMetadataDefinition.getMetadataDataDefinition().setContactId(contactId);
253     }
254
255     public List<InputDefinition> safeGetInputs() {
256         return inputs == null ? new ArrayList<>() : inputs;
257     }
258
259     public String getUUID() {
260         return componentMetadataDefinition.getMetadataDataDefinition().getUUID();
261     }
262
263     public void setUUID(String uUID) {
264         componentMetadataDefinition.getMetadataDataDefinition().setUUID(uUID);
265     }
266
267     public String getSystemName() {
268         return componentMetadataDefinition.getMetadataDataDefinition().getSystemName();
269     }
270
271     public void setSystemName(String systemName) {
272         componentMetadataDefinition.getMetadataDataDefinition().setSystemName(systemName);
273     }
274
275     public Map<String, String> getAllVersions() {
276         return componentMetadataDefinition.getMetadataDataDefinition().getAllVersions();
277     }
278
279     public void setAllVersions(Map<String, String> allVersions) {
280         componentMetadataDefinition.getMetadataDataDefinition().setAllVersions(allVersions);
281     }
282
283     public Map<String, ArtifactDefinition> getAllArtifacts() {
284         HashMap<String, ArtifactDefinition> allArtifacts = new HashMap<>();
285         allArtifacts.putAll(Optional.ofNullable(this.deploymentArtifacts).orElse(emptyMap()));
286         allArtifacts.putAll(Optional.ofNullable(this.artifacts).orElse(emptyMap()));
287         return allArtifacts;
288     }
289
290     @Override
291     @EqualsAndHashCode.Include
292     public String getNormalizedName() {
293         return componentMetadataDefinition.getMetadataDataDefinition().getNormalizedName();
294     }
295
296     public void setNormalizedName(String normalizedName) {
297         componentMetadataDefinition.getMetadataDataDefinition().setNormalizedName(normalizedName);
298     }
299
300     public ComponentTypeEnum getComponentType() {
301         return this.componentMetadataDefinition.getMetadataDataDefinition().getComponentType();
302     }
303
304     public void setComponentType(ComponentTypeEnum componentType) {
305         this.componentMetadataDefinition.getMetadataDataDefinition().setComponentType(componentType);
306     }
307
308     public boolean isService() {
309         return getComponentType() == ComponentTypeEnum.SERVICE;
310     }
311
312     public Map<String, List<CapabilityDefinition>> getCapabilities() {
313         if (MapUtils.isEmpty(capabilities)) {
314             capabilities = Maps.newHashMap();
315         }
316         return capabilities;
317     }
318
319     public List<ComponentInstance> safeGetComponentInstances() {
320         if (componentInstances != null) {
321             return componentInstances;
322         } else {
323             return emptyList();
324         }
325     }
326
327     public Optional<ComponentInstance> fetchInstanceById(String instanceId) {
328         return Optional.ofNullable(MapUtil.toMap(componentInstances, ComponentInstance::getUniqueId).get(instanceId));
329     }
330
331     public Map<String, ArtifactDefinition> safeGetComponentInstanceDeploymentArtifacts(String componentInstanceId) {
332         return getComponentInstanceById(componentInstanceId).map(ComponentInstance::safeGetDeploymentArtifacts).orElse(emptyMap());
333     }
334
335     public Map<String, ArtifactDefinition> safeGetComponentInstanceInformationalArtifacts(String componentInstanceId) {
336         return getComponentInstanceById(componentInstanceId).map(ComponentInstance::safeGetInformationalArtifacts).orElse(emptyMap());
337     }
338
339     public List<ArtifactDefinition> safeGetComponentInstanceHeatArtifacts(String componentInstanceId) {
340         return safeGetComponentInstanceDeploymentArtifacts(componentInstanceId).values().stream()
341             .filter(artifact -> ArtifactTypeEnum.HEAT_ENV.getType().equals(artifact.getArtifactType())).collect(Collectors.toList());
342     }
343
344     public Map<String, List<ComponentInstanceProperty>> safeGetComponentInstancesProperties() {
345         return componentInstancesProperties == null ? emptyMap() : componentInstancesProperties;
346     }
347
348     public Map<String, List<ComponentInstanceAttribute>> safeGetComponentInstancesAttributes() {
349         return componentInstancesAttributes == null ? emptyMap() : componentInstancesAttributes;
350     }
351
352     public Map<String, List<ComponentInstanceProperty>> safeGetUiComponentInstancesProperties() {
353         return componentInstancesProperties == null ? emptyMap() : findUiComponentInstancesProperties();
354     }
355
356     private Map<String, List<ComponentInstanceProperty>> findUiComponentInstancesProperties() {
357         List<String> instancesFromUi = componentInstances.stream().filter(i -> !i.isCreatedFromCsar()).map(ComponentInstance::getUniqueId)
358             .collect(Collectors.toList());
359         return componentInstancesProperties.entrySet().stream().filter(e -> instancesFromUi.contains(e.getKey()))
360             .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
361     }
362
363     public Map<String, List<ComponentInstanceInput>> safeGetComponentInstancesInputs() {
364         return componentInstancesInputs == null ? emptyMap() : componentInstancesInputs;
365     }
366
367     public Map<String, List<ComponentInstanceInput>> safeGetUiComponentInstancesInputs() {
368         return componentInstancesInputs == null ? emptyMap() : findUiComponentInstancesInputs();
369     }
370
371     private Map<String, List<ComponentInstanceInput>> findUiComponentInstancesInputs() {
372         List<String> instancesFromUi = componentInstances.stream().filter(i -> !i.isCreatedFromCsar()).map(ComponentInstance::getUniqueId)
373             .collect(Collectors.toList());
374         return componentInstancesInputs.entrySet().stream().filter(e -> instancesFromUi.contains(e.getKey()))
375             .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
376     }
377
378     public List<ComponentInstanceProperty> safeGetComponentInstanceProperties(String cmptInstacneId) {
379         return this.safeGetComponentInstanceEntity(cmptInstacneId, this.componentInstancesProperties);
380     }
381
382     public List<ComponentInstanceInput> safeGetComponentInstanceInput(String comptInstanceId) {
383         return this.safeGetComponentInstanceEntity(comptInstanceId, this.componentInstancesInputs);
384     }
385
386     public List<ComponentInstanceInterface> safeGetComponentInstanceInterfaces(String cmptInstacneId) {
387         return this.safeGetComponentInstanceEntity(cmptInstacneId, this.componentInstancesInterfaces);
388     }
389
390     public Boolean getIsDeleted() {
391         return componentMetadataDefinition.getMetadataDataDefinition().isDeleted();
392     }
393
394     public void setIsDeleted(Boolean isDeleted) {
395         componentMetadataDefinition.getMetadataDataDefinition().setIsDeleted(isDeleted);
396     }
397
398     public String getProjectCode() {
399         return componentMetadataDefinition.getMetadataDataDefinition().getProjectCode();
400     }
401
402     public void setProjectCode(String projectCode) {
403         componentMetadataDefinition.getMetadataDataDefinition().setProjectCode(projectCode);
404     }
405
406     public String getCsarUUID() {
407         return componentMetadataDefinition.getMetadataDataDefinition().getCsarUUID();
408     }
409
410     public void setCsarUUID(String csarUUID) {
411         componentMetadataDefinition.getMetadataDataDefinition().setCsarUUID(csarUUID);
412     }
413
414     public String getCsarVersion() {
415         return componentMetadataDefinition.getMetadataDataDefinition().getCsarVersion();
416     }
417
418     public void setCsarVersion(String csarVersion) {
419         componentMetadataDefinition.getMetadataDataDefinition().setCsarVersion(csarVersion);
420     }
421
422     public String getImportedToscaChecksum() {
423         return componentMetadataDefinition.getMetadataDataDefinition().getImportedToscaChecksum();
424     }
425
426     public void setImportedToscaChecksum(String importedToscaChecksum) {
427         componentMetadataDefinition.getMetadataDataDefinition().setImportedToscaChecksum(importedToscaChecksum);
428     }
429
430     public String getInvariantUUID() {
431         return componentMetadataDefinition.getMetadataDataDefinition().getInvariantUUID();
432     }
433
434     public void setInvariantUUID(String invariantUUID) {
435         componentMetadataDefinition.getMetadataDataDefinition().setInvariantUUID(invariantUUID);
436     }
437
438     public Optional<ComponentInstance> getComponentInstanceById(String id) {
439         return getComponentInstanceByPredicate(instance -> id.equals(instance.getUniqueId()));
440     }
441
442     public Optional<ComponentInstance> getComponentInstanceByName(String name) {
443         return getComponentInstanceByPredicate(instance -> name.equals(instance.getName()));
444     }
445
446     private Optional<ComponentInstance> getComponentInstanceByPredicate(Predicate<ComponentInstance> predicate) {
447         if (componentInstances == null) {
448             return Optional.empty();
449         }
450         return componentInstances.stream().filter(predicate).findFirst();
451     }
452
453     public List<GroupDefinition> safeGetGroups() {
454         return groups == null ? emptyList() : groups;
455     }
456
457     public Optional<GroupDefinition> getGroupById(String id) {
458         return getGroupByPredicate(group -> group.getUniqueId().equals(id));
459     }
460
461     public Optional<GroupDefinition> getGroupByInvariantName(String name) {
462         return getGroupByPredicate(group -> name.equals(group.getInvariantName()));
463     }
464
465     public boolean containsGroupWithInvariantName(String invariantName) {
466         return groups != null && groups.stream().anyMatch(gr -> invariantName.equals(gr.getInvariantName()));
467     }
468
469     private Optional<GroupDefinition> getGroupByPredicate(Predicate<GroupDefinition> predicate) {
470         if (groups == null) {
471             return Optional.empty();
472         }
473         return groups.stream().filter(predicate).findAny();
474     }
475
476     public void addGroups(List<GroupDefinition> groupsToAdd) {
477         if (groups == null) {
478             groups = new ArrayList<>();
479         }
480         groups.addAll(groupsToAdd);
481     }
482
483     public void addPolicy(PolicyDefinition policyDefinition) {
484         if (MapUtils.isEmpty(this.policies)) {
485             this.policies = new HashMap<>();
486         }
487         this.policies.put(policyDefinition.getUniqueId(), policyDefinition);
488     }
489
490     public void addProperty(PropertyDefinition propertyDefinition) {
491         if (org.apache.commons.collections.CollectionUtils.isEmpty(this.properties)) {
492             this.properties = new ArrayList<>();
493         }
494         this.properties.add(propertyDefinition);
495     }
496
497     public void addCategory(String category, String subCategory) {
498         if (category != null || subCategory != null) {
499             if (categories == null) {
500                 categories = new ArrayList<>();
501             }
502             CategoryDefinition selectedCategory = null;
503             for (CategoryDefinition categoryDef : categories) {
504                 if (categoryDef.getName().equals(category)) {
505                     selectedCategory = categoryDef;
506                 }
507             }
508             if (selectedCategory == null) {
509                 selectedCategory = new CategoryDefinition();
510                 selectedCategory.setName(category);
511                 categories.add(selectedCategory);
512             }
513             List<SubCategoryDefinition> subcategories = selectedCategory.getSubcategories();
514             if (subcategories == null) {
515                 subcategories = new ArrayList<>();
516                 selectedCategory.setSubcategories(subcategories);
517             }
518             SubCategoryDefinition selectedSubcategory = null;
519             for (SubCategoryDefinition subcategory : subcategories) {
520                 if (subcategory.getName().equals(subCategory)) {
521                     selectedSubcategory = subcategory;
522                 }
523             }
524             if (selectedSubcategory == null) {
525                 selectedSubcategory = new SubCategoryDefinition();
526                 selectedSubcategory.setName(subCategory);
527                 subcategories.add(selectedSubcategory);
528             }
529         }
530     }
531
532     public void addCategory(CategoryDefinition category) {
533         addCategory(category, null);
534     }
535
536     public void addCategory(CategoryDefinition category, SubCategoryDefinition subCategory) {
537         if (categories == null) {
538             categories = new ArrayList<>();
539         }
540         boolean foundCat = false;
541         for (CategoryDefinition cat : categories) {
542             if (cat.getName().equals(category.getName())) {
543                 foundCat = true;
544                 if (subCategory != null) {
545                     List<SubCategoryDefinition> subcategories = cat.getSubcategories();
546                     if (subcategories == null) {
547                         subcategories = new ArrayList<>();
548                         cat.setSubcategories(subcategories);
549                     }
550                     for (SubCategoryDefinition subcat : subcategories) {
551                         boolean foundSub = false;
552                         if (subcat.getName().equals(subCategory.getName())) {
553                             foundSub = true;
554                         }
555                         if (!foundSub) {
556                             subcategories.add(subCategory);
557                             break;
558                         }
559                     }
560                 }
561             }
562         }
563         if (!foundCat) {
564             if (subCategory != null) {
565                 category.addSubCategory(subCategory);
566             }
567             categories.add(category);
568         }
569     }
570
571     public Map<String, List<PropertyDataDefinition>> safeGetGroupsProperties() {
572         if (isEmpty(groups)) {
573             return emptyMap();
574         }
575         return groups.stream().filter(gr -> Objects.nonNull(gr.getProperties()))
576             .collect(toMap(GroupDataDefinition::getUniqueId, GroupDataDefinition::getProperties));
577     }
578
579     public Map<String, List<PropertyDataDefinition>> safeGetPolicyProperties() {
580         if (isEmpty(policies)) {
581             return emptyMap();
582         }
583         return policies.values().stream().filter(policy -> Objects.nonNull(policy.getProperties()))
584             .collect(toMap(PolicyDataDefinition::getUniqueId, PolicyDataDefinition::getProperties));
585     }
586
587     public List<ComponentInstanceInput> safeGetComponentInstanceInputsByName(String cmptInstanceName) {
588         List<ComponentInstanceInput> emptyPropsList = emptyList();
589         if (this.componentInstancesInputs == null) {
590             return emptyPropsList;
591         }
592         return this.componentInstances.stream().filter(ci -> ci.getName().equals(cmptInstanceName)).map(ComponentInstance::getUniqueId)
593             .map(instanceId -> safeGetComponentInstanceEntity(instanceId, this.componentInstancesInputs)).findAny().orElse(emptyPropsList);
594     }
595
596     private <T> List<T> safeGetComponentInstanceEntity(String cmptInstanceId, Map<String, List<T>> instanceEntities) {
597         List<T> emptyPropsList = emptyList();
598         if (instanceEntities == null) {
599             return emptyPropsList;
600         }
601         List<T> cmptInstanceProps = instanceEntities.get(cmptInstanceId);
602         return cmptInstanceProps == null ? emptyPropsList : cmptInstanceProps;
603     }
604
605     public void setSpecificComponetTypeArtifacts(Map<String, ArtifactDefinition> specificComponentTypeArtifacts) {
606         // Implement where needed
607     }
608
609     public String fetchGenericTypeToscaNameFromConfig() {
610         return ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(this.assetType());
611     }
612
613     protected <A> Optional<A> getHeadOption(List<A> list) {
614         return list == null || list.isEmpty() ? Optional.empty() : Optional.ofNullable(list.get(0));
615     }
616
617     public String assetType() {
618         // Implement where needed
619         return this.getComponentType().getValue();
620     }
621
622     public boolean shouldGenerateInputs() {
623         // Implement where needed
624         return true;
625     }
626
627     public boolean deriveFromGeneric() {
628         // Implement where needed
629         return true;
630     }
631
632     public void setDerivedFromGenericInfo(Resource genericType) {
633         derivedFromGenericType = genericType.getToscaResourceName();
634         derivedFromGenericVersion = genericType.getVersion();
635     }
636
637     public boolean isTopologyTemplate() {
638         return ToscaElementTypeEnum.TOPOLOGY_TEMPLATE.getValue().equals(toscaType);
639     }
640
641     public PolicyDefinition getPolicyById(String id) {
642         return policies != null ? policies.get(id) : null;
643     }
644
645     public List<PolicyDefinition> resolvePoliciesList() {
646         if (policies == null) {
647             return emptyList();
648         }
649         return new ArrayList<>(policies.values());
650     }
651
652     public List<PolicyDefinition> resolvePoliciesContainingTarget(String targetId, PolicyTargetType targetType) {
653         Predicate<PolicyDefinition> containsTarget = policy -> policy.containsTarget(targetId, targetType);
654         return resolvePoliciesByPredicate(containsTarget);
655     }
656
657     private List<PolicyDefinition> resolvePoliciesByPredicate(Predicate<PolicyDefinition> policyPredicate) {
658         if (policies == null) {
659             return emptyList();
660         }
661         return policies.values().stream().filter(policyPredicate).collect(Collectors.toList());
662     }
663
664     public List<GroupDefinition> resolveGroupsByMember(String instanceId) {
665         if (groups == null) {
666             return emptyList();
667         }
668         return groups.stream().filter(group -> group.containsInstanceAsMember(instanceId)).collect(Collectors.toList());
669     }
670
671     public String getActualComponentType() {
672         return componentMetadataDefinition.getMetadataDataDefinition().getActualComponentType();
673     }
674
675     public Boolean isArchived() {
676         return componentMetadataDefinition.getMetadataDataDefinition().isArchived();
677     }
678
679     public void setArchived(Boolean archived) {
680         componentMetadataDefinition.getMetadataDataDefinition().setArchived(archived);
681     }
682
683     public Long getArchiveTime() {
684         return componentMetadataDefinition.getMetadataDataDefinition().getArchiveTime();
685     }
686
687     public void setArchiveTime(Long archiveTime) {
688         componentMetadataDefinition.getMetadataDataDefinition().setArchiveTime(archiveTime);
689     }
690
691     public Boolean isVspArchived() {
692         return componentMetadataDefinition.getMetadataDataDefinition().isVspArchived();
693     }
694
695     public void setVspArchived(Boolean vspArchived) {
696         componentMetadataDefinition.getMetadataDataDefinition().setVspArchived(vspArchived);
697     }
698
699     // supportability log method return map of component metadata teddy.h
700     public Map<String, String> getComponentMetadataForSupportLog() {
701         Map<String, String> componentMetadata = new HashMap<>();
702         componentMetadata.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_NAME, this.getName());
703         componentMetadata.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_VERSION, this.getVersion());
704         componentMetadata.put(ILogConfiguration.MDC_SUPPORTABLITY_COMPONENT_UUID, this.getUUID());
705         componentMetadata.put(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_UUID, this.getCsarUUID());
706         componentMetadata.put(ILogConfiguration.MDC_SUPPORTABLITY_CSAR_VERSION, this.getCsarVersion());
707         return componentMetadata;
708     }
709 }