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