Sync Integ to Master
[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 com.fasterxml.jackson.annotation.JsonIgnore;
24 import org.openecomp.sdc.be.config.ConfigurationManager;
25 import org.openecomp.sdc.be.dao.utils.MapUtil;
26 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
27 import org.openecomp.sdc.be.model.category.CategoryDefinition;
28 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
29 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElementTypeEnum;
30 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
31
32 import java.util.stream.Collectors;
33 import static java.util.Collections.emptyList;
34 import org.openecomp.sdc.be.dao.utils.MapUtil;
35 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElementTypeEnum;
36 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
37
38 import java.io.Serializable;
39 import java.util.*;
40 import java.util.stream.Collectors;
41
42 public abstract class Component implements Serializable {
43
44         /**
45          * 
46          */
47         private static final long serialVersionUID = -6373756459967949120L;
48
49         private ComponentMetadataDefinition componentMetadataDefinition;
50         private Map<String, ArtifactDefinition> artifacts;
51         private Map<String, ArtifactDefinition> deploymentArtifacts;
52         private Map<String, ArtifactDefinition> toscaArtifacts;
53         private List<CategoryDefinition> categories;
54         private List<ComponentInstance> componentInstances;
55         private List<RequirementCapabilityRelDef> componentInstancesRelations;
56         private Map<String, List<ComponentInstanceInput>> componentInstancesInputs;
57         private Map<String, List<ComponentInstanceProperty>> componentInstancesProperties;
58         private Map<String, List<ComponentInstanceProperty>> componentInstancesAttributes;
59         private Map<String, List<CapabilityDefinition>> capabilities;
60         private Map<String, List<RequirementDefinition>> requirements;
61         private List<InputDefinition> inputs;
62         private List<GroupDefinition> groups;
63         private Map<String, PolicyDefinition> policies;
64         private String derivedFromGenericType;
65         private String derivedFromGenericVersion;
66         private String toscaType;
67         protected List<AdditionalInformationDefinition> additionalInformation;
68         
69         public String getDerivedFromGenericVersion() {
70                 return derivedFromGenericVersion;
71         }
72
73         public void setDerivedFromGenericVersion(String derivedFromGenericVersion) {
74                 this.derivedFromGenericVersion = derivedFromGenericVersion;
75         }
76
77         public String getDerivedFromGenericType() {
78                 return derivedFromGenericType;
79         }
80
81         public void setDerivedFromGenericType(String derivedFromGenericType) {
82                 this.derivedFromGenericType = derivedFromGenericType;
83         }
84         
85         public Component(ComponentMetadataDefinition componentMetadataDefinition) {
86                 this.componentMetadataDefinition = componentMetadataDefinition;
87         }
88
89         @JsonIgnore
90         public ComponentMetadataDefinition getComponentMetadataDefinition() {
91                 return componentMetadataDefinition;
92         }
93
94         public Map<String, ArtifactDefinition> getArtifacts() {
95                 return artifacts;
96         }
97
98         public void setArtifacts(Map<String, ArtifactDefinition> artifacts) {
99                 this.artifacts = artifacts;
100         }
101
102         public Map<String, ArtifactDefinition> getToscaArtifacts() {
103                 return toscaArtifacts;
104         }
105
106         public void setToscaArtifacts(Map<String, ArtifactDefinition> toscaArtifacts) {
107                 this.toscaArtifacts = toscaArtifacts;
108         }
109
110         public String getUniqueId() {
111                 return componentMetadataDefinition.getMetadataDataDefinition().getUniqueId();
112         }
113
114         public void setUniqueId(String uniqueId) {
115                 componentMetadataDefinition.getMetadataDataDefinition().setUniqueId(uniqueId);
116         }
117
118         public void setName(String name) {
119                 componentMetadataDefinition.getMetadataDataDefinition().setName(name);
120         }
121
122         public void setVersion(String version) {
123                 componentMetadataDefinition.getMetadataDataDefinition().setVersion(version);
124         }
125
126         public void setHighestVersion(Boolean isHighestVersion) {
127                 componentMetadataDefinition.getMetadataDataDefinition().setHighestVersion(isHighestVersion);
128         }
129
130         public void setCreationDate(Long creationDate) {
131                 componentMetadataDefinition.getMetadataDataDefinition().setCreationDate(creationDate);
132         }
133
134         public void setLastUpdateDate(Long lastUpdateDate) {
135                 componentMetadataDefinition.getMetadataDataDefinition().setLastUpdateDate(lastUpdateDate);
136         }
137
138         public void setDescription(String description) {
139                 componentMetadataDefinition.getMetadataDataDefinition().setDescription(description);
140         }
141
142         public void setState(LifecycleStateEnum state) {
143                 componentMetadataDefinition.getMetadataDataDefinition().setState(state.name());
144         }
145
146         public void setTags(List<String> tags) {
147                 componentMetadataDefinition.getMetadataDataDefinition().setTags(tags);
148         }
149
150         public void setConformanceLevel(String conformanceLevel) {
151                 componentMetadataDefinition.getMetadataDataDefinition().setConformanceLevel(conformanceLevel);
152         }
153         
154         public void setIcon(String icon) {
155                 componentMetadataDefinition.getMetadataDataDefinition().setIcon(icon);
156         }
157
158         public void setContactId(String contactId) {
159                 componentMetadataDefinition.getMetadataDataDefinition().setContactId(contactId);
160         }
161
162         public String getCreatorUserId() {
163                 return this.componentMetadataDefinition.getMetadataDataDefinition().getCreatorUserId();
164         }
165
166         public void setCreatorUserId(String creatorUserId) {
167                 this.componentMetadataDefinition.getMetadataDataDefinition().setCreatorUserId(creatorUserId);
168         }
169
170         public String getCreatorFullName() {
171                 return this.componentMetadataDefinition.getMetadataDataDefinition().getCreatorFullName();
172         }
173
174         public void setCreatorFullName(String creatorFullName) {
175                 this.componentMetadataDefinition.getMetadataDataDefinition().setCreatorFullName(creatorFullName);
176         }
177
178         public String getLastUpdaterUserId() {
179                 return this.componentMetadataDefinition.getMetadataDataDefinition().getLastUpdaterUserId();
180         }
181
182         public void setLastUpdaterUserId(String lastUpdaterUserId) {
183                 this.componentMetadataDefinition.getMetadataDataDefinition().setLastUpdaterUserId(lastUpdaterUserId);
184         }
185
186         public String getLastUpdaterFullName() {
187                 return this.componentMetadataDefinition.getMetadataDataDefinition().getLastUpdaterFullName();
188         }
189
190         public void setLastUpdaterFullName(String lastUpdaterFullName) {
191                 this.componentMetadataDefinition.getMetadataDataDefinition().setLastUpdaterFullName(lastUpdaterFullName);
192         }
193
194         public String getName() {
195                 return componentMetadataDefinition.getMetadataDataDefinition().getName();
196         }
197
198         public String getVersion() {
199                 return componentMetadataDefinition.getMetadataDataDefinition().getVersion();
200         }
201
202         public Boolean isHighestVersion() {
203                 return componentMetadataDefinition.getMetadataDataDefinition().isHighestVersion();
204         }
205
206         public Long getCreationDate() {
207                 return componentMetadataDefinition.getMetadataDataDefinition().getCreationDate();
208         }
209
210         public Long getLastUpdateDate() {
211                 return componentMetadataDefinition.getMetadataDataDefinition().getLastUpdateDate();
212         }
213
214         public String getDescription() {
215                 return componentMetadataDefinition.getMetadataDataDefinition().getDescription();
216         }
217
218         public LifecycleStateEnum getLifecycleState() {
219                 if (componentMetadataDefinition.getMetadataDataDefinition().getState() != null) {
220                         return LifecycleStateEnum.valueOf(componentMetadataDefinition.getMetadataDataDefinition().getState());
221                 } else {
222                         return null;
223                 }
224         }
225
226         public List<String> getTags() {
227                 return componentMetadataDefinition.getMetadataDataDefinition().getTags();
228         }
229
230         public String getConformanceLevel() {
231                 return componentMetadataDefinition.getMetadataDataDefinition().getConformanceLevel();
232         }
233         
234         public String getIcon() {
235                 return componentMetadataDefinition.getMetadataDataDefinition().getIcon();
236         }
237
238         public String getContactId() {
239                 return componentMetadataDefinition.getMetadataDataDefinition().getContactId();
240         }
241
242         public List<InputDefinition> getInputs() {
243                 return inputs;
244         }
245
246         public void setInputs(List<InputDefinition> inputs) {
247                 this.inputs = inputs;
248         }
249
250         public void setLifecycleState(LifecycleStateEnum state) {
251                 if (state != null) {
252                         this.componentMetadataDefinition.getMetadataDataDefinition().setState(state.name());
253                 }
254         }
255
256         public String getUUID() {
257                 return componentMetadataDefinition.getMetadataDataDefinition().getUUID();
258         }
259
260         public void setUUID(String uUID) {
261                 componentMetadataDefinition.getMetadataDataDefinition().setUUID(uUID);
262         }
263
264         public void setSystemName(String systemName) {
265                 componentMetadataDefinition.getMetadataDataDefinition().setSystemName(systemName);
266         }
267
268         public String getSystemName() {
269                 return componentMetadataDefinition.getMetadataDataDefinition().getSystemName();
270         }
271
272         public void setAllVersions(Map<String, String> allVersions) {
273                 componentMetadataDefinition.getMetadataDataDefinition().setAllVersions(allVersions);
274         }
275
276         public Map<String, String> getAllVersions() {
277                 return componentMetadataDefinition.getMetadataDataDefinition().getAllVersions();
278         }
279
280         public Map<String, ArtifactDefinition> getDeploymentArtifacts() {
281                 return deploymentArtifacts;
282         }
283
284         public void setDeploymentArtifacts(Map<String, ArtifactDefinition> deploymentArtifacts) {
285                 this.deploymentArtifacts = deploymentArtifacts;
286         }
287
288         public Map<String, ArtifactDefinition> getAllArtifacts() {
289                 HashMap<String, ArtifactDefinition> allArtifacts = new HashMap<>();
290                 allArtifacts.putAll(Optional.ofNullable(this.deploymentArtifacts).orElse(Collections.emptyMap()));
291                 allArtifacts.putAll(Optional.ofNullable(this.artifacts).orElse(Collections.emptyMap()));
292                 return allArtifacts;
293         }
294
295         public List<CategoryDefinition> getCategories() {
296                 return categories;
297         }
298
299         public void setCategories(List<CategoryDefinition> categories) {
300                 this.categories = categories;
301         }
302
303         public String getNormalizedName() {
304                 return componentMetadataDefinition.getMetadataDataDefinition().getNormalizedName();
305         }
306
307         public void setNormalizedName(String normalizedName) {
308                 componentMetadataDefinition.getMetadataDataDefinition().setNormalizedName(normalizedName);
309         }
310
311         public ComponentTypeEnum getComponentType() {
312                 return this.componentMetadataDefinition.getMetadataDataDefinition().getComponentType();
313         }
314
315         public void setComponentType(ComponentTypeEnum componentType) {
316                 this.componentMetadataDefinition.getMetadataDataDefinition().setComponentType(componentType);
317         }
318
319         public Map<String, List<CapabilityDefinition>> getCapabilities() {
320                 return capabilities;
321         }
322
323         public void setCapabilities(Map<String, List<CapabilityDefinition>> capabilities) {
324                 this.capabilities = capabilities;
325         }
326
327         public Map<String, List<RequirementDefinition>> getRequirements() {
328                 return requirements;
329         }
330
331         public void setRequirements(Map<String, List<RequirementDefinition>> requirements) {
332                 this.requirements = requirements;
333         }
334
335         public List<ComponentInstance> getComponentInstances() {
336                 return componentInstances;
337         }
338
339         public Optional<ComponentInstance> fetchInstanceById(String instanceId) {
340                 return Optional.ofNullable(MapUtil.toMap(componentInstances, ComponentInstance::getUniqueId).get(instanceId));
341         }
342
343         @SuppressWarnings("unchecked")
344         public Map<String, ArtifactDefinition> safeGetComponentInstanceDeploymentArtifacts(String componentInstanceId) {
345                 Optional<ComponentInstance> componentInstanceById = getComponentInstanceById(componentInstanceId);
346                 Map<String, ArtifactDefinition> instanceDeploymentArtifacts = componentInstanceById.get().safeGetDeploymentArtifacts();
347                 return instanceDeploymentArtifacts != null ? instanceDeploymentArtifacts : Collections.emptyMap();
348         }
349
350         @SuppressWarnings("unchecked")
351         public Map<String, ArtifactDefinition> safeGetComponentInstanceInformationalArtifacts(String componentInstanceId) {
352                 Optional<ComponentInstance> componentInstanceById = getComponentInstanceById(componentInstanceId);
353                 Map<String, ArtifactDefinition> instanceInformationalArtifacts = componentInstanceById.get().safeGetInformationalArtifacts();
354                 return instanceInformationalArtifacts != null ? instanceInformationalArtifacts : Collections.emptyMap();
355         }
356
357         public List<ArtifactDefinition> safeGetComponentInstanceHeatArtifacts(String componentInstanceId) {
358                 Optional<ComponentInstance> componentInstanceById = getComponentInstanceById(componentInstanceId);
359                 List<ArtifactDefinition> instanceHeatEnvArtifacts = Optional.ofNullable(componentInstanceById.get().safeGetDeploymentArtifacts().values()).orElse(new ArrayList<ArtifactDefinition>())
360                                 .stream()
361                                 .filter(artifact -> artifact.getArtifactType() != null && artifact.getArtifactType().equals(ArtifactTypeEnum.HEAT_ENV.name()))
362                                 .collect(Collectors.toList());
363                 return instanceHeatEnvArtifacts == null ? emptyList() : instanceHeatEnvArtifacts;
364         }
365
366         public void setComponentInstances(List<ComponentInstance> resourceInstances) {
367                 this.componentInstances = resourceInstances;
368         }
369
370         public List<RequirementCapabilityRelDef> getComponentInstancesRelations() {
371                 return componentInstancesRelations;
372         }
373
374         public void setComponentInstancesRelations(List<RequirementCapabilityRelDef> resourceInstancesRelations) {
375                 this.componentInstancesRelations = resourceInstancesRelations;
376         }
377
378         public Map<String, List<ComponentInstanceProperty>> getComponentInstancesProperties() {
379                 return componentInstancesProperties;
380         }
381
382         public List<ComponentInstanceProperty> safeGetComponentInstanceProperties(String cmptInstacneId) {
383                 return this.safeGetComponentInstanceEntity(cmptInstacneId, this.componentInstancesProperties);
384         }
385
386         public List<ComponentInstanceInput> safeGetComponentInstanceInput(String comptInstanceId) {
387                 return this.safeGetComponentInstanceEntity(comptInstanceId, this.componentInstancesInputs);
388         }
389
390         public void setComponentInstancesProperties(
391                         Map<String, List<ComponentInstanceProperty>> resourceInstancesProperties) {
392                 this.componentInstancesProperties = resourceInstancesProperties;
393         }
394
395         public Boolean getIsDeleted() {
396                 return componentMetadataDefinition.getMetadataDataDefinition().isDeleted();
397         }
398
399         public void setIsDeleted(Boolean isDeleted) {
400                 componentMetadataDefinition.getMetadataDataDefinition().setIsDeleted(isDeleted);
401         }
402
403         public String getProjectCode() {
404                 return componentMetadataDefinition.getMetadataDataDefinition().getProjectCode();
405         }
406
407         public void setProjectCode(String projectCode) {
408                 componentMetadataDefinition.getMetadataDataDefinition().setProjectCode(projectCode);
409         }
410
411         public String getCsarUUID() {
412                 return componentMetadataDefinition.getMetadataDataDefinition().getCsarUUID();
413         }
414
415         public void setCsarUUID(String csarUUID) {
416                 componentMetadataDefinition.getMetadataDataDefinition().setCsarUUID(csarUUID);
417         }
418
419         public String getCsarVersion() {
420                 return componentMetadataDefinition.getMetadataDataDefinition().getCsarVersion();
421         }
422
423         public void setCsarVersion(String csarVersion) {
424                 componentMetadataDefinition.getMetadataDataDefinition().setCsarVersion(csarVersion);
425         }
426
427         public String getImportedToscaChecksum() {
428                 return componentMetadataDefinition.getMetadataDataDefinition().getImportedToscaChecksum();
429         }
430
431         public void setImportedToscaChecksum(String importedToscaChecksum) {
432                 componentMetadataDefinition.getMetadataDataDefinition().setImportedToscaChecksum(importedToscaChecksum);
433         }
434
435         public String getInvariantUUID() {
436                 return componentMetadataDefinition.getMetadataDataDefinition().getInvariantUUID();
437         }
438
439         public void setInvariantUUID(String invariantUUID) {
440                 componentMetadataDefinition.getMetadataDataDefinition().setInvariantUUID(invariantUUID);
441         }
442
443         public Optional<ComponentInstance> getComponentInstanceById(String id) {
444                 if (componentInstances == null) {
445                         return Optional.empty();
446                 }
447                 return componentInstances.stream().filter(instance -> id.equals(instance.getUniqueId())).findFirst();
448         }
449
450         public List<GroupDefinition> getGroups() {
451                 return groups;
452         }
453         public Optional<GroupDefinition> getGroupById(String id){
454                 return groups.stream().filter(g -> g.getUniqueId().equals(id)).findAny();
455
456         }
457
458         public void setGroups(List<GroupDefinition> groups) {
459                 this.groups = groups;
460         }
461         
462         public Map<String, PolicyDefinition> getPolicies() {
463                 return policies;
464         }
465
466         public void setPolicies(Map<String, PolicyDefinition> policies) {
467                 this.policies = policies;
468         }
469
470         @Override
471         public int hashCode() {
472                 final int prime = 31;
473                 int result = 1;
474                 result = prime * result + ((artifacts == null) ? 0 : artifacts.hashCode());
475                 result = prime * result + ((categories == null) ? 0 : categories.hashCode());
476                 result = prime * result + ((componentMetadataDefinition == null) ? 0 : componentMetadataDefinition.hashCode());
477 //              result = prime * result + ((creatorUserId == null) ? 0 : creatorUserId.hashCode());
478 //              result = prime * result + ((creatorFullName == null) ? 0 : creatorFullName.hashCode());
479                 result = prime * result + ((deploymentArtifacts == null) ? 0 : deploymentArtifacts.hashCode());
480 //              result = prime * result + ((lastUpdaterUserId == null) ? 0 : lastUpdaterUserId.hashCode());
481 //              result = prime * result + ((lastUpdaterFullName == null) ? 0 : lastUpdaterFullName.hashCode());
482                 result = prime * result + ((capabilities == null) ? 0 : capabilities.hashCode());
483                 result = prime * result + ((requirements == null) ? 0 : requirements.hashCode());
484                 result = prime * result + ((componentInstances == null) ? 0 : componentInstances.hashCode());
485                 result = prime * result
486                                 + ((componentInstancesProperties == null) ? 0 : componentInstancesProperties.hashCode());
487                 result = prime * result
488                                 + ((componentInstancesAttributes == null) ? 0 : componentInstancesAttributes.hashCode());
489                 result = prime * result + ((componentInstancesInputs == null) ? 0 : componentInstancesInputs.hashCode());
490                 result = prime * result + ((componentInstancesRelations == null) ? 0 : componentInstancesRelations.hashCode());
491                 result = prime * result + ((groups == null) ? 0 : groups.hashCode());
492                 result = prime * result + ((policies == null) ? 0 : policies.hashCode());
493                 result = prime * result + ((derivedFromGenericType == null) ? 0 : derivedFromGenericType.hashCode());
494                 result = prime * result + ((derivedFromGenericVersion == null) ? 0 : derivedFromGenericVersion.hashCode());
495                 return result;
496         }
497
498         @Override
499         public boolean equals(Object obj) {
500                 if (this == obj)
501                         return true;
502                 if (obj == null)
503                         return false;
504                 if (getClass() != obj.getClass())
505                         return false;
506                 Component other = (Component) obj;
507                 if (artifacts == null) {
508                         if (other.artifacts != null)
509                                 return false;
510                 } else if (!artifacts.equals(other.artifacts))
511                         return false;
512                 if (categories == null) {
513                         if (other.categories != null)
514                                 return false;
515                 } else if (!categories.equals(other.categories))
516                         return false;
517                 if (componentMetadataDefinition == null) {
518                         if (other.componentMetadataDefinition != null)
519                                 return false;
520                 } else if (!componentMetadataDefinition.equals(other.componentMetadataDefinition))
521                         return false;
522 //              if (creatorUserId == null) {
523 //                      if (other.creatorUserId != null)
524 //                              return false;
525 //              } else if (!creatorUserId.equals(other.creatorUserId))
526 //                      return false;
527 //              if (creatorFullName == null) {
528 //                      if (other.creatorFullName != null)
529 //                              return false;
530 //              } else if (!creatorFullName.equals(other.creatorFullName))
531 //                      return false;
532                 if (deploymentArtifacts == null) {
533                         if (other.deploymentArtifacts != null)
534                                 return false;
535                 } else if (!deploymentArtifacts.equals(other.deploymentArtifacts))
536                         return false;
537 //              if (lastUpdaterUserId == null) {
538 //                      if (other.lastUpdaterUserId != null)
539 //                              return false;
540 //              } else if (!lastUpdaterUserId.equals(other.lastUpdaterUserId))
541 //                      return false;
542 //              if (lastUpdaterFullName == null) {
543 //                      if (other.lastUpdaterFullName != null)
544 //                              return false;
545 //              } else if (!lastUpdaterFullName.equals(other.lastUpdaterFullName))
546 //                      return false;
547                 if (componentInstances == null) {
548                         if (other.componentInstances != null)
549                                 return false;
550                 } else if (!componentInstances.equals(other.componentInstances))
551                         return false;
552                 if (componentInstancesProperties == null) {
553                         if (other.componentInstancesProperties != null)
554                                 return false;
555                 } else if (!componentInstancesProperties.equals(other.componentInstancesProperties))
556                         return false;
557
558                 if (!Objects.equals(componentInstancesAttributes, other.componentInstancesAttributes)) {
559                         return false;
560                 }
561                 if (!Objects.equals(componentInstancesInputs, other.componentInstancesInputs)) {
562                         return false;
563                 }
564                 if (componentInstancesRelations == null) {
565                         if (other.componentInstancesRelations != null)
566                                 return false;
567                 } else if (!componentInstancesRelations.equals(other.componentInstancesRelations))
568                         return false;
569                 if (requirements == null) {
570                         if (other.requirements != null)
571                                 return false;
572                 } else if (!requirements.equals(other.requirements))
573                         return false;
574                 if (capabilities == null) {
575                         if (other.capabilities != null)
576                                 return false;
577                 } else if (!capabilities.equals(other.capabilities))
578                         return false;
579                 if (groups == null) {
580                         if (other.groups != null)
581                                 return false;
582                 } else if (!groups.equals(other.groups))
583                         return false;
584                 if (policies == null) {
585                         if (other.policies != null)
586                                 return false;
587                 } else if (!policies.equals(other.policies))
588                         return false;
589                 if (derivedFromGenericType == null) {
590                         if (other.derivedFromGenericType != null)
591                                 return false;
592                 } else if (!derivedFromGenericType.equals(other.derivedFromGenericType))
593                         return false;
594                 if (derivedFromGenericVersion == null) {
595                         if (other.derivedFromGenericVersion != null)
596                                 return false;
597                 } else if (!derivedFromGenericVersion.equals(other.derivedFromGenericVersion))
598                         return false;
599                 return true;
600         }
601
602         public void addCategory(String category, String subCategory) {
603                 if (category != null || subCategory != null) {
604                         if (categories == null) {
605                                 categories = new ArrayList<>();
606                         }
607                         CategoryDefinition selectedCategory = null;
608                         for (CategoryDefinition categoryDef : categories) {
609                                 if (categoryDef.getName().equals(category)) {
610                                         selectedCategory = categoryDef;
611                                 }
612                         }
613                         if (selectedCategory == null) {
614                                 selectedCategory = new CategoryDefinition();
615                                 selectedCategory.setName(category);
616                                 categories.add(selectedCategory);
617                         }
618                         List<SubCategoryDefinition> subcategories = selectedCategory.getSubcategories();
619                         if (subcategories == null) {
620                                 subcategories = new ArrayList<>();
621                                 selectedCategory.setSubcategories(subcategories);
622                         }
623                         SubCategoryDefinition selectedSubcategory = null;
624                         for (SubCategoryDefinition subcategory : subcategories) {
625                                 if (subcategory.getName().equals(subCategory)) {
626                                         selectedSubcategory = subcategory;
627                                 }
628                         }
629                         if (selectedSubcategory == null) {
630                                 selectedSubcategory = new SubCategoryDefinition();
631                                 selectedSubcategory.setName(subCategory);
632                                 subcategories.add(selectedSubcategory);
633                         }
634                 }
635         }
636
637         public void addCategory(CategoryDefinition category) {
638                 addCategory(category, null);
639         }
640
641         public void addCategory(CategoryDefinition category, SubCategoryDefinition subCategory) {
642                 if (categories == null) {
643                         categories = new ArrayList<>();
644                 }
645                 boolean foundCat = false;
646                 for (CategoryDefinition cat : categories) {
647                         if (cat.getName().equals(category.getName())) {
648                                 foundCat = true;
649                                 if (subCategory != null) {
650                                         List<SubCategoryDefinition> subcategories = cat.getSubcategories();
651                                         if (subcategories == null) {
652                                                 subcategories = new ArrayList<>();
653                                                 cat.setSubcategories(subcategories);
654                                         }
655                                         for (SubCategoryDefinition subcat : subcategories) {
656                                                 boolean foundSub = false;
657                                                 if (subcat.getName().equals(subCategory.getName())) {
658                                                         foundSub = true;
659                                                 }
660                                                 if (foundSub == false) {
661                                                         subcategories.add(subCategory);
662                                                         break;
663                                                 }
664                                         }
665                                 }
666                         }
667                 }
668                 if (foundCat == false) {
669                         if (subCategory != null) {
670                                 category.addSubCategory(subCategory);
671                         }
672                         categories.add(category);
673                 }
674         }
675
676         public Map<String, List<ComponentInstanceProperty>> getComponentInstancesAttributes() {
677                 return componentInstancesAttributes;
678         }
679
680         public void setComponentInstancesAttributes(
681                         Map<String, List<ComponentInstanceProperty>> componentInstancesAttributes) {
682                 this.componentInstancesAttributes = componentInstancesAttributes;
683         }
684
685         public Map<String, List<ComponentInstanceInput>> getComponentInstancesInputs() {
686                 return componentInstancesInputs;
687         }
688
689         public List<ComponentInstanceInput> safeGetComponentInstanceInputsByName(String cmptInstanceName) {
690                 List<ComponentInstanceInput> emptyPropsList = emptyList();
691                 if (this.componentInstancesInputs == null) {
692                         return emptyPropsList;
693                 }
694                 Optional<List<ComponentInstanceInput>> instanceInputsByName = this.componentInstances.stream()
695                                 .filter(ci -> ci.getName().equals(cmptInstanceName))
696                                 .map(ComponentInstance::getUniqueId)
697                                 .map(instanceId -> safeGetComponentInstanceEntity(instanceId, this.componentInstancesInputs))
698                                 .findAny();
699                 return instanceInputsByName.orElse(emptyPropsList);
700         }
701
702         private <T> List<T> safeGetComponentInstanceEntity(String cmptInstanceId, Map<String, List<T>> instanceEntities) {
703                 List<T> emptyPropsList = emptyList();
704                 if (instanceEntities == null) {
705                         return emptyPropsList;
706                 }
707                 List<T> cmptInstanceProps = instanceEntities.get(cmptInstanceId);
708                 return cmptInstanceProps == null ? emptyPropsList : cmptInstanceProps;
709         }
710
711
712
713         public void setComponentInstancesInputs(Map<String, List<ComponentInstanceInput>> componentInstancesInputs) {
714                 this.componentInstancesInputs = componentInstancesInputs;
715         }
716
717         public void setSpecificComponetTypeArtifacts(Map<String, ArtifactDefinition> specificComponentTypeArtifacts) {
718                 // Implement where needed
719         }
720         
721         public void setMetadataDefinition(ComponentMetadataDefinition metadataDefinition) {
722                 this.componentMetadataDefinition = metadataDefinition;
723         }
724         
725         public String fetchGenericTypeToscaNameFromConfig(){
726                 // Implement where needed
727                 return ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes().get(this.assetType());
728         }
729         
730         public String assetType(){
731                 // Implement where needed
732                 return this.getComponentType().getValue();
733         }
734         
735         public boolean shouldGenerateInputs(){
736                 // Implement where needed
737                 return true;
738         }
739         
740         public boolean deriveFromGeneric(){
741                 // Implement where needed
742                 return true;
743         }
744         
745         public void setDerivedFromGenericInfo(Resource genericType){
746                 derivedFromGenericType = genericType.getToscaResourceName();
747                 derivedFromGenericVersion = genericType.getVersion();
748         }
749
750         public boolean isTopologyTemplate() {
751                 return ToscaElementTypeEnum.TopologyTemplate.getValue().equals(toscaType);
752         }
753
754         public String getToscaType() {
755                 return toscaType;
756         }
757
758         public void setToscaType(String toscaType) {
759                 this.toscaType = toscaType;
760         }
761
762         public List<AdditionalInformationDefinition> getAdditionalInformation() {
763                 return additionalInformation;
764         }
765
766         public void setAdditionalInformation(List<AdditionalInformationDefinition> additionalInformation) {
767                 this.additionalInformation = additionalInformation;
768         }
769
770         public PolicyDefinition getPolicyById(String id) {
771                 return policies != null ? policies.get(id) : null;
772         }
773
774         public List<PolicyDefinition> resolvePoliciesList() {
775                 if (policies == null) {
776                         return emptyList();
777                 }
778                 return new ArrayList<>(policies.values());
779         }
780
781         public List<PolicyDefinition> resolvePoliciesByComponentInstanceTarget(String instanceId) {
782                 if (policies == null) {
783                         return emptyList();
784                 }
785                 return policies.values().stream()
786                                 .filter(policy -> policy.containsCmptInstanceAsTarget(instanceId))
787                 .collect(Collectors.toList());
788         }
789
790         public List<GroupDefinition> resolveGroupsByMember(String instanceId) {
791                 if (groups == null) {
792                         return emptyList();
793                 }
794                 return groups.stream()
795                                      .filter(group -> group.containsInstanceAsMember(instanceId))
796                                      .collect(Collectors.toList());
797         }
798
799 }