6f120dc4ca305139b1b9ca3e1277042ce15de601
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / Resource.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 java.util.List;
24 import java.util.Map;
25 import java.util.Optional;
26 import java.util.stream.Collectors;
27 import lombok.EqualsAndHashCode;
28 import lombok.Getter;
29 import lombok.Setter;
30 import lombok.ToString;
31 import org.openecomp.sdc.be.config.ConfigurationManager;
32 import org.openecomp.sdc.be.dao.utils.MapUtil;
33 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
34 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
35 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
36 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
37
38 @Getter
39 @Setter
40 @EqualsAndHashCode(callSuper = true)
41 @ToString
42 public class Resource extends Component {
43
44     /**
45      * Please note that more than one "derivedFrom" resource is not currently supported by the app. The first list
46      * element is always addressed.
47      */
48     private List<String> derivedFrom;
49
50     /**
51      * The derivedList is a chain of derivedFrom. e.g. if resource C is derived from resource B that is derived from
52      * resource A - then A, B is the "DerivedList" of resource C
53      */
54     private List<String> derivedList;
55
56     private Map<String, String> derivedFromMapOfIdToName;
57
58     private List<AttributeDataDefinition> attributes;
59
60     private String toscaVersion;
61
62     public Resource() {
63         super(new ResourceMetadataDefinition());
64         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
65     }
66
67     public Resource(ComponentMetadataDefinition componentMetadataDefinition) {
68         super(componentMetadataDefinition);
69         if (this.getComponentMetadataDefinition().getMetadataDataDefinition() == null) {
70             this.getComponentMetadataDefinition().componentMetadataDataDefinition =
71                     new ResourceMetadataDataDefinition();
72         }
73         this.getComponentMetadataDefinition().getMetadataDataDefinition().setComponentType(ComponentTypeEnum.RESOURCE);
74     }
75
76     public Boolean isAbstract() {
77         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
78                 .isAbstract();
79     }
80
81     public void setAbstract(Boolean isAbstract) {
82         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
83                 .setAbstract(isAbstract);
84     }
85
86     public String getCost() {
87         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
88                 .getCost();
89     }
90
91     public void setCost(String cost) {
92         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition()).setCost(cost);
93     }
94
95     public String getLicenseType() {
96         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
97                 .getLicenseType();
98     }
99
100     public void setLicenseType(String licenseType) {
101         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
102                 .setLicenseType(licenseType);
103     }
104
105     public String getToscaResourceName() {
106         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
107                 .getToscaResourceName();
108     }
109
110     public void setToscaResourceName(String toscaResourceName) {
111         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
112                 .setToscaResourceName(toscaResourceName);
113     }
114
115     public ResourceTypeEnum getResourceType() {
116         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
117                 .getResourceType();
118     }
119
120     public void setResourceType(ResourceTypeEnum resourceType) {
121         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
122                 .setResourceType(resourceType);
123     }
124
125     public String getVendorName() {
126         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
127                 .getVendorName();
128     }
129
130     public void setVendorName(String vendorName) {
131         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
132                 .setVendorName(vendorName);
133     }
134
135     public String getVendorRelease() {
136         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
137                 .getVendorRelease();
138     }
139
140     public void setVendorRelease(String vendorRelease) {
141         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
142                 .setVendorRelease(vendorRelease);
143     }
144
145     public String getResourceVendorModelNumber() {
146         return ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
147                 .getResourceVendorModelNumber();
148     }
149
150     public void setResourceVendorModelNumber(String resourceVendorModelNumber) {
151         ((ResourceMetadataDataDefinition) getComponentMetadataDefinition().getMetadataDataDefinition())
152                 .setResourceVendorModelNumber(resourceVendorModelNumber);
153     }
154
155     @Override
156     public String fetchGenericTypeToscaNameFromConfig() {
157         return fetchToscaNameFromConfigBasedOnCategory().orElse(fetchToscaNameFromConfigBasedOnAssetType());
158     }
159
160     public String fetchToscaNameFromConfigBasedOnAssetType() {
161         String result = super.fetchGenericTypeToscaNameFromConfig();
162         if (null == result) {
163             result = ConfigurationManager.getConfigurationManager().getConfiguration().getGenericAssetNodeTypes()
164                     .get(ResourceTypeEnum.VFC.getValue());
165         }
166         return result;
167     }
168
169     private Optional<String> fetchToscaNameFromConfigBasedOnCategory() {
170         return getHeadOption(this.getCategories()).flatMap(category -> getHeadOption(category.getSubcategories()).map(
171                 subCategory -> fetchToscaNameFromConfigBasedOnCategory(category.getName(), subCategory.getName())));
172     }
173
174     private String fetchToscaNameFromConfigBasedOnCategory(final String resourceCategory,
175             final String resourceSubCategory) {
176         return Optional
177                 .ofNullable(ConfigurationManager.getConfigurationManager().getConfiguration().getResourceNodeTypes())
178                 .map(categoryNames -> categoryNames.get(resourceCategory))
179                 .map(subCategoryNames -> subCategoryNames.get(resourceSubCategory)).orElse(null);
180     }
181
182     @Override
183     public String assetType() {
184         return this.getResourceType().name();
185     }
186
187     @Override
188     public boolean shouldGenerateInputs() {
189         return !(this.getResourceType().isAtomicType());
190     }
191
192     @Override
193     public boolean deriveFromGeneric() {
194         return this.shouldGenerateInputs()
195                 || (derivedFrom != null && derivedFrom.contains(fetchGenericTypeToscaNameFromConfig()));
196     }
197
198     public Map<String, List<RequirementCapabilityRelDef>> groupRelationsFromCsarByInstanceName(Resource resource) {
199         List<RequirementCapabilityRelDef> componentInstanceRelationsFromCsar = resource.getComponentInstancesRelations()
200                 .stream().filter(r -> !r.isOriginUI()).collect(Collectors.toList());
201         Map<String, List<RequirementCapabilityRelDef>> relationsByInstanceId =
202                 MapUtil.groupListBy(componentInstanceRelationsFromCsar, RequirementCapabilityRelDef::getFromNode);
203         return MapUtil.convertMapKeys(relationsByInstanceId,
204                 instId -> getInstanceInvariantNameFromInstanceId(resource, instId));
205     }
206
207     private String getInstanceInvariantNameFromInstanceId(Resource resource, String instId) {
208         Optional<ComponentInstance> componentInstanceById = resource.getComponentInstanceById(instId);
209         return componentInstanceById.isPresent() ? componentInstanceById.get().getInvariantName() : null;
210     }
211
212 }