2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.model.operations.impl;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
27 import java.util.function.Function;
28 import java.util.stream.Collectors;
30 import org.apache.commons.lang3.tuple.ImmutablePair;
31 import org.apache.tinkerpop.gremlin.structure.Edge;
32 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
33 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
34 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
35 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
36 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
37 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
38 import org.openecomp.sdc.be.model.CapabilityDefinition;
39 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
40 import org.openecomp.sdc.be.model.DataTypeDefinition;
41 import org.openecomp.sdc.be.model.PropertyDefinition;
42 import org.openecomp.sdc.be.model.operations.api.ICapabilityInstanceOperation;
43 import org.openecomp.sdc.be.resources.data.CapabilityData;
44 import org.openecomp.sdc.be.resources.data.CapabilityInstData;
45 import org.openecomp.sdc.be.resources.data.ComponentInstanceData;
46 import org.openecomp.sdc.be.resources.data.PropertyData;
47 import org.openecomp.sdc.be.resources.data.PropertyValueData;
48 import org.openecomp.sdc.be.resources.data.UniqueIdData;
49 import org.openecomp.sdc.common.datastructure.Wrapper;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.stereotype.Component;
55 import com.thinkaurelius.titan.core.TitanVertex;
57 import fj.data.Either;
60 * public class CapabilityInstanceOperation provides methods for CRUD operations for CapabilityInstance on component instance level
65 @Component("capability-instance-operation")
66 public class CapabilityInstanceOperation extends AbstractOperation implements ICapabilityInstanceOperation {
68 private static Logger log = LoggerFactory.getLogger(CapabilityOperation.class.getName());
71 private PropertyOperation propertyOperation;
74 private CapabilityOperation capabilityOperation;
77 * String constants for logger
79 private String statusIs = ". status is ";
80 private String dot = ".";
81 private String onGraph = " on graph ";
82 private String ofRI = " of resource instance ";
83 private String toCapability = " to capability ";
84 private String toCI = " to capability instance ";
85 private String toProperty = " to property ";
86 private String forRI = " for resource instance ";
87 private String failedCreateCI = "Failed to create capability instance of capability ";
88 private String failedAddProperties = "Failed to add properties to capability instance ";
89 private String ofCI = " of component instance ";
90 private String failedDeletePropertyValues = "Failed to delete property values of capability instance ";
91 private String toValue = " to property value ";
92 private String fromRI = " from resource instance ";
95 * create capability instance of capability with property values for resource instance
97 * @param resourceInstanceId
99 * @param propertyValues
100 * @param validateCapabilityInstExistence
101 * @param capabilityName
105 public Either<Map<CapabilityInstData, List<PropertyValueData>>, TitanOperationStatus> createCapabilityInstanceOfCapabilityWithPropertyValuesForResourceInstance(String resourceInstanceId, String capabilityId, String capabilityName,
106 List<ComponentInstanceProperty> propertyValues, boolean validateCapabilityInstExistence) {
107 Wrapper<TitanOperationStatus> errorWrapper = new Wrapper<>();
108 Wrapper<CapabilityData> overrideCapabilityDataWrapper = new Wrapper<>();
109 Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper = new Wrapper<>();
110 Either<CapabilityInstData, TitanOperationStatus> createCapabilityRes = null;
111 CapabilityInstData createdCapabilityInstance = null;
113 Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper = new Wrapper<>();
114 Either<ImmutablePair<CapabilityData, GraphEdge>, TitanOperationStatus> getCapabilityRes = null;
115 Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes = null;
116 Either<List<PropertyValueData>, TitanOperationStatus> addPropertyValuesRes = null;
117 Wrapper<String> createdCapabilityInstanceIdWrapper = new Wrapper<>();
118 if (validateCapabilityInstExistence) {
119 validateCapabilityInstanceExistence(resourceInstanceId, capabilityId, errorWrapper);
121 if (errorWrapper.isEmpty()) {
122 getCapabilityRes = getCapabilitiesOfResourceInstance(resourceInstanceId, capabilityId, capabilityName, errorWrapper);
124 if (errorWrapper.isEmpty()) {
125 getCapabilityDefinitionRes = getCapabiityDefinition(resourceInstanceId, capabilityId, errorWrapper, overrideCapabilityDataWrapper, getCapabilityRes);
127 if (errorWrapper.isEmpty()) {
128 createCapabilityRes = createCapabilityInstanceOnGraph(resourceInstanceId, capabilityId, errorWrapper, overrideCapabilityDataWrapper, overrideCapabilityDefinitionWrapper, getCapabilityDefinitionRes);
130 if (errorWrapper.isEmpty() && overrideCapabilityDefinitionWrapper.getInnerElement().getProperties() != null) {
131 createdCapabilityInstance = validateCapabilityInstanceProperties(resourceInstanceId, propertyValues, errorWrapper, overrideCapabilityDefinitionWrapper, createCapabilityRes, defaultPropertiesWrapper, createdCapabilityInstanceIdWrapper);
133 if (errorWrapper.isEmpty()) {
134 addPropertyValuesRes = addPropertyValueToCapabilityInstance(resourceInstanceId, propertyValues, errorWrapper, createCapabilityRes, defaultPropertiesWrapper, createdCapabilityInstanceIdWrapper);
136 Either<Map<CapabilityInstData, List<PropertyValueData>>, TitanOperationStatus> result;
137 if (errorWrapper.isEmpty()) {
138 Map<CapabilityInstData, List<PropertyValueData>> resultMap = new HashMap<>();
139 resultMap.put(createdCapabilityInstance, addPropertyValuesRes.left().value());
140 result = Either.left(resultMap);
142 result = Either.right(errorWrapper.getInnerElement());
148 public TitanOperationStatus createCapabilityInstanceOfCapabilityWithPropertyValuesForResourceInstance(TitanVertex resourceInstanceVertex, String resourceInstanceId, String capabilityId, String capabilityName,
149 List<ComponentInstanceProperty> propertyValues, boolean validateCapabilityInstExistence) {
150 Wrapper<TitanOperationStatus> errorWrapper = new Wrapper<>();
151 Wrapper<TitanVertex> overrideCapabilityDataWrapper = new Wrapper<>();
152 Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper = new Wrapper<>();
153 Either<TitanVertex, TitanOperationStatus> createCapabilityRes = null;
154 TitanVertex createdCapabilityInstance = null;
156 Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper = new Wrapper<>();
157 Either<ImmutablePair<TitanVertex, Edge>, TitanOperationStatus> getCapabilityRes = null;
158 Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes = null;
159 TitanOperationStatus addPropertyValuesRes = null;
160 Wrapper<String> createdCapabilityInstanceIdWrapper = new Wrapper<>();
161 if (validateCapabilityInstExistence) {
162 validateCapabilityInstanceExistence(resourceInstanceVertex, resourceInstanceId, capabilityId, errorWrapper);
164 if (errorWrapper.isEmpty()) {
165 getCapabilityRes = getCapabilitiesOfResourceInstance(resourceInstanceVertex, resourceInstanceId, capabilityId, capabilityName, errorWrapper);
167 if (errorWrapper.isEmpty()) {
168 getCapabilityDefinitionRes = getCapabiityDefinitionByVertex(resourceInstanceId, capabilityId, errorWrapper, overrideCapabilityDataWrapper, getCapabilityRes);
170 if (errorWrapper.isEmpty()) {
171 createCapabilityRes = createCapabilityInstanceOnGraphByVertex(resourceInstanceVertex, resourceInstanceId, capabilityId, errorWrapper, overrideCapabilityDataWrapper, overrideCapabilityDefinitionWrapper, getCapabilityDefinitionRes);
173 if (errorWrapper.isEmpty() && overrideCapabilityDefinitionWrapper.getInnerElement().getProperties() != null) {
174 createdCapabilityInstance = validateCapabilityInstancePropertiesByVertex(resourceInstanceId, propertyValues, errorWrapper, overrideCapabilityDefinitionWrapper, createCapabilityRes.left().value(), defaultPropertiesWrapper,
175 createdCapabilityInstanceIdWrapper);
177 if (errorWrapper.isEmpty()) {
178 addPropertyValuesRes = addPropertyValueToCapabilityInstanceByVertex(resourceInstanceId, propertyValues, errorWrapper, createCapabilityRes, defaultPropertiesWrapper, createdCapabilityInstanceIdWrapper);
181 return addPropertyValuesRes;
184 private Either<List<PropertyValueData>, TitanOperationStatus> addPropertyValueToCapabilityInstance(String resourceInstanceId, List<ComponentInstanceProperty> propertyValues, Wrapper<TitanOperationStatus> errorWrapper,
185 Either<CapabilityInstData, TitanOperationStatus> createCapabilityRes, Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper, Wrapper<String> createdCapabilityInstanceIdWrapper) {
186 Either<List<PropertyValueData>, TitanOperationStatus> addPropertyValuesRes;
187 log.debug("Before adding property values to capability instance {} dot", createdCapabilityInstanceIdWrapper.getInnerElement());
188 addPropertyValuesRes = addPropertyValuesToCapabilityInstance(createCapabilityRes.left().value(), propertyValues, defaultPropertiesWrapper.getInnerElement());
189 if (addPropertyValuesRes.isRight()) {
190 errorWrapper.setInnerElement(addPropertyValuesRes.right().value());
191 log.debug("failedAddProperties {} ofRI {} statusIs {} dot", createdCapabilityInstanceIdWrapper.getInnerElement(), resourceInstanceId, errorWrapper.getInnerElement());
193 log.debug("After adding property values to capability instance {} status is {}.", createdCapabilityInstanceIdWrapper.getInnerElement(), errorWrapper.getInnerElement());
194 return addPropertyValuesRes;
197 private TitanOperationStatus addPropertyValueToCapabilityInstanceByVertex(String resourceInstanceId, List<ComponentInstanceProperty> propertyValues, Wrapper<TitanOperationStatus> errorWrapper,
198 Either<TitanVertex, TitanOperationStatus> createCapabilityRes, Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper, Wrapper<String> createdCapabilityInstanceIdWrapper) {
199 log.trace("Before adding property values to capability instance {}", createdCapabilityInstanceIdWrapper.getInnerElement());
200 TitanOperationStatus addPropertyValuesRes = addPropertyValuesToCapabilityInstance(createCapabilityRes.left().value(), propertyValues, defaultPropertiesWrapper.getInnerElement());
201 if (!addPropertyValuesRes.equals(TitanOperationStatus.OK)) {
202 errorWrapper.setInnerElement(addPropertyValuesRes);
203 log.debug("Failed to add properties to capability instance {} {} {} {} {}", createdCapabilityInstanceIdWrapper.getInnerElement(), ofRI, resourceInstanceId, statusIs, errorWrapper.getInnerElement());
205 log.trace("After adding property values to capability instance {} {} {}", createdCapabilityInstanceIdWrapper.getInnerElement(), statusIs, errorWrapper.getInnerElement());
206 return addPropertyValuesRes;
209 private CapabilityInstData validateCapabilityInstanceProperties(String resourceInstanceId, List<ComponentInstanceProperty> propertyValues, Wrapper<TitanOperationStatus> errorWrapper,
210 Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper, Either<CapabilityInstData, TitanOperationStatus> createCapabilityRes, Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper,
211 Wrapper<String> createdCapabilityInstanceIdWrapper) {
212 CapabilityInstData createdCapabilityInstance;
213 createdCapabilityInstance = createCapabilityRes.left().value();
214 createdCapabilityInstanceIdWrapper.setInnerElement(createdCapabilityInstance.getUniqueId());
215 Map<String, PropertyDefinition> defaultProperties = overrideCapabilityDefinitionWrapper.getInnerElement().getProperties().stream().collect(Collectors.toMap(PropertyDefinition::getName, Function.identity()));
216 defaultPropertiesWrapper.setInnerElement(defaultProperties);
217 log.debug("Before validating property values of capability instance {}.", createdCapabilityInstanceIdWrapper.getInnerElement());
218 Either<Boolean, TitanOperationStatus> result = validateCapabilityInstanceProperties(defaultProperties, propertyValues);
219 if (result.isRight()) {
220 errorWrapper.setInnerElement(result.right().value());
221 log.debug("failedAddProperties {} ofRI {} statusIs {}.", createdCapabilityInstanceIdWrapper.getInnerElement(), resourceInstanceId, errorWrapper.getInnerElement());
223 log.debug("After validating property values of capability instance {} status is {}.", createdCapabilityInstanceIdWrapper.getInnerElement(), errorWrapper.getInnerElement());
224 return createdCapabilityInstance;
227 private TitanVertex validateCapabilityInstancePropertiesByVertex(String resourceInstanceId, List<ComponentInstanceProperty> propertyValues, Wrapper<TitanOperationStatus> errorWrapper,
228 Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper, TitanVertex createCapabilityRes, Wrapper<Map<String, PropertyDefinition>> defaultPropertiesWrapper, Wrapper<String> createdCapabilityInstanceIdWrapper) {
229 String id = (String) titanGenericDao.getProperty(createCapabilityRes, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
230 createdCapabilityInstanceIdWrapper.setInnerElement(id);
231 Map<String, PropertyDefinition> defaultProperties = overrideCapabilityDefinitionWrapper.getInnerElement().getProperties().stream().collect(Collectors.toMap(PropertyDefinition::getName, Function.identity()));
232 defaultPropertiesWrapper.setInnerElement(defaultProperties);
233 log.trace("Before validating property values of capability instance {}", createdCapabilityInstanceIdWrapper.getInnerElement());
234 Either<Boolean, TitanOperationStatus> result = validateCapabilityInstanceProperties(defaultProperties, propertyValues);
235 if (result.isRight()) {
236 errorWrapper.setInnerElement(result.right().value());
237 log.debug("Failed to add properties to capability instance {} {} {} {} {}", createdCapabilityInstanceIdWrapper.getInnerElement(), ofRI, resourceInstanceId, statusIs, errorWrapper.getInnerElement());
239 log.trace("After validating property values of capability instance {} {} {}", createdCapabilityInstanceIdWrapper.getInnerElement(), statusIs, errorWrapper.getInnerElement());
240 return createCapabilityRes;
243 private Either<CapabilityInstData, TitanOperationStatus> createCapabilityInstanceOnGraph(String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper, Wrapper<CapabilityData> overrideCapabilityDataWrapper,
244 Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper, Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes) {
245 Either<CapabilityInstData, TitanOperationStatus> createCapabilityRes;
246 log.debug("Before creating capability instance of capability {} on graph.", capabilityId);
247 overrideCapabilityDefinitionWrapper.setInnerElement(getCapabilityDefinitionRes.left().value());
248 CapabilityInstData capabilityInstance = buildCapabilityInstanceData(resourceInstanceId, overrideCapabilityDefinitionWrapper.getInnerElement());
249 createCapabilityRes = createCapabilityInstanceOnGraph(resourceInstanceId, overrideCapabilityDataWrapper.getInnerElement(), capabilityInstance);
250 if (createCapabilityRes.isRight()) {
251 errorWrapper.setInnerElement(createCapabilityRes.right().value());
252 log.debug("failedCreateCI {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
254 log.debug("After creating capability instance of capability {} on graph. Status is {}", capabilityId, errorWrapper.getInnerElement());
255 return createCapabilityRes;
258 private Either<TitanVertex, TitanOperationStatus> createCapabilityInstanceOnGraphByVertex(TitanVertex riVertex, String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper,
259 Wrapper<TitanVertex> overrideCapabilityDataWrapper, Wrapper<CapabilityDefinition> overrideCapabilityDefinitionWrapper, Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes) {
260 Either<TitanVertex, TitanOperationStatus> createCapabilityRes;
261 log.trace("Before creating capability instance of capability {} {}", capabilityId, onGraph);
262 overrideCapabilityDefinitionWrapper.setInnerElement(getCapabilityDefinitionRes.left().value());
263 CapabilityInstData capabilityInstance = buildCapabilityInstanceData(resourceInstanceId, overrideCapabilityDefinitionWrapper.getInnerElement());
264 createCapabilityRes = createCapabilityInstanceOnGraph(riVertex, resourceInstanceId, overrideCapabilityDataWrapper.getInnerElement(), capabilityInstance);
265 if (createCapabilityRes.isRight()) {
266 errorWrapper.setInnerElement(createCapabilityRes.right().value());
267 log.debug("Failed to create capability instance of capability {} {} {} {} {} ", capabilityId, ofRI, resourceInstanceId, statusIs, errorWrapper.getInnerElement());
269 log.debug("After creating capability instance of capability {} {} {} {} {}", capabilityId, onGraph, statusIs, errorWrapper.getInnerElement());
270 return createCapabilityRes;
273 private Either<CapabilityDefinition, TitanOperationStatus> getCapabiityDefinition(String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper, Wrapper<CapabilityData> overrideCapabilityDataWrapper,
274 Either<ImmutablePair<CapabilityData, GraphEdge>, TitanOperationStatus> getCapabilityRes) {
275 Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes;
276 log.debug("Before getting capability definition {} forRI {}.", capabilityId, resourceInstanceId);
277 CapabilityData overrideCapabilityData = getCapabilityRes.left().value().getLeft();
278 overrideCapabilityDataWrapper.setInnerElement(overrideCapabilityData);
279 getCapabilityDefinitionRes = capabilityOperation.getCapabilityByCapabilityData(overrideCapabilityData);
280 if (getCapabilityDefinitionRes.isRight()) {
281 errorWrapper.setInnerElement(getCapabilityDefinitionRes.right().value());
282 log.debug("Failed to retrieve capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
284 log.debug("After getting capability definition for {} forRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
285 return getCapabilityDefinitionRes;
288 private Either<CapabilityDefinition, TitanOperationStatus> getCapabiityDefinitionByVertex(String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper, Wrapper<TitanVertex> overrideCapabilityDataWrapper,
289 Either<ImmutablePair<TitanVertex, Edge>, TitanOperationStatus> getCapabilityRes) {
290 Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes;
291 log.trace("Before getting capability definition {} {} {}", capabilityId, forRI, resourceInstanceId);
293 TitanVertex overrideCapabilityData = getCapabilityRes.left().value().getLeft();
295 overrideCapabilityDataWrapper.setInnerElement(overrideCapabilityData);
296 getCapabilityDefinitionRes = capabilityOperation.getCapabilityByCapabilityData(overrideCapabilityData);
297 if (getCapabilityDefinitionRes.isRight()) {
298 errorWrapper.setInnerElement(getCapabilityDefinitionRes.right().value());
299 log.debug("Failed to retrieve capability {} ofRI {} statusIs {}", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
301 log.debug("After getting capability definition for {} forRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
302 return getCapabilityDefinitionRes;
305 private Either<ImmutablePair<CapabilityData, GraphEdge>, TitanOperationStatus> getCapabilitiesOfResourceInstance(String resourceInstanceId, String capabilityId, String capabilityName, Wrapper<TitanOperationStatus> errorWrapper) {
306 Either<ImmutablePair<CapabilityData, GraphEdge>, TitanOperationStatus> getCapabilityRes;
307 log.debug("Before getting capability {} forRI {}.", capabilityId, resourceInstanceId);
308 Map<String, Object> props = new HashMap<>();
309 props.put(GraphPropertiesDictionary.NAME.getProperty(), capabilityName);
310 getCapabilityRes = titanGenericDao.getChildByEdgeCriteria(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId, GraphEdgeLabels.CALCULATED_CAPABILITY, NodeTypeEnum.Capability, CapabilityData.class, props);
311 if (getCapabilityRes.isRight()) {
312 errorWrapper.setInnerElement(getCapabilityRes.right().value());
313 log.debug("Failed to get capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
315 log.debug("After getting capability for {} forRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
316 return getCapabilityRes;
319 private Either<ImmutablePair<TitanVertex, Edge>, TitanOperationStatus> getCapabilitiesOfResourceInstance(TitanVertex instanceVertex, String resourceInstanceId, String capabilityId, String capabilityName,
320 Wrapper<TitanOperationStatus> errorWrapper) {
321 Either<ImmutablePair<TitanVertex, Edge>, TitanOperationStatus> getCapabilityRes;
322 log.trace("Before getting capability {} {} {}", capabilityId, forRI, resourceInstanceId);
323 Map<String, Object> props = new HashMap<>();
324 props.put(GraphPropertiesDictionary.NAME.getProperty(), capabilityName);
325 getCapabilityRes = titanGenericDao.getChildByEdgeCriteria(instanceVertex, GraphEdgeLabels.CALCULATED_CAPABILITY, props);
326 if (getCapabilityRes.isRight()) {
327 errorWrapper.setInnerElement(getCapabilityRes.right().value());
328 log.debug("Failed to get capability {} {} {} {} {}", capabilityId, ofRI, resourceInstanceId, statusIs, errorWrapper.getInnerElement());
330 log.trace("After getting capability for {} {} {} {} {}", capabilityId, forRI, resourceInstanceId, statusIs, errorWrapper.getInnerElement());
331 return getCapabilityRes;
334 private void validateCapabilityInstanceExistence(String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper) {
335 log.debug("Before validation of existence of capability instance of capability {} forRI {}.", capabilityId, resourceInstanceId);
336 boolean capabilityInstOfCapabilityAlreadyExists;
337 Either<Boolean, TitanOperationStatus> validateCapabilityInstExistenceRes = validateCapabilityInstExistence(resourceInstanceId, capabilityId);
338 if (validateCapabilityInstExistenceRes.isRight()) {
339 errorWrapper.setInnerElement(validateCapabilityInstExistenceRes.right().value());
340 log.debug("Failed to validate uniqueness of capability instance of capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
342 capabilityInstOfCapabilityAlreadyExists = validateCapabilityInstExistenceRes.left().value();
343 if (capabilityInstOfCapabilityAlreadyExists) {
344 errorWrapper.setInnerElement(TitanOperationStatus.ALREADY_EXIST);
345 log.debug("failedCreateCI {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
348 log.debug("After validation of existence of capability instance of capability {} forRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
351 private void validateCapabilityInstanceExistence(TitanVertex resourceInstanceVertex, String resourceInstanceId, String capabilityId, Wrapper<TitanOperationStatus> errorWrapper) {
352 log.trace("Before validation of existence of capability instance of capability {} {} {}", capabilityId, forRI, resourceInstanceId);
353 boolean capabilityInstOfCapabilityAlreadyExists;
354 Either<Boolean, TitanOperationStatus> validateCapabilityInstExistenceRes = validateCapabilityInstExistence(resourceInstanceId, capabilityId);
355 if (validateCapabilityInstExistenceRes.isRight()) {
356 errorWrapper.setInnerElement(validateCapabilityInstExistenceRes.right().value());
357 log.debug("Failed to validate uniqueness of capability instance of capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
359 capabilityInstOfCapabilityAlreadyExists = validateCapabilityInstExistenceRes.left().value();
360 if (capabilityInstOfCapabilityAlreadyExists) {
361 errorWrapper.setInnerElement(TitanOperationStatus.ALREADY_EXIST);
362 log.debug("failedCreateCI {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
365 log.debug("After validation of existence of capability instance of capability {} forRI {} statusIs {}.", capabilityId, resourceInstanceId, errorWrapper.getInnerElement());
368 private Either<List<PropertyValueData>, TitanOperationStatus> addPropertyValuesToCapabilityInstance(CapabilityInstData createdCapabilityInstance, List<ComponentInstanceProperty> propertyValues, Map<String, PropertyDefinition> defaultProperties) {
369 TitanOperationStatus error = null;
370 List<PropertyValueData> createdPropertyValues = new ArrayList<>();
371 for (ComponentInstanceProperty property : propertyValues) {
372 log.debug("Before adding property value {} toCI {}.", property.getName(), createdCapabilityInstance.getUniqueId());
373 PropertyValueData propertyData = buildPropertyValueData(property.getName(), property.getType(), property.getValue(), createdCapabilityInstance.getUniqueId());
374 Either<PropertyValueData, TitanOperationStatus> addPropertyValueRes = addPropertyValueToCapabilityInstance(createdCapabilityInstance, propertyData, defaultProperties.get(property.getName()));
375 if (addPropertyValueRes.isRight()) {
376 error = addPropertyValueRes.right().value();
377 log.debug("Failed to add property to capability instance {} ofRI. StatusIs {}.", createdCapabilityInstance.getUniqueId(), error);
380 createdPropertyValues.add(addPropertyValueRes.left().value());
382 log.debug("After adding property value {} toCI {} statusIs {}", property.getName(), createdCapabilityInstance.getUniqueId(), error);
385 return Either.left(createdPropertyValues);
387 return Either.right(error);
390 private TitanOperationStatus addPropertyValuesToCapabilityInstance(TitanVertex createdCapabilityInstancevertex, List<ComponentInstanceProperty> propertyValues, Map<String, PropertyDefinition> defaultProperties) {
391 TitanOperationStatus error = null;
392 String id = (String) titanGenericDao.getProperty(createdCapabilityInstancevertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
393 for (ComponentInstanceProperty property : propertyValues) {
394 log.trace("Before adding property value {} {} {}", property.getName(), toCI, id);
395 PropertyValueData propertyData = buildPropertyValueData(property.getName(), property.getType(), property.getValue(), id);
396 TitanOperationStatus addPropertyValueRes = addPropertyValueToCapabilityInstance(createdCapabilityInstancevertex, propertyData, defaultProperties.get(property.getName()), id);
397 if (!addPropertyValueRes.equals(TitanOperationStatus.OK)) {
398 error = addPropertyValueRes;
399 log.debug("Failed to add property to capability instance {} {} {} {}", id, ofRI, statusIs, error);
402 log.debug("After adding property value {} {} {} {} {}", property.getName(), toCI, id, statusIs, error);
405 return TitanOperationStatus.OK;
410 private PropertyValueData buildPropertyValueData(String propertyName, String propertyType, String propertyValue, String capabilityInstanceId) {
411 PropertyValueData propertyData = new PropertyValueData();
412 String uniqueId = UniqueIdBuilder.buildPropertyValueUniqueId(capabilityInstanceId, propertyName);
413 Long creationTime = System.currentTimeMillis();
414 propertyData.setUniqueId(uniqueId);
415 propertyData.setValue(propertyValue);
416 propertyData.setType(propertyType);
417 propertyData.setCreationTime(creationTime);
418 propertyData.setModificationTime(creationTime);
422 private Either<PropertyValueData, TitanOperationStatus> addPropertyValueToCapabilityInstance(CapabilityInstData createdCapabilityInstance, PropertyValueData propertyValue, PropertyDefinition propertyDefinition) {
423 TitanOperationStatus error = null;
424 Map<String, Object> props = null;
425 Either<GraphRelation, TitanOperationStatus> createRelationRes;
426 PropertyValueData createdValue = null;
427 log.debug("Before creating property value node {} onGraph.", propertyValue.getUniqueId());
428 Either<PropertyValueData, TitanOperationStatus> createValueRes = titanGenericDao.createNode(propertyValue, PropertyValueData.class);
429 if (createValueRes.isRight()) {
430 error = createValueRes.right().value();
431 log.debug("Failed to create property value for capability instance {} ofRI statusIs {}.", createdCapabilityInstance.getUniqueId(), error);
433 log.debug("After creating property value node {} onGraph statusIs {}.", propertyValue.getUniqueId(), error);
435 log.debug("Before creating relation from property value node {} toCI {}.", propertyValue.getUniqueId(), createdCapabilityInstance.getUniqueId());
436 createdValue = createValueRes.left().value();
437 props = new HashMap<>();
438 props.put(GraphPropertiesDictionary.PROPERTY_NAME.name(), propertyDefinition.getName());
439 props.put(GraphPropertiesDictionary.PROPERTY_ID.name(), propertyDefinition.getUniqueId());
440 createRelationRes = titanGenericDao.createRelation(createdCapabilityInstance, createdValue, GraphEdgeLabels.PROPERTY_VALUE, props);
441 if (createRelationRes.isRight()) {
442 error = createRelationRes.right().value();
443 log.debug("Failed to create relation from capability instance {} toValue {} statusIs {}.", createdCapabilityInstance.getUniqueId(), createdValue.getUniqueId(), error);
445 log.debug("After creating relation from property value node {} toCI {} statusIs {}.", propertyValue.getUniqueId(), createdCapabilityInstance.getUniqueId(), error);
448 log.debug("Before creating relation from property value node {} toProperty {}.", propertyValue.getUniqueId(), propertyDefinition.getUniqueId());
449 createRelationRes = titanGenericDao.createRelation(propertyValue, new PropertyData(propertyDefinition, null), GraphEdgeLabels.PROPERTY_IMPL, props);
450 if (createRelationRes.isRight()) {
451 error = createRelationRes.right().value();
452 log.debug("Failed to create relation from property value {} toProperty {} statusIs {}.", createdValue.getUniqueId(), propertyDefinition.getUniqueId(), error);
454 log.debug("After creating relation from property value node {} toProperty statusIs {}.", propertyValue.getUniqueId(), propertyDefinition.getUniqueId(), error);
457 return Either.left(createdValue);
459 return Either.right(error);
462 private TitanOperationStatus addPropertyValueToCapabilityInstance(TitanVertex createdCapabilityInstanceVertex, PropertyValueData propertyValue, PropertyDefinition propertyDefinition, String id) {
463 TitanOperationStatus error = null;
464 Map<String, Object> props = null;
465 TitanOperationStatus createRelationRes;
466 log.trace("Before creating property value node {} on graph.", propertyValue.getUniqueId());
467 Either<TitanVertex, TitanOperationStatus> createValueRes = titanGenericDao.createNode(propertyValue);
468 if (createValueRes.isRight()) {
469 error = createValueRes.right().value();
470 if (log.isDebugEnabled()){
471 log.debug("Failed to create property value for capability instance {} {} {} {}", id, ofRI, statusIs, error);
474 log.trace("After creating property value node {} on graph status is {}", propertyValue.getUniqueId(), error);
475 TitanVertex createdPropVertex = null;
476 String createdId = null;
478 log.trace("Before creating relation from property value node {} {} {} ", propertyValue.getUniqueId(), toCI, id);
479 props = new HashMap<>();
480 props.put(GraphPropertiesDictionary.PROPERTY_NAME.name(), propertyDefinition.getName());
481 props.put(GraphPropertiesDictionary.PROPERTY_ID.name(), propertyDefinition.getUniqueId());
482 createdPropVertex = createValueRes.left().value();
483 createRelationRes = titanGenericDao.createEdge(createdCapabilityInstanceVertex, createdPropVertex, GraphEdgeLabels.PROPERTY_VALUE, props);
484 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
485 error = createRelationRes;
486 createdId = (String) titanGenericDao.getProperty(createdPropVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
487 if (log.isDebugEnabled()) {
488 log.debug("Failed to create relation from capability instance {} {} {} {} {}", id, toValue, createdId, statusIs, error);
491 if (log.isTraceEnabled()){
492 log.trace("After creating relation from property value node {} {} {} {} {}", propertyValue.getUniqueId(), toCI, id, statusIs, error);
496 log.trace("Before creating relation from property value node {} {} {}", propertyValue.getUniqueId(), toProperty, propertyDefinition.getUniqueId());
497 createRelationRes = titanGenericDao.createEdge(createdPropVertex, new PropertyData(propertyDefinition, null), GraphEdgeLabels.PROPERTY_IMPL, props);
498 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
499 error = createRelationRes;
500 log.debug("Failed to create relation from property value {} {} {} {} {}", createdId, toProperty, propertyDefinition.getUniqueId(), statusIs, error);
502 log.debug("After creating relation from property value node {} {} {} {} {}", propertyValue.getUniqueId(), toProperty, propertyDefinition.getUniqueId(), statusIs, error);
505 return TitanOperationStatus.OK;
510 private Either<Boolean, TitanOperationStatus> validateCapabilityInstanceProperties(Map<String, PropertyDefinition> defaultProperties, List<ComponentInstanceProperty> propertyValues) {
511 Either<Boolean, TitanOperationStatus> result = Either.left(true);
512 for (ComponentInstanceProperty property : propertyValues) {
513 result = validateUpdateCapabilityInstancePropertyValue(property, defaultProperties);
514 if (result.isRight()) {
521 private Either<Boolean, TitanOperationStatus> validateUpdateCapabilityInstancePropertyValue(ComponentInstanceProperty property, Map<String, PropertyDefinition> defaultProperties) {
522 PropertyDefinition defaultProperty;
523 String propertyName = property.getName();
524 Either<Boolean, TitanOperationStatus> result = null;
525 if (defaultProperties.containsKey(propertyName)) {
526 defaultProperty = defaultProperties.get(propertyName);
527 String propertyType = property.getType() == null || property.getType().isEmpty() ? defaultProperty.getType() : property.getType();
529 String innerType = null;
530 if (property.getSchema() != null && property.getSchema().getProperty() != null)
531 innerType = property.getSchema().getProperty().getType();
532 if (innerType == null && defaultProperty.getSchema() != null && defaultProperty.getSchema().getProperty() != null)
533 innerType = defaultProperty.getSchema().getProperty().getType();
535 if (defaultProperty.getType().equals(propertyType)) {
536 String propertyValue = property.getValue();
537 Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = applicationDataTypeCache.getAll();
538 if (allDataTypes.isRight()) {
539 TitanOperationStatus status = allDataTypes.right().value();
540 log.debug("Failed to update property value statusIs {}.", status);
541 result = Either.right(status);
543 if (result == null) {
544 Either<Object, Boolean> updatedPropertyValueRes = propertyOperation.validateAndUpdatePropertyValue(propertyType, propertyValue, innerType, allDataTypes.left().value());
545 if (updatedPropertyValueRes.isLeft()) {
546 if (updatedPropertyValueRes.left().value() != null)
547 property.setDefaultValue(updatedPropertyValueRes.left().value().toString());
548 result = Either.left(true);
550 result = Either.right(TitanOperationStatus.INVALID_PROPERTY);
553 log.debug("The property with name {} has invalid type {} or invalid value {}.", propertyName, propertyType, propertyValue);
556 result = Either.right(TitanOperationStatus.PROPERTY_NAME_ALREADY_EXISTS);
557 log.debug("The property with name {} and different type already exists.", propertyName);
560 result = Either.right(TitanOperationStatus.NOT_FOUND);
561 log.debug("Failed to find property with name {}.", propertyName);
567 * validate capability instance uniqueness
569 * @param resourceInstanceId
570 * @param capabilityId
574 public Either<Boolean, TitanOperationStatus> validateCapabilityInstExistence(String resourceInstanceId, String capabilityId) {
575 Either<Boolean, TitanOperationStatus> result = null;
576 TitanOperationStatus error;
577 Map<String, Object> props = new HashMap<>();
578 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityId);
579 Either<Edge, TitanOperationStatus> getCapabilityInstanceEdgeRes = titanGenericDao.getOutgoingEdgeByCriteria(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId, GraphEdgeLabels.CAPABILITY_INST, props);
580 if (getCapabilityInstanceEdgeRes.isRight()) {
581 error = getCapabilityInstanceEdgeRes.right().value();
582 if (error.equals(TitanOperationStatus.NOT_FOUND)) {
583 result = Either.left(false);
585 log.debug("Failed to get outgoing edge for resource instance {} statusIs {}.", resourceInstanceId, error);
586 result = Either.right(error);
589 if (result == null) {
590 result = Either.left(true);
596 public Either<Boolean, TitanOperationStatus> validateCapabilityInstExistence(TitanVertex instanceVertex, String resourceInstanceId, String capabilityId) {
597 Either<Boolean, TitanOperationStatus> result = null;
598 TitanOperationStatus error;
599 Map<String, Object> props = new HashMap<>();
600 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityId);
601 Either<Edge, TitanOperationStatus> getCapabilityInstanceEdgeRes = titanGenericDao.getOutgoingEdgeByCriteria(instanceVertex, GraphEdgeLabels.CAPABILITY_INST, props);
602 if (getCapabilityInstanceEdgeRes.isRight()) {
603 error = getCapabilityInstanceEdgeRes.right().value();
604 if (error.equals(TitanOperationStatus.NOT_FOUND)) {
605 result = Either.left(false);
607 log.debug("Failed to get outgoing edge for resource instance {} {} {}", resourceInstanceId, statusIs, error);
608 result = Either.right(error);
611 if (result == null) {
612 result = Either.left(true);
617 private Either<CapabilityInstData, TitanOperationStatus> createCapabilityInstanceOnGraph(String resourceInstanceId, CapabilityData overrideCapabilityData, CapabilityInstData capabilityInstance) {
618 log.debug("Before creation of capability instance of capability {} forRI {}.", overrideCapabilityData.getUniqueId(), resourceInstanceId);
620 Either<GraphRelation, TitanOperationStatus> createRelationRes;
621 CapabilityInstData createdCapabilityInstance = null;
622 String capabilityInstanceId = null;
623 TitanOperationStatus error = null;
624 Either<CapabilityInstData, TitanOperationStatus> createCapabilityInstanceRes = titanGenericDao.createNode(capabilityInstance, CapabilityInstData.class);
625 if (createCapabilityInstanceRes.isRight()) {
626 error = createCapabilityInstanceRes.right().value();
627 log.debug("failedCreateCI {} forRI {} statusIs {}.", overrideCapabilityData.getUniqueId(), resourceInstanceId, error);
629 log.debug("After creation of capability instance of capability {} forRI {} statusIs {}.", overrideCapabilityData.getUniqueId(), resourceInstanceId, error);
631 createdCapabilityInstance = createCapabilityInstanceRes.left().value();
632 capabilityInstanceId = createdCapabilityInstance.getUniqueId();
633 Map<String, Object> props = new HashMap<>();
634 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), overrideCapabilityData.getUniqueId());
635 UniqueIdData resourceInstanceIdData = new UniqueIdData(NodeTypeEnum.ResourceInstance, resourceInstanceId);
636 log.debug("Before associating resource instance {} to capability instance.", resourceInstanceId);
637 createRelationRes = titanGenericDao.createRelation(resourceInstanceIdData, capabilityInstance, GraphEdgeLabels.CAPABILITY_INST, props);
638 if (createRelationRes.isRight()) {
639 error = createRelationRes.right().value();
640 log.debug("Failed to assotiate resource instance {} toCI {} statusIs {}.", resourceInstanceId, capabilityInstanceId, error);
642 log.debug("After associating resource instance {} to CI {} statusIs {}.", resourceInstanceId, capabilityInstanceId, error);
645 log.debug("Before associating capability instance {} toCapability {}.", capabilityInstanceId, overrideCapabilityData.getUniqueId());
646 Map<String, Object> props = new HashMap<>();
647 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), overrideCapabilityData.getUniqueId());
648 createRelationRes = titanGenericDao.createRelation(createdCapabilityInstance, overrideCapabilityData, GraphEdgeLabels.INSTANCE_OF, props);
649 if (createRelationRes.isRight()) {
650 error = createRelationRes.right().value();
651 log.debug("Failed to associate capability instance {} toCapability statusIs {}.", capabilityInstanceId, overrideCapabilityData.getUniqueId(), error);
653 log.debug("After associating capability instance {} toCapability statusIs {}.", capabilityInstanceId, overrideCapabilityData.getUniqueId(), error);
656 return createCapabilityInstanceRes;
658 return Either.right(error);
661 private Either<TitanVertex, TitanOperationStatus> createCapabilityInstanceOnGraph(TitanVertex riVertex, String resourceInstanceId, TitanVertex overrideCapabilityDataVertex, CapabilityInstData capabilityInstance) {
662 String overrideCapabilityDataId = (String) titanGenericDao.getProperty(overrideCapabilityDataVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
663 log.trace("Before creation of capability instance of capability {} {} {}", overrideCapabilityDataVertex, forRI, resourceInstanceId);
665 TitanOperationStatus createRelationRes;
666 TitanVertex createdCapabilityInstance = null;
667 String capabilityInstanceId = null;
668 TitanOperationStatus error = null;
669 Either<TitanVertex, TitanOperationStatus> createCapabilityInstanceRes = titanGenericDao.createNode(capabilityInstance);
670 if (createCapabilityInstanceRes.isRight()) {
671 error = createCapabilityInstanceRes.right().value();
672 log.debug("Failed to create capability instance of capability {} {} {} {} {}", overrideCapabilityDataId, forRI, resourceInstanceId, statusIs, error);
674 log.trace("After creation of capability instance of capability {} {} {} {} {}", overrideCapabilityDataId, forRI, resourceInstanceId, statusIs, error);
676 createdCapabilityInstance = createCapabilityInstanceRes.left().value();
677 capabilityInstanceId = (String) titanGenericDao.getProperty(createdCapabilityInstance, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
678 Map<String, Object> props = new HashMap<>();
679 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), overrideCapabilityDataId);
680 log.debug("Before associating resource instance {} to capability instance.", resourceInstanceId);
682 createRelationRes = titanGenericDao.createEdge(riVertex, capabilityInstance, GraphEdgeLabels.CAPABILITY_INST, props);
683 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
684 error = createRelationRes;
685 log.debug("Failed to assotiate resource instance {} {} {} {} {}", resourceInstanceId, toCI, capabilityInstanceId, statusIs, error);
687 if (log.isTraceEnabled()) {
688 log.trace("After associating resource instance {} {} {} {} {}", resourceInstanceId, toCI, capabilityInstanceId, statusIs, error);
692 log.trace("Before associating capability instance {} {} {}", capabilityInstanceId, toCapability, overrideCapabilityDataId);
693 Map<String, Object> props = new HashMap<>();
694 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), overrideCapabilityDataId);
695 createRelationRes = titanGenericDao.createEdge(createdCapabilityInstance, overrideCapabilityDataVertex, GraphEdgeLabels.INSTANCE_OF, props);
696 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
697 error = createRelationRes;
698 log.debug("Failed to associate capability instance {} {} {} {} {}", capabilityInstanceId, toCapability, overrideCapabilityDataId, statusIs, error);
700 log.debug("After associating capability instance {} {} {} {} {}", capabilityInstanceId, toCapability, overrideCapabilityDataId, statusIs, error);
703 return createCapabilityInstanceRes;
705 return Either.right(error);
708 private CapabilityInstData buildCapabilityInstanceData(String resourceInstanceId, CapabilityDefinition capability) {
709 CapabilityInstData capabilityInstance = new CapabilityInstData();
710 Long creationTime = System.currentTimeMillis();
711 String uniqueId = UniqueIdBuilder.buildCapabilityInstanceUid(resourceInstanceId, capability.getName());
713 capabilityInstance.setCreationTime(creationTime);
714 capabilityInstance.setModificationTime(creationTime);
715 capabilityInstance.setUniqueId(uniqueId);
717 return capabilityInstance;
721 * delete capability instance from resource instance
723 * @param resourceInstanceId
724 * @param capabilityInstanceId
728 public Either<CapabilityInstData, TitanOperationStatus> deleteCapabilityInstanceFromResourceInstance(String resourceInstanceId, String capabilityInstanceId) {
729 log.debug("Before deleting of capability instance {} fromRI {}.", capabilityInstanceId, resourceInstanceId);
731 Either<CapabilityInstData, TitanOperationStatus> deleteCapabilityInstRes = null;
732 TitanOperationStatus error = null;
733 Either<Boolean, TitanOperationStatus> deleteProperyValuesRes = deleteAllPropertyValuesOfCapabilityInstance(resourceInstanceId, capabilityInstanceId);
734 if (deleteProperyValuesRes.isRight()) {
735 error = deleteProperyValuesRes.right().value();
736 log.debug("failedDeletePropertyValues {} for RI {} statusIs {}.", capabilityInstanceId, resourceInstanceId, error);
739 deleteCapabilityInstRes = titanGenericDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.CapabilityInst), capabilityInstanceId, CapabilityInstData.class);
740 if (deleteCapabilityInstRes.isRight()) {
741 error = deleteCapabilityInstRes.right().value();
742 log.debug("Failed to delete capability instance {} forRI {} statusIs {}", capabilityInstanceId, resourceInstanceId, error);
745 log.debug("After deleting of capability instance {} fromRI {} statusIs {}.", capabilityInstanceId, resourceInstanceId, error);
747 return Either.left(deleteCapabilityInstRes.left().value());
749 return Either.right(error);
752 private Either<Boolean, TitanOperationStatus> deleteAllPropertyValuesOfCapabilityInstance(String resourceInstanceId, String capabilityInstanceId) {
753 log.debug("Before deleting all property values of capability instance {} fromRI {}.", capabilityInstanceId, resourceInstanceId);
754 TitanOperationStatus error = null;
755 List<ImmutablePair<PropertyValueData, GraphEdge>> deletePropertiesPairs;
756 Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, TitanOperationStatus> getPropertyValuesRes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.CapabilityInst), capabilityInstanceId,
757 GraphEdgeLabels.PROPERTY_VALUE, NodeTypeEnum.PropertyValue, PropertyValueData.class);
758 if (getPropertyValuesRes.isRight()) {
759 error = getPropertyValuesRes.right().value();
760 log.debug("Failed to retrieve property values of capability instance {} forRI {} status {}.", capabilityInstanceId, resourceInstanceId, error);
763 deletePropertiesPairs = getPropertyValuesRes.left().value();
764 for (ImmutablePair<PropertyValueData, GraphEdge> propertyPair : deletePropertiesPairs) {
765 Either<PropertyValueData, TitanOperationStatus> deletePropertyRes = titanGenericDao.deleteNode(propertyPair.getLeft(), PropertyValueData.class);
766 if (deletePropertyRes.isRight()) {
767 error = deletePropertyRes.right().value();
768 log.debug("failedDeletePropertyValues {} forRI {} statusIs {}.", capabilityInstanceId, resourceInstanceId, error);
773 log.debug("After deleting all property values of capability instance {} fromRI {} statusIs {}.", capabilityInstanceId, resourceInstanceId, error);
775 return Either.left(true);
777 return Either.right(error);
781 * get all capability instances for resource instance returns all Capability Instances related to Resource Instance as List<CapabilityInstData> or TitanOperationStatus if error occurs or if Resource Instance have no any related Capability
784 * @param resourceInstanceId
785 * @return Either<List<CapabilityInstData>, TitanOperationStatus>
788 public Either<List<ImmutablePair<CapabilityInstData, GraphEdge>>, TitanOperationStatus> getAllCapabilityInstancesOfResourceInstance(String resourceInstanceId) {
789 log.debug("Before deleting all capability instances of resource instance {}.", resourceInstanceId);
790 TitanOperationStatus error = null;
791 Either<List<ImmutablePair<CapabilityInstData, GraphEdge>>, TitanOperationStatus> getCapabilityInstancesRes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId,
792 GraphEdgeLabels.CAPABILITY_INST, NodeTypeEnum.CapabilityInst, CapabilityInstData.class);
793 if (getCapabilityInstancesRes.isRight()) {
794 error = getCapabilityInstancesRes.right().value();
795 log.debug("Failed to retrieve capability Instances of resource instance {} statusIs {}.", resourceInstanceId, error);
797 log.debug("After deleting all capability instances of resource instance {} statusIs {}", resourceInstanceId, error);
799 return getCapabilityInstancesRes;
801 return Either.right(error);
805 * get capability instance of capability for resource instance
807 * @param resourceInstanceId
808 * @param capabilityId
812 public Either<CapabilityInstData, TitanOperationStatus> getCapabilityInstanceOfCapabilityOfResourceInstance(String resourceInstanceId, String capabilityId) {
813 TitanOperationStatus error = null;
814 Map<String, Object> props = new HashMap<>();
815 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityId);
816 Either<ImmutablePair<CapabilityInstData, GraphEdge>, TitanOperationStatus> getCapabilityInstanceRes = titanGenericDao.getChildByEdgeCriteria(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId,
817 GraphEdgeLabels.CAPABILITY_INST, NodeTypeEnum.CapabilityInst, CapabilityInstData.class, props);
818 if (getCapabilityInstanceRes.isRight()) {
819 error = getCapabilityInstanceRes.right().value();
820 log.debug("Failed to retrieve capability Instance of capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
823 return Either.left(getCapabilityInstanceRes.left().value().getLeft());
825 return Either.right(error);
829 * update capability property values
831 * @param resourceInstanceId
832 * @param propertyValues
833 * @param capabilityId
837 public Either<List<PropertyValueData>, TitanOperationStatus> updateCapabilityPropertyValues(String resourceInstanceId, String capabilityId, List<ComponentInstanceProperty> propertyValues) {
838 log.debug("Before updating property values of capability {} ofRI {}.", capabilityId, resourceInstanceId);
839 TitanOperationStatus error = null;
840 Map<String, Object> props = new HashMap<>();
841 CapabilityInstData capabilityInstance = null;
842 String capabilityInstanceId = null;
843 Either<Boolean, TitanOperationStatus> deleteProperyValuesRes;
845 CapabilityData overrideCapabilityData;
846 CapabilityDefinition overrideCapabilityDefinition;
847 Map<String, PropertyDefinition> defaultProperties = null;
848 Either<ImmutablePair<CapabilityData, GraphEdge>, TitanOperationStatus> getCapabilityDataRes = null;
849 Either<List<PropertyValueData>, TitanOperationStatus> addPropertyValuesRes = null;
850 Either<CapabilityDefinition, TitanOperationStatus> getCapabilityDefinitionRes = null;
852 log.debug("Before getting all capability instances of RI {}.", resourceInstanceId);
853 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityId);
854 Either<ImmutablePair<CapabilityInstData, GraphEdge>, TitanOperationStatus> getCapabilityInstancesRes = titanGenericDao.getChildByEdgeCriteria(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId,
855 GraphEdgeLabels.CAPABILITY_INST, NodeTypeEnum.CapabilityInst, CapabilityInstData.class, props);
856 if (getCapabilityInstancesRes.isRight()) {
857 error = getCapabilityInstancesRes.right().value();
858 log.debug("Failed to retrieve capability Instances of capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
860 log.debug("After getting all capability instances ofRI {} statusIs {}.", resourceInstanceId, error);
862 log.debug("Before deleting all capability instances ofRI {}.", resourceInstanceId);
863 capabilityInstance = getCapabilityInstancesRes.left().value().getLeft();
864 capabilityInstanceId = capabilityInstance.getUniqueId();
865 deleteProperyValuesRes = deleteAllPropertyValuesOfCapabilityInstance(resourceInstanceId, capabilityInstanceId);
866 if (deleteProperyValuesRes.isRight()) {
867 error = deleteProperyValuesRes.right().value();
868 log.debug("failedDeletePropertyValues {} forRI {} statusIs {}", capabilityInstanceId, resourceInstanceId, statusIs, error);
870 log.debug("After deleting all capability instances ofRI {} statusIs {}.", resourceInstanceId, error);
873 log.debug("Before getting capability {} ofRI {}.", capabilityId, resourceInstanceId);
874 getCapabilityDataRes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceInstance), resourceInstanceId, GraphEdgeLabels.CALCULATED_CAPABILITY, NodeTypeEnum.Capability, CapabilityData.class);
875 if (getCapabilityDataRes.isRight()) {
876 error = getCapabilityDataRes.right().value();
877 log.debug("Failed to get capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
879 log.debug("After getting capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
882 log.debug("Before getting capability definition for capability {} ofRI {}.", capabilityId, resourceInstanceId);
883 overrideCapabilityData = getCapabilityDataRes.left().value().getLeft();
884 getCapabilityDefinitionRes = capabilityOperation.getCapabilityByCapabilityData(overrideCapabilityData);
885 if (getCapabilityDefinitionRes.isRight()) {
886 error = getCapabilityDefinitionRes.right().value();
887 log.debug("Failed to retrieve capability {} ofRI {} statusIs {}", capabilityId, resourceInstanceId, error);
889 log.debug("After getting capability definition for capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
892 log.debug("Before validating capability properties of capability instance {} ofRI {}.", capabilityInstanceId, resourceInstanceId);
893 overrideCapabilityDefinition = getCapabilityDefinitionRes.left().value();
894 if (overrideCapabilityDefinition.getProperties() != null) {
895 defaultProperties = overrideCapabilityDefinition.getProperties().stream().collect(Collectors.toMap(PropertyDefinition::getName, Function.identity()));
897 Either<Boolean, TitanOperationStatus> result = validateCapabilityInstanceProperties(defaultProperties, propertyValues);
898 if (result.isRight()) {
899 error = result.right().value();
900 log.debug("failedAddProperties {} ofRI {} statusIs {}.", capabilityInstance.getUniqueId(), resourceInstanceId, error);
902 log.debug("After validating capability properties of capability instance {} of RI {} statusIs {}.", capabilityInstanceId, resourceInstanceId, error);
905 log.debug("Before adding property values toCI {} ofRI {}.", capabilityInstanceId, resourceInstanceId);
906 addPropertyValuesRes = addPropertyValuesToCapabilityInstance(capabilityInstance, propertyValues, defaultProperties);
907 if (addPropertyValuesRes.isRight()) {
908 error = addPropertyValuesRes.right().value();
909 log.debug("failedAddProperties {} ofRI {} statusIs {}.", capabilityInstance.getUniqueId(), resourceInstanceId, error);
911 log.debug("Before adding property values toCI {} ofRI {}.", capabilityInstanceId, resourceInstanceId);
913 log.debug("After updating property values of capability {} ofRI {} statusIs {}.", capabilityId, resourceInstanceId, error);
915 return addPropertyValuesRes;
917 return Either.right(error);
921 * clone and associate capability instance with property values
923 * @param createdComponentInstance
925 * @param capabilityInstPair
929 public Either<ImmutablePair<CapabilityInstData, List<PropertyValueData>>, TitanOperationStatus> cloneAssociateCapabilityInstanceWithPropertyValues(ComponentInstanceData createdComponentInstance, CapabilityDefinition capability,
930 ImmutablePair<CapabilityInstData, GraphEdge> capabilityInstPair) {
932 TitanOperationStatus error = null;
933 String componentInstanceId = createdComponentInstance.getUniqueId();
934 String capabilityInstanceId = capabilityInstPair.getLeft().getUniqueId();
936 log.debug("Before cloning capability instance with property values of capability instance {} ofRI {}.", capabilityInstanceId, componentInstanceId);
937 List<ImmutablePair<PropertyValueData, GraphEdge>> propertyValuePairs;
938 List<PropertyValueData> newPropertyValues = new ArrayList<>();
939 CapabilityInstData cloneCapabilityInstance = null;
940 Either<CapabilityInstData, TitanOperationStatus> cloneCapabilityInstanceNodeRes = null;
942 log.debug("Before getting all property values ofCI {} ofRI {}.", capabilityInstanceId, componentInstanceId);
943 Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, TitanOperationStatus> getPropertyValuesRes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.CapabilityInst), capabilityInstPair.getLeft().getUniqueId(),
944 GraphEdgeLabels.PROPERTY_VALUE, NodeTypeEnum.PropertyValue, PropertyValueData.class);
945 if (getPropertyValuesRes.isRight()) {
946 error = getPropertyValuesRes.right().value();
947 log.debug("Failed to retrieve property values of capability instance {} ofCI {} statusIs {}.", capabilityInstPair.getLeft().getUniqueId(), componentInstanceId ,error);
949 log.debug("After getting all property values ofCI {} ofRI {} statusIs {}.", capabilityInstanceId, componentInstanceId, error);
951 CapabilityInstData cloneCapabilityInst = buildCapabilityInstanceData(componentInstanceId, capability);
952 log.debug("Before creating capability instance node {} onGraph.", cloneCapabilityInst.getUniqueId());
953 cloneCapabilityInstanceNodeRes = titanGenericDao.createNode(cloneCapabilityInst, CapabilityInstData.class);
954 if (cloneCapabilityInstanceNodeRes.isRight()) {
955 error = cloneCapabilityInstanceNodeRes.right().value();
956 log.debug("Failed to create capability instance of capability {} ofCI {} statusIs {}.", capability.getUniqueId(), componentInstanceId, error);
958 log.debug("After creating capability instance node {} onGraph. statusIs {}", cloneCapabilityInst.getUniqueId(), error);
962 log.debug("Before creating relation from capability instance {} toCapability {} onGraph.", cloneCapabilityInstanceNodeRes.left().value().getUniqueId(), capability.getUniqueId());
963 cloneCapabilityInstance = cloneCapabilityInstanceNodeRes.left().value();
964 CapabilityData capabilityData = buildCapabilityData(capability);
965 Map<String, Object> props = new HashMap<>();
966 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityData.getUniqueId());
967 Either<GraphRelation, TitanOperationStatus> createRelationRes = titanGenericDao.createRelation(cloneCapabilityInstance, capabilityData, GraphEdgeLabels.INSTANCE_OF, props);
968 if (createRelationRes.isRight()) {
969 error = createRelationRes.right().value();
970 log.debug("Failed to associate capability instance {} toCapability {} statusIs {}.", cloneCapabilityInstance.getUniqueId(), capability.getUniqueId(), error);
972 log.debug("After creating relation from capability instance {} toCapability {} onGraph. statusIs {}.", cloneCapabilityInstanceNodeRes.left().value().getUniqueId(), capability.getUniqueId(), error);
976 log.debug("Before cloning property values ofCI {}.", capabilityInstanceId);
977 propertyValuePairs = getPropertyValuesRes.left().value();
978 for (ImmutablePair<PropertyValueData, GraphEdge> propertyValuePair : propertyValuePairs) {
979 Either<PropertyValueData, TitanOperationStatus> clonePropertyValueRes = cloneAssociatePropertyValue(cloneCapabilityInstance, propertyValuePair);
980 if (clonePropertyValueRes.isRight()) {
981 error = clonePropertyValueRes.right().value();
982 if (log.isDebugEnabled()) {
983 log.debug("Failed to clone property value {} ofCapability {} ofCI {}. statusIs {}.", propertyValuePair.getLeft().getUniqueId(), capability.getUniqueId(), componentInstanceId, error);
987 newPropertyValues.add(clonePropertyValueRes.left().value());
990 log.debug("After cloning property values of CI {} statusIs {}.", capabilityInstanceId, error);
992 log.debug("After cloning capability instance with property values of capability instance {} ofRI {} statusIs {}.", capabilityInstanceId, componentInstanceId, error);
994 return Either.left(new ImmutablePair<CapabilityInstData, List<PropertyValueData>>(cloneCapabilityInstance, newPropertyValues));
996 return Either.right(error);
999 public Either<TitanVertex, TitanOperationStatus> cloneAssociateCapabilityInstanceWithPropertyValues(TitanVertex componentInstanceVertex, CapabilityDefinition capability, ImmutablePair<CapabilityInstData, GraphEdge> capabilityInstPair) {
1001 TitanOperationStatus error = null;
1002 String componentInstanceId = (String) titanGenericDao.getProperty(componentInstanceVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
1003 String capabilityInstanceId = capabilityInstPair.getLeft().getUniqueId();
1005 if (log.isTraceEnabled()) {
1006 log.trace("Before cloning capability instance with property values of capability instance {} {} {}", capabilityInstanceId, ofRI, componentInstanceId);
1008 List<ImmutablePair<TitanVertex, Edge>> propertyValuePairs;
1009 Either<TitanVertex, TitanOperationStatus> cloneCapabilityInstanceNodeRes = null;
1011 if (log.isTraceEnabled()) {
1012 log.trace("Before getting all property values {} {} {} {}", ofCI, capabilityInstanceId, ofRI, componentInstanceId);
1014 Either<List<ImmutablePair<TitanVertex, Edge>>, TitanOperationStatus> getPropertyValuesRes = titanGenericDao.getChildrenVertecies(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.CapabilityInst), capabilityInstPair.getLeft().getUniqueId(),
1015 GraphEdgeLabels.PROPERTY_VALUE);
1016 if (getPropertyValuesRes.isRight()) {
1017 error = getPropertyValuesRes.right().value();
1018 if (log.isDebugEnabled()) {
1019 log.debug("Failed to retrieve property values of capability instance {} {} {} {} {}", capabilityInstPair.getLeft().getUniqueId(), ofCI, componentInstanceId, statusIs, error);
1022 if (log.isTraceEnabled()) {
1023 log.trace("After getting all property values {} {} {} {} {} {}", ofCI, capabilityInstanceId, ofRI, componentInstanceId, statusIs, error);
1025 if (error == null) {
1026 CapabilityInstData cloneCapabilityInst = buildCapabilityInstanceData(componentInstanceId, capability);
1027 log.trace("Before creating capability instance node {} {} ", cloneCapabilityInst.getUniqueId(), onGraph);
1028 cloneCapabilityInstanceNodeRes = titanGenericDao.createNode(cloneCapabilityInst);
1029 if (cloneCapabilityInstanceNodeRes.isRight()) {
1030 error = cloneCapabilityInstanceNodeRes.right().value();
1031 if (log.isDebugEnabled()) {
1032 log.debug("Failed to create capability instance of capability {} {} {} {} {}", capability.getUniqueId(), ofCI, componentInstanceId, statusIs, error);
1035 if (log.isTraceEnabled()) {
1036 log.trace("After creating capability instance node {} {} {} {}", cloneCapabilityInst.getUniqueId(), onGraph, statusIs, error);
1039 CapabilityData capabilityData;
1040 TitanVertex cloneCapabilityInstance = null;
1041 if (error == null) {
1042 if (log.isTraceEnabled()) {
1043 log.trace("Before creating relation from capability instance {} {} {} {}", capability.getUniqueId(), toCapability, capability.getUniqueId(), onGraph);
1045 capabilityData = buildCapabilityData(capability);
1046 Map<String, Object> props = new HashMap<>();
1047 props.put(GraphPropertiesDictionary.CAPABILITY_ID.getProperty(), capabilityData.getUniqueId());
1048 cloneCapabilityInstance = cloneCapabilityInstanceNodeRes.left().value();
1049 TitanOperationStatus createRelationRes = titanGenericDao.createEdge(cloneCapabilityInstance, capabilityData, GraphEdgeLabels.INSTANCE_OF, props);
1050 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
1051 error = createRelationRes;
1052 if (log.isDebugEnabled()) {
1053 log.debug("Failed to associate capability instance {} {} {} {} {}", capabilityData.getUniqueId(), toCapability, capability.getUniqueId(), statusIs, createRelationRes);
1056 if (log.isTraceEnabled()) {
1057 log.trace("After creating relation from capability instance {} {} {} {} {} {}", capabilityData.getUniqueId(), toCapability, capability.getUniqueId(), onGraph, statusIs, error);
1061 if (error == null) {
1062 log.trace("Before cloning property values {} {} ", ofCI, capabilityInstanceId);
1063 propertyValuePairs = getPropertyValuesRes.left().value();
1064 for (ImmutablePair<TitanVertex, Edge> propertyValuePair : propertyValuePairs) {
1065 TitanOperationStatus clonePropertyValueRes = cloneAssociatePropertyValue(cloneCapabilityInstance, propertyValuePair);
1066 if (!clonePropertyValueRes.equals(TitanOperationStatus.OK)) {
1067 error = clonePropertyValueRes;
1068 if (log.isDebugEnabled()) {
1069 log.debug("Failed to clone property value of capability {} {} {} {} {}", capability.getUniqueId(), ofCI, componentInstanceId, statusIs, error);
1074 if (log.isDebugEnabled()) {
1075 log.debug("After cloning property values {} {} {} {}", ofCI, capabilityInstanceId, statusIs, error);
1078 log.debug("After cloning capability instance with property values of capability instance {} ofRI {} statusIs {}.", capabilityInstanceId, componentInstanceId, error);
1079 if (error == null) {
1080 return Either.left(cloneCapabilityInstance);
1082 return Either.right(error);
1085 private CapabilityData buildCapabilityData(CapabilityDefinition capability) {
1086 CapabilityData capabilityData = new CapabilityData();
1087 capabilityData.setUniqueId(capability.getUniqueId());
1088 capabilityData.setDescription(capability.getDescription());
1089 capabilityData.setType(capability.getType());
1090 capabilityData.setMaxOccurrences(capability.getMaxOccurrences());
1091 capabilityData.setMinOccurrences(capability.getMinOccurrences());
1092 List<String> validSourceTypes = capability.getValidSourceTypes();
1093 if (validSourceTypes != null) {
1094 capabilityData.setValidSourceTypes(validSourceTypes);
1096 return capabilityData;
1099 private Either<PropertyValueData, TitanOperationStatus> cloneAssociatePropertyValue(CapabilityInstData cloneCapabilityInstance, ImmutablePair<PropertyValueData, GraphEdge> propertyValuePair) {
1100 TitanOperationStatus error = null;
1101 String propertyValueID = propertyValuePair.getLeft().getUniqueId();
1102 String capabilityInstanceId = cloneCapabilityInstance.getUniqueId();
1103 log.debug("Before cloning property values {} ofCI {}.", propertyValueID, capabilityInstanceId);
1105 Map<String, Object> props = propertyValuePair.getRight().getProperties();
1106 PropertyData propertyData = new PropertyData();
1107 String propertyId = (String) props.get(GraphPropertiesDictionary.PROPERTY_ID.name());
1108 propertyData.getPropertyDataDefinition().setUniqueId(propertyId);
1110 PropertyValueData propertyValue = buildPropertyValueData((String) props.get(GraphPropertiesDictionary.PROPERTY_NAME.name()), propertyValuePair.getLeft().getType(), propertyValuePair.getLeft().getValue(), capabilityInstanceId);
1111 PropertyValueData createdValue = null;
1112 Either<GraphRelation, TitanOperationStatus> createRelationRes;
1114 log.debug("Before creating property values node {} onGraph.", propertyValue.getUniqueId());
1115 Either<PropertyValueData, TitanOperationStatus> createValueRes = titanGenericDao.createNode(propertyValue, PropertyValueData.class);
1116 if (createValueRes.isRight()) {
1117 error = createValueRes.right().value();
1118 log.debug("Failed to create property value for capability instance {} ofRI. statusIs {}.", cloneCapabilityInstance.getUniqueId(), error);
1120 log.debug("After creating property values node {} onGraph. statusIs {}.", propertyValue.getUniqueId(), error);
1121 if (error == null) {
1122 createdValue = createValueRes.left().value();
1123 log.debug("Before creating relation from capability instance {} toValue {}.", capabilityInstanceId, createdValue.getUniqueId());
1124 createRelationRes = titanGenericDao.createRelation(cloneCapabilityInstance, createdValue, GraphEdgeLabels.PROPERTY_VALUE, props);
1125 if (createRelationRes.isRight()) {
1126 error = createRelationRes.right().value();
1127 log.debug("Failed to create relation from capability instance {} toValue {} statusIs {}.", cloneCapabilityInstance.getUniqueId(), createdValue.getUniqueId(), error);
1129 log.debug("After creating relation from capability instance {} toValue {} statusIs {}", capabilityInstanceId, createdValue.getUniqueId(), error);
1131 if (error == null) {
1132 log.debug("Before creating relation from property value {} toProperty {}.", createdValue, propertyData.getUniqueId());
1133 createRelationRes = titanGenericDao.createRelation(createdValue, propertyData, GraphEdgeLabels.PROPERTY_IMPL, props);
1134 if (createRelationRes.isRight()) {
1135 error = createRelationRes.right().value();
1136 log.debug("Failed to create relation from property value {} toProperty {} statusIs {}.", createdValue.getUniqueId(), propertyId, error);
1138 log.debug("Before creating relation from property value {} toProperty {} statusIs {}.", createdValue, propertyData.getUniqueId(), error);
1140 log.debug("After cloning property values {} ofCI {} statusIs {}.", propertyValueID, capabilityInstanceId, error);
1141 if (error == null) {
1142 return Either.left(createdValue);
1144 return Either.right(error);
1147 private TitanOperationStatus cloneAssociatePropertyValue(TitanVertex capabilityInstanceVertex, ImmutablePair<TitanVertex, Edge> propertyValuePair) {
1148 TitanOperationStatus error = null;
1149 TitanVertex propertyVertex = propertyValuePair.getLeft();
1150 String propertyValueID = (String) titanGenericDao.getProperty(propertyVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
1151 String capabilityInstanceId = (String) titanGenericDao.getProperty(capabilityInstanceVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
1152 if (log.isTraceEnabled()) {
1153 log.trace("Before cloning property values {} {} {}", propertyValueID, ofCI, capabilityInstanceId);
1156 Map<String, Object> props = titanGenericDao.getProperties(propertyValuePair.getRight());
1157 PropertyData propertyData = new PropertyData();
1158 String propertyId = (String) props.get(GraphPropertiesDictionary.PROPERTY_ID.name());
1159 propertyData.getPropertyDataDefinition().setUniqueId(propertyId);
1161 String propertyType = (String) titanGenericDao.getProperty(propertyVertex, GraphPropertiesDictionary.TYPE.getProperty());
1162 String propertyValueStr = (String) titanGenericDao.getProperty(propertyVertex, GraphPropertiesDictionary.VALUE.getProperty());
1164 PropertyValueData propertyValue = buildPropertyValueData((String) props.get(GraphPropertiesDictionary.PROPERTY_NAME.name()), propertyType, propertyValueStr, capabilityInstanceId);
1165 TitanVertex createdValue = null;
1166 TitanOperationStatus createRelationRes;
1168 log.trace("Before creating property values node {} {} ", propertyValue.getUniqueId(), onGraph);
1169 Either<TitanVertex, TitanOperationStatus> createValueRes = titanGenericDao.createNode(propertyValue);
1170 String capabiltyInstId = (String) titanGenericDao.getProperty(capabilityInstanceVertex, GraphPropertiesDictionary.UNIQUE_ID.getProperty());
1171 if (createValueRes.isRight()) {
1172 error = createValueRes.right().value();
1173 if (log.isDebugEnabled()) {
1174 log.debug("Failed to create property value for capability instance {} {} {} {}", capabiltyInstId, ofRI, statusIs, error);
1177 if (log.isTraceEnabled()) {
1178 log.trace("After creating property values node {} {} {} {} ", propertyValue.getUniqueId(), onGraph, statusIs, error);
1180 if (error == null) {
1181 createdValue = createValueRes.left().value();
1182 log.trace("Before creating relation from capability instance {} {} {}", capabilityInstanceId, toValue, propertyValue.getUniqueId());
1183 createRelationRes = titanGenericDao.createEdge(capabilityInstanceVertex, createdValue, GraphEdgeLabels.PROPERTY_VALUE, props);
1184 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
1185 error = createRelationRes;
1186 if (log.isDebugEnabled()) {
1187 log.debug("Failed to create relation from capability instance {} {} {} {} {}", capabiltyInstId, toValue, propertyValue.getUniqueId(), statusIs, error);
1190 if (log.isTraceEnabled()) {
1191 log.trace("After creating relation from capability instance {} {} {} {} {} ", capabilityInstanceId, toValue, propertyValue.getUniqueId(), statusIs, error);
1194 if (error == null) {
1195 log.trace("Before creating relation from property value {} {} {} ", createdValue, toProperty, propertyData.getUniqueId());
1196 createRelationRes = titanGenericDao.createEdge(createdValue, propertyData, GraphEdgeLabels.PROPERTY_IMPL, props);
1197 if (!createRelationRes.equals(TitanOperationStatus.OK)) {
1198 error = createRelationRes;
1199 if (log.isDebugEnabled()) {
1200 log.debug("Failed to create relation from property value {} {} {} {} {}", propertyValue.getUniqueId(), toProperty, propertyId, statusIs, error);
1203 if (log.isTraceEnabled()) {
1204 log.trace("Before creating relation from property value c", createdValue, toProperty, propertyData.getUniqueId(), statusIs, error);
1207 if (log.isTraceEnabled()) {
1208 log.trace("After cloning property values {} {} {} {} {}", propertyValueID, ofCI, capabilityInstanceId, statusIs, error);
1210 if (error == null) {
1211 return TitanOperationStatus.OK;