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 fj.data.Either;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
29 import java.util.Map.Entry;
31 import java.util.stream.Collectors;
32 import javax.annotation.Resource;
33 import org.apache.commons.lang3.tuple.ImmutablePair;
34 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
35 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
36 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
37 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
38 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
39 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
40 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
41 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
42 import org.openecomp.sdc.be.datatypes.elements.InterfaceDataDefinition;
43 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
44 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
45 import org.openecomp.sdc.be.model.ArtifactDefinition;
46 import org.openecomp.sdc.be.model.InterfaceDefinition;
47 import org.openecomp.sdc.be.model.Operation;
48 import org.openecomp.sdc.be.model.normatives.ElementTypeEnum;
49 import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
50 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
51 import org.openecomp.sdc.be.resources.data.ArtifactData;
52 import org.openecomp.sdc.be.resources.data.InterfaceData;
53 import org.openecomp.sdc.be.resources.data.ModelData;
54 import org.openecomp.sdc.be.resources.data.OperationData;
55 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
56 import org.openecomp.sdc.be.resources.data.UniqueIdData;
57 import org.openecomp.sdc.common.log.wrappers.Logger;
58 import org.springframework.stereotype.Component;
60 @Component("interface-operation")
61 public class InterfaceLifecycleOperation implements IInterfaceLifecycleOperation {
63 private static final Logger log = Logger.getLogger(InterfaceLifecycleOperation.class.getName());
64 private static final String FAILED_TO_FIND_OPERATION = "Failed to find operation {} on interface {}";
65 private static final String FAILED_TO_FIND_ARTIFACT = "Failed to add artifact {} to interface {}";
66 @javax.annotation.Resource
67 private ArtifactOperation artifactOperation;
68 @javax.annotation.Resource
69 private JanusGraphGenericDao janusGraphGenericDao;
71 private ModelOperation modelOperation;
73 public InterfaceLifecycleOperation() {
78 public Either<InterfaceDefinition, StorageOperationStatus> addInterfaceToResource(InterfaceDefinition interf, String resourceId,
79 String interfaceName, boolean inTransaction) {
80 return createInterfaceOnResource(interf, resourceId, interfaceName, true, inTransaction);
83 private Either<OperationData, JanusGraphOperationStatus> addOperationToGraph(InterfaceDefinition interf, String opName, Operation op,
84 InterfaceData interfaceData) {
85 op.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId((String) interfaceData.getUniqueId(), opName));
86 OperationData operationData = new OperationData(op);
87 log.debug("Before adding operation to graph {}", operationData);
88 Either<OperationData, JanusGraphOperationStatus> createOpNodeResult = janusGraphGenericDao.createNode(operationData, OperationData.class);
89 log.debug("After adding operation to graph {}", operationData);
90 if (createOpNodeResult.isRight()) {
91 JanusGraphOperationStatus opStatus = createOpNodeResult.right().value();
92 log.error("Failed to add operation {} to graph. status is {}", opName, opStatus);
93 return Either.right(opStatus);
95 Map<String, Object> props = new HashMap<>();
96 props.put(GraphPropertiesDictionary.NAME.getProperty(), opName);
97 Either<GraphRelation, JanusGraphOperationStatus> createRelResult = janusGraphGenericDao
98 .createRelation(interfaceData, operationData, GraphEdgeLabels.INTERFACE_OPERATION, props);
99 if (createRelResult.isRight()) {
100 JanusGraphOperationStatus operationStatus = createOpNodeResult.right().value();
101 log.error("Failed to associate operation {} to property {} in graph. status is {}", interfaceData.getUniqueId(), opName, operationStatus);
102 return Either.right(operationStatus);
104 return Either.left(createOpNodeResult.left().value());
107 private InterfaceDefinition convertInterfaceDataToInterfaceDefinition(InterfaceData interfaceData) {
108 log.debug("The object returned after create interface is {}", interfaceData);
109 final InterfaceDefinition interfaceDefinition = new InterfaceDefinition(interfaceData.getInterfaceDataDefinition());
110 interfaceDefinition.setModel(getModelAssociatedToInterface(interfaceData.getUniqueId()));
111 return interfaceDefinition;
114 private Operation convertOperationDataToOperation(OperationData operationData) {
115 log.debug("The object returned after create operation is {}", operationData);
116 return new Operation(operationData.getOperationDataDefinition());
119 private Either<InterfaceData, JanusGraphOperationStatus> addInterfaceToGraph(InterfaceDefinition interfaceInfo, String interfaceName,
121 InterfaceData interfaceData = new InterfaceData(interfaceInfo);
122 ResourceMetadataData resourceData = new ResourceMetadataData();
123 resourceData.getMetadataDataDefinition().setUniqueId(resourceId);
124 String interfaceNameSplitted = getShortInterfaceName(interfaceInfo);
125 interfaceInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, interfaceNameSplitted));
126 Either<InterfaceData, JanusGraphOperationStatus> existInterface = janusGraphGenericDao
127 .getNode(interfaceData.getUniqueIdKey(), interfaceData.getUniqueId(), InterfaceData.class);
128 if (existInterface.isRight()) {
129 return createInterfaceNodeAndRelation(interfaceNameSplitted, resourceId, interfaceData, resourceData);
131 log.debug("Interface {} already exist", interfaceData.getUniqueId());
132 return Either.right(JanusGraphOperationStatus.ALREADY_EXIST);
136 private Either<InterfaceData, JanusGraphOperationStatus> createInterfaceNodeAndRelation(String interfaceName, String resourceId,
137 InterfaceData interfaceData,
138 ResourceMetadataData resourceData) {
139 log.debug("Before adding interface to graph {}", interfaceData);
140 Either<InterfaceData, JanusGraphOperationStatus> createNodeResult = janusGraphGenericDao.createNode(interfaceData, InterfaceData.class);
141 log.debug("After adding property to graph {}", interfaceData);
142 if (createNodeResult.isRight()) {
143 JanusGraphOperationStatus operationStatus = createNodeResult.right().value();
144 log.error("Failed to add interface {} to graph. status is {}", interfaceName, operationStatus);
145 return Either.right(operationStatus);
147 Map<String, Object> props = new HashMap<>();
148 props.put(GraphPropertiesDictionary.NAME.getProperty(), interfaceName);
149 Either<GraphRelation, JanusGraphOperationStatus> createRelResult = janusGraphGenericDao
150 .createRelation(resourceData, interfaceData, GraphEdgeLabels.INTERFACE, props);
151 if (createRelResult.isRight()) {
152 JanusGraphOperationStatus operationStatus = createNodeResult.right().value();
153 log.error("Failed to associate resource {} to property {} in graph. status is {}", resourceId, interfaceName, operationStatus);
154 return Either.right(operationStatus);
156 return Either.left(createNodeResult.left().value());
159 private Either<OperationData, JanusGraphOperationStatus> createOperationNodeAndRelation(String operationName, OperationData operationData,
160 InterfaceData interfaceData) {
161 log.debug("Before adding operation to graph {}", operationData);
162 Either<OperationData, JanusGraphOperationStatus> createNodeResult = janusGraphGenericDao.createNode(operationData, OperationData.class);
163 log.debug("After adding operation to graph {}", interfaceData);
164 if (createNodeResult.isRight()) {
165 JanusGraphOperationStatus operationStatus = createNodeResult.right().value();
166 log.error("Failed to add interfoperationce {} to graph. status is {}", operationName, operationStatus);
167 return Either.right(operationStatus);
169 Map<String, Object> props = new HashMap<>();
170 props.put(GraphPropertiesDictionary.NAME.getProperty(), operationName);
171 Either<GraphRelation, JanusGraphOperationStatus> createRelResult = janusGraphGenericDao
172 .createRelation(interfaceData, operationData, GraphEdgeLabels.INTERFACE_OPERATION, props);
173 if (createRelResult.isRight()) {
174 JanusGraphOperationStatus operationStatus = createNodeResult.right().value();
175 log.error("Failed to associate operation {} to interface {} in graph. status is {}", operationName, interfaceData.getUniqueId(),
177 return Either.right(operationStatus);
179 return Either.left(createNodeResult.left().value());
183 public Either<Map<String, InterfaceDefinition>, StorageOperationStatus> getAllInterfacesOfResource(String resourceIdn, boolean recursively) {
184 return getAllInterfacesOfResource(resourceIdn, recursively, false);
188 public Either<Map<String, InterfaceDefinition>, StorageOperationStatus> getAllInterfacesOfResource(String resourceId, boolean recursively,
189 boolean inTransaction) {
190 Either<Map<String, InterfaceDefinition>, StorageOperationStatus> result = null;
191 Map<String, InterfaceDefinition> interfaces = new HashMap<>();
193 if ((resourceId == null) || resourceId.isEmpty()) {
194 log.error("resourceId is empty");
195 result = Either.right(StorageOperationStatus.INVALID_ID);
198 JanusGraphOperationStatus findInterfacesRes = JanusGraphOperationStatus.GENERAL_ERROR;
200 findInterfacesRes = findAllInterfacesRecursively(resourceId, interfaces);
202 findInterfacesRes = findAllInterfacesNotRecursively(resourceId, interfaces);
204 if (!findInterfacesRes.equals(JanusGraphOperationStatus.OK)) {
205 log.error("Failed to get all interfaces of resource {}. status is {}", resourceId, findInterfacesRes);
206 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(findInterfacesRes));
209 result = Either.left(interfaces);
212 if (!inTransaction) {
213 if (result == null || result.isRight()) {
214 log.error("Going to execute rollback on graph.");
215 janusGraphGenericDao.rollback();
217 log.debug("Going to execute commit on graph.");
218 janusGraphGenericDao.commit();
224 private JanusGraphOperationStatus findAllInterfacesNotRecursively(String resourceId, Map<String, InterfaceDefinition> interfaces) {
225 Either<List<ImmutablePair<InterfaceData, GraphEdge>>, JanusGraphOperationStatus> interfaceNodes = janusGraphGenericDao
226 .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, GraphEdgeLabels.INTERFACE, NodeTypeEnum.Interface,
227 InterfaceData.class);
228 if (interfaceNodes.isRight()) {
229 JanusGraphOperationStatus status = interfaceNodes.right().value();
230 if (status != JanusGraphOperationStatus.NOT_FOUND) {
234 List<ImmutablePair<InterfaceData, GraphEdge>> interfaceList = interfaceNodes.left().value();
235 if (interfaceList != null) {
236 for (ImmutablePair<InterfaceData, GraphEdge> interfacePair : interfaceList) {
237 String interfaceUniqueId = (String) interfacePair.getKey().getUniqueId();
238 Either<String, JanusGraphOperationStatus> interfaceNameRes = getPropertyValueFromEdge(interfacePair.getValue(),
239 GraphPropertiesDictionary.NAME);
240 if (interfaceNameRes.isRight()) {
241 log.error("The requirement name is missing on the edge of requirement {}", interfaceUniqueId);
242 return interfaceNameRes.right().value();
244 String interfaceName = interfaceNameRes.left().value();
245 Either<InterfaceDefinition, JanusGraphOperationStatus> interfaceDefRes = getNonRecursiveInterface(interfacePair.getKey());
246 if (interfaceDefRes.isRight()) {
247 JanusGraphOperationStatus status = interfaceDefRes.right().value();
248 log.error("Failed to get interface actions of interface {}", interfaceUniqueId);
251 InterfaceDefinition interfaceDefinition = interfaceDefRes.left().value();
252 if (interfaces.containsKey(interfaceName)) {
253 log.debug("The interface {} was already defined in dervied resource. add not overriden operations", interfaceName);
254 InterfaceDefinition existInterface = interfaces.get(interfaceName);
255 addMissingOperationsToInterface(interfaceDefinition, existInterface);
257 interfaces.put(interfaceName, interfaceDefinition);
262 return JanusGraphOperationStatus.OK;
265 public JanusGraphOperationStatus findAllInterfacesRecursively(String resourceId, Map<String, InterfaceDefinition> interfaces) {
266 JanusGraphOperationStatus findAllInterfacesNotRecursively = findAllInterfacesNotRecursively(resourceId, interfaces);
267 if (!findAllInterfacesNotRecursively.equals(JanusGraphOperationStatus.OK)) {
268 log.error("failed to get interfaces for resource {}. status is {}", resourceId, findAllInterfacesNotRecursively);
270 Either<ImmutablePair<ResourceMetadataData, GraphEdge>, JanusGraphOperationStatus> parentNodes = janusGraphGenericDao
271 .getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Resource), resourceId, GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.Resource,
272 ResourceMetadataData.class);
273 if (parentNodes.isRight()) {
274 JanusGraphOperationStatus parentNodesStatus = parentNodes.right().value();
275 if (parentNodesStatus == JanusGraphOperationStatus.NOT_FOUND) {
276 log.debug("Finish to lookup for parnet interfaces");
277 return JanusGraphOperationStatus.OK;
279 log.error("Failed to find parent interfaces of resource {}. status is {}", resourceId, parentNodesStatus);
280 return parentNodesStatus;
283 ImmutablePair<ResourceMetadataData, GraphEdge> parentNodePair = parentNodes.left().value();
284 String parentUniqueId = parentNodePair.getKey().getMetadataDataDefinition().getUniqueId();
285 JanusGraphOperationStatus addParentIntStatus = findAllInterfacesRecursively(parentUniqueId, interfaces);
286 if (addParentIntStatus != JanusGraphOperationStatus.OK) {
287 log.error("Failed to fetch all interfaces of resource {}", parentUniqueId);
288 return addParentIntStatus;
290 return JanusGraphOperationStatus.OK;
293 private Either<String, JanusGraphOperationStatus> getPropertyValueFromEdge(GraphEdge edge, GraphPropertiesDictionary property) {
294 Map<String, Object> edgeProps = edge.getProperties();
295 String interfaceName = null;
296 if (edgeProps != null) {
297 interfaceName = (String) edgeProps.get(property.getProperty());
298 if (interfaceName == null) {
299 return Either.right(JanusGraphOperationStatus.INVALID_ELEMENT);
302 return Either.right(JanusGraphOperationStatus.INVALID_ELEMENT);
304 return Either.left(interfaceName);
307 private Either<InterfaceDefinition, JanusGraphOperationStatus> getNonRecursiveInterface(InterfaceData interfaceData) {
308 log.debug("Going to fetch the operations associate to interface {}", interfaceData.getUniqueId());
309 InterfaceDefinition interfaceDefinition = new InterfaceDefinition(interfaceData.getInterfaceDataDefinition());
310 String interfaceId = interfaceData.getUniqueId();
311 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> operationsRes = janusGraphGenericDao
312 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), interfaceId, GraphEdgeLabels.INTERFACE_OPERATION,
313 NodeTypeEnum.InterfaceOperation, OperationData.class);
314 if (operationsRes.isRight()) {
315 JanusGraphOperationStatus status = operationsRes.right().value();
316 if (status != JanusGraphOperationStatus.NOT_FOUND) {
317 return Either.right(status);
319 return Either.left(interfaceDefinition);
322 List<ImmutablePair<OperationData, GraphEdge>> operationList = operationsRes.left().value();
323 if (operationList != null && !operationList.isEmpty()) {
324 for (ImmutablePair<OperationData, GraphEdge> operationPair : operationList) {
325 Operation operation = new Operation(operationPair.getKey().getOperationDataDefinition());
326 Either<String, JanusGraphOperationStatus> operationNameRes = getPropertyValueFromEdge(operationPair.getValue(),
327 GraphPropertiesDictionary.NAME);
328 if (operationNameRes.isRight()) {
329 log.error("The operation name is missing on the edge of operation {}", operationPair.getKey().getUniqueId());
330 return Either.right(operationNameRes.right().value());
332 String operationName = operationNameRes.left().value();
333 findOperationImplementation(operation);
334 interfaceDefinition.getOperations().put(operationName, operation);
337 return Either.left(interfaceDefinition);
340 private StorageOperationStatus findOperationImplementation(Operation operation) {
341 String operationId = operation.getUniqueId();
342 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> artifactsRes = artifactOperation
343 .getArtifacts(operationId, NodeTypeEnum.InterfaceOperation, true);
344 if (artifactsRes.isRight() || artifactsRes.left().value() == null) {
345 log.error("failed to get artifact from graph for operation id {}. status is {}", operationId, artifactsRes.right().value());
346 return artifactsRes.right().value();
348 Map<String, ArtifactDefinition> artifacts = artifactsRes.left().value();
349 Iterator<String> iter = artifacts.keySet().iterator();
350 if (iter.hasNext()) {
351 operation.setImplementation(artifacts.get(iter.next()));
354 return StorageOperationStatus.OK;
357 private StorageOperationStatus addMissingOperationsToInterface(InterfaceDefinition interfaceDefinition, InterfaceDefinition existInterface) {
358 Map<String, Operation> existOperations = existInterface.getOperationsMap();
359 Map<String, Operation> operations = interfaceDefinition.getOperationsMap();
360 if (operations != null && !operations.isEmpty()) {
361 Set<Entry<String, Operation>> operationsSet = operations.entrySet();
362 for (Entry<String, Operation> operation : operationsSet) {
363 if (!existOperations.containsKey(operation.getKey())) {
364 existOperations.put(operation.getKey(), operation.getValue());
368 return StorageOperationStatus.OK;
372 public Either<Operation, StorageOperationStatus> updateInterfaceOperation(String resourceId, String interfaceName, String operationName,
374 return updateInterfaceOperation(resourceId, interfaceName, operationName, interf, false);
378 public Either<Operation, StorageOperationStatus> updateInterfaceOperation(String resourceId, String interfaceName, String operationName,
379 Operation operation, boolean inTransaction) {
380 return updateOperationOnGraph(operation, resourceId, interfaceName, operationName);
383 private Either<Operation, StorageOperationStatus> updateOperationOnGraph(Operation operation, String resourceId, String interfaceName,
384 String operationName) {
385 Either<List<ImmutablePair<InterfaceData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes = janusGraphGenericDao
386 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), resourceId, GraphEdgeLabels.INTERFACE, NodeTypeEnum.Interface,
387 InterfaceData.class);
388 if (childrenNodes.isRight()) {
389 return updateOperationFromParentNode(operation, resourceId, interfaceName, operationName);
391 return updateExistingOperation(resourceId, operation, interfaceName, operationName, childrenNodes);
395 private Either<Operation, StorageOperationStatus> updateExistingOperation(String resourceId, Operation operation, String interfaceName,
396 String operationName,
397 Either<List<ImmutablePair<InterfaceData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes) {
398 Operation newOperation = null;
399 StorageOperationStatus storageOperationStatus = StorageOperationStatus.GENERAL_ERROR;
400 for (ImmutablePair<InterfaceData, GraphEdge> interfaceDataNode : childrenNodes.left().value()) {
401 GraphEdge interfaceEdge = interfaceDataNode.getRight();
402 Map<String, Object> interfaceEdgeProp = interfaceEdge.getProperties();
403 InterfaceData interfaceData = interfaceDataNode.getKey();
404 if (interfaceEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(interfaceName)) {
405 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> operationRes = janusGraphGenericDao
406 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) interfaceDataNode.getLeft().getUniqueId(),
407 GraphEdgeLabels.INTERFACE_OPERATION, NodeTypeEnum.InterfaceOperation, OperationData.class);
408 if (operationRes.isRight()) {
409 log.error(FAILED_TO_FIND_OPERATION, operationName, interfaceName);
410 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationRes.right().value()));
412 List<ImmutablePair<OperationData, GraphEdge>> operations = operationRes.left().value();
413 for (ImmutablePair<OperationData, GraphEdge> operationPairEdge : operations) {
414 GraphEdge opEdge = operationPairEdge.getRight();
415 OperationData opData = operationPairEdge.getLeft();
416 Map<String, Object> opEdgeProp = opEdge.getProperties();
417 if (opEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(operationName)) {
418 ArtifactDefinition artifact = operation.getImplementationArtifact();
419 Either<ImmutablePair<ArtifactData, GraphEdge>, JanusGraphOperationStatus> artifactRes = janusGraphGenericDao
420 .getChild(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) opData.getUniqueId(),
421 GraphEdgeLabels.ARTIFACT_REF, NodeTypeEnum.ArtifactRef, ArtifactData.class);
422 Either<ArtifactDefinition, StorageOperationStatus> artStatus;
423 if (artifactRes.isRight()) {
424 artStatus = artifactOperation.addArifactToComponent(artifact, (String) operationPairEdge.getLeft().getUniqueId(),
425 NodeTypeEnum.InterfaceOperation, true, true);
427 artStatus = artifactOperation.updateArifactOnResource(artifact, (String) operationPairEdge.getLeft().getUniqueId(),
428 (String) artifactRes.left().value().getLeft().getUniqueId(), NodeTypeEnum.InterfaceOperation, true);
430 if (artStatus.isRight()) {
431 janusGraphGenericDao.rollback();
432 log.error(FAILED_TO_FIND_ARTIFACT, operationName, interfaceName);
433 return Either.right(artStatus.right().value());
435 newOperation = this.convertOperationDataToOperation(opData);
436 newOperation.setImplementation(artStatus.left().value());
440 if (newOperation == null) {
441 Either<InterfaceData, JanusGraphOperationStatus> parentInterfaceStatus = findInterfaceOnParentNode(resourceId, interfaceName);
442 if (parentInterfaceStatus.isRight()) {
443 log.debug("Interface {} not exist", interfaceName);
444 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(parentInterfaceStatus.right().value()));
446 InterfaceData parentInterfaceData = parentInterfaceStatus.left().value();
447 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> opRes = janusGraphGenericDao
448 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) parentInterfaceData.getUniqueId(),
449 GraphEdgeLabels.INTERFACE_OPERATION, NodeTypeEnum.InterfaceOperation, OperationData.class);
450 if (opRes.isRight()) {
451 log.error(FAILED_TO_FIND_OPERATION, operationName, interfaceName);
452 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationRes.right().value()));
454 List<ImmutablePair<OperationData, GraphEdge>> parentOperations = opRes.left().value();
455 for (ImmutablePair<OperationData, GraphEdge> operationPairEdge : parentOperations) {
456 GraphEdge opEdge = operationPairEdge.getRight();
457 OperationData opData = operationPairEdge.getLeft();
458 Map<String, Object> opEdgeProp = opEdge.getProperties();
459 if (opEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(operationName)) {
460 return copyAndCreateNewOperation(operation, interfaceName, operationName, null, interfaceData, operationRes,
469 storageOperationStatus = StorageOperationStatus.ARTIFACT_NOT_FOUND;
472 if (newOperation == null) {
473 return Either.right(storageOperationStatus);
475 return Either.left(newOperation);
479 private Either<Operation, StorageOperationStatus> copyAndCreateNewOperation(Operation operation, String interfaceName, String operationName,
480 Operation newOperation, InterfaceData interfaceData,
481 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> operationRes,
482 OperationData opData) {
483 OperationDataDefinition opDataInfo = opData.getOperationDataDefinition();
484 OperationDataDefinition newOperationInfo = new OperationDataDefinition(opDataInfo);
485 newOperationInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(interfaceData.getUniqueId(), operationName.toLowerCase()));
486 OperationData newopData = new OperationData(newOperationInfo);
487 Either<OperationData, JanusGraphOperationStatus> operationStatus = createOperationNodeAndRelation(operationName, newopData, interfaceData);
488 if (operationStatus.isRight()) {
489 log.error("Failed to create operation {} on interface {}", operationName, interfaceName);
490 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationRes.right().value()));
492 ArtifactDefinition artifact = operation.getImplementationArtifact();
493 if (artifact != null) {
494 Either<ArtifactDefinition, StorageOperationStatus> artStatus = artifactOperation
495 .addArifactToComponent(artifact, (String) operationStatus.left().value().getUniqueId(), NodeTypeEnum.InterfaceOperation, true, true);
496 if (artStatus.isRight()) {
497 janusGraphGenericDao.rollback();
498 log.error(FAILED_TO_FIND_ARTIFACT, operationName, interfaceName);
500 newOperation = this.convertOperationDataToOperation(opData);
501 newOperation.setImplementation(artStatus.left().value());
504 return Either.left(newOperation);
507 private Either<Operation, StorageOperationStatus> updateOperationFromParentNode(Operation operation, String resourceId, String interfaceName,
508 String operationName) {
509 // Operation newOperation = null;
510 ResourceMetadataData resourceData = new ResourceMetadataData();
511 resourceData.getMetadataDataDefinition().setUniqueId(resourceId);
512 Either<InterfaceData, JanusGraphOperationStatus> parentInterfaceStatus = findInterfaceOnParentNode(resourceId, interfaceName);
513 if (parentInterfaceStatus.isRight()) {
514 log.debug("Interface {} not exist", interfaceName);
515 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(parentInterfaceStatus.right().value()));
517 InterfaceData interfaceData = parentInterfaceStatus.left().value();
518 InterfaceDataDefinition intDataDefinition = interfaceData.getInterfaceDataDefinition();
519 InterfaceDataDefinition newInterfaceInfo = new InterfaceDataDefinition(intDataDefinition);
520 String interfaceNameSplitted = getShortInterfaceName(intDataDefinition);
521 newInterfaceInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, interfaceNameSplitted));
522 InterfaceData updatedInterfaceData = new InterfaceData(newInterfaceInfo);
523 Either<InterfaceData, JanusGraphOperationStatus> createStatus = createInterfaceNodeAndRelation(interfaceName, resourceId,
524 updatedInterfaceData, resourceData);
525 if (createStatus.isRight()) {
526 log.debug("failed to create interface node {} on resource {}", interfaceName, resourceId);
527 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(createStatus.right().value()));
529 InterfaceData newInterfaceNode = createStatus.left().value();
530 Either<GraphRelation, JanusGraphOperationStatus> createRelResult = janusGraphGenericDao
531 .createRelation(newInterfaceNode, interfaceData, GraphEdgeLabels.DERIVED_FROM, null);
532 if (createRelResult.isRight()) {
533 JanusGraphOperationStatus operationStatus = createRelResult.right().value();
534 log.error("Failed to associate interface {} to interface {} in graph. status is {}", interfaceData.getUniqueId(),
535 newInterfaceNode.getUniqueId(), operationStatus);
536 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationStatus));
538 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> operationRes = janusGraphGenericDao
539 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) interfaceData.getUniqueId(),
540 GraphEdgeLabels.INTERFACE_OPERATION, NodeTypeEnum.InterfaceOperation, OperationData.class);
541 if (operationRes.isRight()) {
542 log.error(FAILED_TO_FIND_OPERATION, operationName, interfaceName);
543 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationRes.right().value()));
545 List<ImmutablePair<OperationData, GraphEdge>> operations = operationRes.left().value();
546 for (ImmutablePair<OperationData, GraphEdge> operationPairEdge : operations) {
547 GraphEdge opEdge = operationPairEdge.getRight();
548 OperationData opData = operationPairEdge.getLeft();
549 Map<String, Object> opEdgeProp = opEdge.getProperties();
550 if (opEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(operationName)) {
551 return copyAndCreateNewOperation(operation, interfaceName, operationName, null, // changed
556 newInterfaceNode, operationRes, opData);
560 return Either.right(StorageOperationStatus.GENERAL_ERROR);
563 private Either<InterfaceData, JanusGraphOperationStatus> findInterfaceOnParentNode(String resourceId, String interfaceName) {
564 Either<ImmutablePair<ResourceMetadataData, GraphEdge>, JanusGraphOperationStatus> parentRes = janusGraphGenericDao
565 .getChild(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), resourceId, GraphEdgeLabels.DERIVED_FROM, NodeTypeEnum.Resource,
566 ResourceMetadataData.class);
567 if (parentRes.isRight()) {
568 log.debug("interface {} not found ", interfaceName);
569 return Either.right(parentRes.right().value());
571 ImmutablePair<ResourceMetadataData, GraphEdge> parenNode = parentRes.left().value();
572 Either<List<ImmutablePair<InterfaceData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes = janusGraphGenericDao
573 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), parenNode.getKey().getMetadataDataDefinition().getUniqueId(),
574 GraphEdgeLabels.INTERFACE, NodeTypeEnum.Interface, InterfaceData.class);
575 if (childrenNodes.isRight()) {
576 return findInterfaceOnParentNode(parenNode.getKey().getMetadataDataDefinition().getUniqueId(), interfaceName);
578 for (ImmutablePair<InterfaceData, GraphEdge> interfaceDataNode : childrenNodes.left().value()) {
579 GraphEdge interfaceEdge = interfaceDataNode.getRight();
580 Map<String, Object> interfaceEdgeProp = interfaceEdge.getProperties();
581 if (interfaceEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(interfaceName)) {
582 return Either.left(interfaceDataNode.getKey());
585 return findInterfaceOnParentNode(parenNode.getKey().getMetadataDataDefinition().getUniqueId(), interfaceName);
590 public Either<InterfaceDefinition, StorageOperationStatus> createInterfaceOnResource(InterfaceDefinition interf, String resourceId,
591 String interfaceName, boolean failIfExist,
592 boolean inTransaction) {
593 Either<InterfaceData, JanusGraphOperationStatus> status = addInterfaceToGraph(interf, interfaceName, resourceId);
594 if (status.isRight()) {
595 janusGraphGenericDao.rollback();
596 log.error("Failed to add interface {} to resource {}", interfaceName, resourceId);
597 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status.right().value()));
599 if (!inTransaction) {
600 janusGraphGenericDao.commit();
602 InterfaceData interfaceData = status.left().value();
603 InterfaceDefinition interfaceDefResult = convertInterfaceDataToInterfaceDefinition(interfaceData);
604 Map<String, Operation> operations = interf.getOperationsMap();
605 if (operations != null && !operations.isEmpty()) {
606 Set<String> opNames = operations.keySet();
607 Map<String, Operation> newOperations = new HashMap<>();
608 for (String operationName : opNames) {
609 Operation op = operations.get(operationName);
610 Either<OperationData, JanusGraphOperationStatus> opStatus = addOperationToGraph(interf, operationName, op, interfaceData);
611 if (status.isRight()) {
612 janusGraphGenericDao.rollback();
613 log.error("Failed to add operation {} to interface {}", operationName, interfaceName);
614 } else if (status.isLeft()) {
615 if (!inTransaction) {
616 janusGraphGenericDao.commit();
618 OperationData opData = opStatus.left().value();
619 Operation newOperation = this.convertOperationDataToOperation(opData);
620 ArtifactDefinition art = op.getImplementationArtifact();
622 Either<ArtifactDefinition, StorageOperationStatus> artRes = artifactOperation
623 .addArifactToComponent(art, (String) opData.getUniqueId(), NodeTypeEnum.InterfaceOperation, failIfExist, true);
624 if (artRes.isRight()) {
625 janusGraphGenericDao.rollback();
626 log.error(FAILED_TO_FIND_ARTIFACT, operationName, interfaceName);
628 newOperation.setImplementation(artRes.left().value());
630 newOperations.put(operationName, newOperation);
634 interfaceDefResult.setOperationsMap(newOperations);
636 log.debug("The returned InterfaceDefintion is {}", interfaceDefResult);
637 return Either.left(interfaceDefResult);
642 public Either<Operation, StorageOperationStatus> deleteInterfaceOperation(String resourceId, String interfaceName, String operationId,
643 boolean inTransaction) {
644 Either<Operation, JanusGraphOperationStatus> status = removeOperationOnGraph(resourceId, interfaceName, operationId);
645 if (status.isRight()) {
646 if (!inTransaction) {
647 janusGraphGenericDao.rollback();
649 log.error("Failed to delete operation {} of interface {} resource {}", operationId, interfaceName, resourceId);
650 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status.right().value()));
652 if (!inTransaction) {
653 janusGraphGenericDao.commit();
655 Operation opDefResult = status.left().value();
656 log.debug("The returned Operation is {}", opDefResult);
657 return Either.left(opDefResult);
661 private Either<Operation, JanusGraphOperationStatus> removeOperationOnGraph(String resourceId, String interfaceName, String operationId) {
662 log.debug("Before deleting operation from graph {}", operationId);
663 Either<List<ImmutablePair<InterfaceData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes = janusGraphGenericDao
664 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), resourceId, GraphEdgeLabels.INTERFACE, NodeTypeEnum.Interface,
665 InterfaceData.class);
666 if (childrenNodes.isRight()) {
667 log.debug("Not found interface {}", interfaceName);
668 return Either.right(childrenNodes.right().value());
670 OperationData opData = null;
671 for (ImmutablePair<InterfaceData, GraphEdge> interfaceDataNode : childrenNodes.left().value()) {
672 GraphEdge interfaceEdge = interfaceDataNode.getRight();
673 Map<String, Object> interfaceEdgeProp = interfaceEdge.getProperties();
674 String interfaceSplitedName = splitType(interfaceName);
675 if (interfaceEdgeProp.get(GraphPropertiesDictionary.NAME.getProperty()).equals(interfaceSplitedName)) {
676 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> operationRes = janusGraphGenericDao
677 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) interfaceDataNode.getLeft().getUniqueId(),
678 GraphEdgeLabels.INTERFACE_OPERATION, NodeTypeEnum.InterfaceOperation, OperationData.class);
679 if (operationRes.isRight()) {
680 log.error("Failed to find operation {} on interface {}", operationId, interfaceName);
681 return Either.right(operationRes.right().value());
683 List<ImmutablePair<OperationData, GraphEdge>> operations = operationRes.left().value();
684 for (ImmutablePair<OperationData, GraphEdge> operationPairEdge : operations) {
685 opData = operationPairEdge.getLeft();
686 if (opData.getUniqueId().equals(operationId)) {
687 Either<ImmutablePair<ArtifactData, GraphEdge>, JanusGraphOperationStatus> artifactRes = janusGraphGenericDao
688 .getChild(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), (String) operationPairEdge.getLeft().getUniqueId(),
689 GraphEdgeLabels.ARTIFACT_REF, NodeTypeEnum.ArtifactRef, ArtifactData.class);
690 Either<ArtifactDefinition, StorageOperationStatus> arStatus = null;
691 if (artifactRes.isLeft()) {
692 ArtifactData arData = artifactRes.left().value().getKey();
693 arStatus = artifactOperation
694 .removeArifactFromResource((String) operationPairEdge.getLeft().getUniqueId(), (String) arData.getUniqueId(),
695 NodeTypeEnum.InterfaceOperation, true, true);
696 if (arStatus.isRight()) {
697 log.debug("failed to delete artifact {}", arData.getUniqueId());
698 return Either.right(JanusGraphOperationStatus.INVALID_ID);
701 Either<OperationData, JanusGraphOperationStatus> deleteOpStatus = janusGraphGenericDao
702 .deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.InterfaceOperation), opData.getUniqueId(), OperationData.class);
703 if (deleteOpStatus.isRight()) {
704 log.debug("failed to delete operation {}", opData.getUniqueId());
705 return Either.right(JanusGraphOperationStatus.INVALID_ID);
707 opData = deleteOpStatus.left().value();
708 Operation operation = new Operation(opData.getOperationDataDefinition());
709 if (arStatus != null) {
710 operation.setImplementation(arStatus.left().value());
712 if (operations.size() <= 1) {
713 Either<InterfaceData, JanusGraphOperationStatus> deleteInterfaceStatus = janusGraphGenericDao
714 .deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Interface), interfaceDataNode.left.getUniqueId(),
715 InterfaceData.class);
716 if (deleteInterfaceStatus.isRight()) {
717 log.debug("failed to delete interface {}", interfaceDataNode.left.getUniqueId());
718 return Either.right(JanusGraphOperationStatus.INVALID_ID);
721 return Either.left(operation);
726 log.debug("Not found operation {}", interfaceName);
727 return Either.right(JanusGraphOperationStatus.INVALID_ID);
730 private String splitType(String interfaceName) {
731 String interfaceSplittedName;
732 String[] packageName = interfaceName.split("\\.");
733 if (packageName.length == 0) {
734 interfaceSplittedName = interfaceName;
736 interfaceSplittedName = packageName[packageName.length - 1];
738 return interfaceSplittedName.toLowerCase();
744 * @param janusGraphGenericDao
746 public void setJanusGraphGenericDao(JanusGraphGenericDao janusGraphGenericDao) {
747 this.janusGraphGenericDao = janusGraphGenericDao;
750 public void setArtifactOperation(ArtifactOperation artifactOperation) {
751 this.artifactOperation = artifactOperation;
755 public Either<InterfaceDefinition, StorageOperationStatus> createInterfaceType(InterfaceDefinition interf, boolean inTransaction) {
756 Either<InterfaceDefinition, StorageOperationStatus> result = null;
758 interf.setUniqueId(UniqueIdBuilder.buildInterfaceTypeUid(interf.getModel(), interf.getType()));
759 InterfaceData interfaceData = new InterfaceData(interf);
760 Either<InterfaceData, JanusGraphOperationStatus> existInterface = janusGraphGenericDao
761 .getNode(interfaceData.getUniqueIdKey(), interfaceData.getUniqueId(), InterfaceData.class);
762 if (existInterface.isLeft()) {
764 log.debug("Interface type already exist {}", interfaceData);
765 result = Either.right(StorageOperationStatus.ENTITY_ALREADY_EXISTS);
768 Either<InterfaceData, JanusGraphOperationStatus> createNodeResult = janusGraphGenericDao.createNode(interfaceData, InterfaceData.class);
769 log.debug("After adding property type to graph {}", interfaceData);
770 if (createNodeResult.isRight()) {
771 JanusGraphOperationStatus operationStatus = createNodeResult.right().value();
772 log.error("Failed to add interface {} to graph. status is {}", interf.getType(), operationStatus);
773 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(operationStatus));
776 InterfaceDefinition interfaceDefResult = convertInterfaceDataToInterfaceDefinition(interfaceData);
777 Map<String, Operation> operations = interf.getOperationsMap();
778 if (operations != null && !operations.isEmpty()) {
779 Map<String, Operation> newOperations = new HashMap<>();
780 for (Map.Entry<String, Operation> operation : operations.entrySet()) {
781 Either<OperationData, JanusGraphOperationStatus> opStatus = addOperationToGraph(interf, operation.getKey(), operation.getValue(),
783 if (opStatus.isRight()) {
784 janusGraphGenericDao.rollback();
785 log.error("Failed to add operation {} to interface {}", operation.getKey(), interf.getType());
786 result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(opStatus.right().value()));
789 OperationData opData = opStatus.left().value();
790 Operation newOperation = this.convertOperationDataToOperation(opData);
791 newOperations.put(operation.getKey(), newOperation);
794 interfaceDefResult.setOperationsMap(newOperations);
796 final Either<GraphRelation, StorageOperationStatus> modelRelationship = addInterfaceTypeToModel(interf);
797 if (modelRelationship.isRight()) {
798 return Either.right(modelRelationship.right().value());
801 result = Either.left(interfaceDefResult);
804 if (!inTransaction) {
805 if (result == null || result.isRight()) {
806 log.error("Going to execute rollback on graph.");
807 janusGraphGenericDao.rollback();
809 log.debug("Going to execute commit on graph.");
810 janusGraphGenericDao.commit();
816 private Either<GraphRelation, StorageOperationStatus> addInterfaceTypeToModel(final InterfaceDefinition interfaceDefinition) {
817 final String model = interfaceDefinition.getModel();
819 return Either.left(null);
821 final GraphNode from = new UniqueIdData(NodeTypeEnum.Model, UniqueIdBuilder.buildModelUid(model));
822 final GraphNode to = new UniqueIdData(NodeTypeEnum.Interface, interfaceDefinition.getUniqueId());
823 log.info("Connecting model {} to type {}", from, to);
824 return janusGraphGenericDao.createRelation(from, to, GraphEdgeLabels.MODEL_ELEMENT, Collections.emptyMap()).right()
825 .map(DaoStatusConverter::convertJanusGraphStatusToStorageStatus);
829 public Either<InterfaceDefinition, StorageOperationStatus> getInterface(String interfaceId) {
830 Either<InterfaceData, JanusGraphOperationStatus> getResult = janusGraphGenericDao
831 .getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Interface), interfaceId, InterfaceData.class);
832 if (getResult.isLeft()) {
833 InterfaceData interfaceData = getResult.left().value();
834 return Either.left(convertInterfaceDataToInterfaceDefinition(interfaceData));
836 JanusGraphOperationStatus janusGraphStatus = getResult.right().value();
837 log.debug("Node with id {} was not found in the graph. status: {}", interfaceId, janusGraphStatus);
838 StorageOperationStatus storageOperationStatus = DaoStatusConverter.convertJanusGraphStatusToStorageStatus(janusGraphStatus);
839 return Either.right(storageOperationStatus);
843 public String getShortInterfaceName(InterfaceDataDefinition interfaceDefinition) {
844 String[] packageName = interfaceDefinition.getType().split("\\.");
845 String interfaceName;
846 if (packageName.length == 0) {
847 interfaceName = interfaceDefinition.getType();
849 interfaceName = packageName[packageName.length - 1];
851 return interfaceName.toLowerCase();
854 public Either<InterfaceDefinition, StorageOperationStatus> createInterfaceType(InterfaceDefinition interf) {
855 return createInterfaceType(interf, false);
859 public Either<Map<String, InterfaceDefinition>, StorageOperationStatus> getAllInterfaceLifecycleTypes(final String model) {
860 Either<List<InterfaceData>, JanusGraphOperationStatus> allInterfaceLifecycleTypes = janusGraphGenericDao
861 .getByCriteriaForModel(NodeTypeEnum.Interface, Collections.emptyMap(), model, InterfaceData.class);
862 if (allInterfaceLifecycleTypes.isRight()) {
863 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(allInterfaceLifecycleTypes.right().value()));
865 Map<String, InterfaceDefinition> interfaceTypes = new HashMap<>();
866 List<InterfaceData> interfaceDataList = allInterfaceLifecycleTypes.left().value();
867 List<InterfaceDefinition> interfaceDefinitions = interfaceDataList.stream().map(this::convertInterfaceDataToInterfaceDefinition)
868 .filter(interfaceDefinition -> interfaceDefinition.getUniqueId()
869 .equalsIgnoreCase(UniqueIdBuilder.buildInterfaceTypeUid(interfaceDefinition.getModel(), interfaceDefinition.getType()))
870 ).collect(Collectors.toList());
871 for (InterfaceDefinition interfaceDefinition : interfaceDefinitions) {
872 Either<List<ImmutablePair<OperationData, GraphEdge>>, JanusGraphOperationStatus> childrenNodes = janusGraphGenericDao
873 .getChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), interfaceDefinition.getUniqueId(),
874 GraphEdgeLabels.INTERFACE_OPERATION, NodeTypeEnum.InterfaceOperation, OperationData.class);
875 if (childrenNodes.isLeft()) {
876 Map<String, OperationDataDefinition> operationsDataDefinitionMap = new HashMap<>();
877 for (ImmutablePair<OperationData, GraphEdge> operation : childrenNodes.left().value()) {
878 OperationData operationData = operation.getLeft();
879 operationsDataDefinitionMap.put(operationData.getUniqueId(), operationData.getOperationDataDefinition());
881 interfaceDefinition.setOperations(operationsDataDefinitionMap);
883 interfaceTypes.put(interfaceDefinition.getUniqueId(), interfaceDefinition);
885 return Either.left(interfaceTypes);
888 private String getModelAssociatedToInterface(String uid) {
889 final Either<ImmutablePair<ModelData, GraphEdge>, JanusGraphOperationStatus> model = janusGraphGenericDao.getParentNode(
890 UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Interface), uid, GraphEdgeLabels.MODEL_ELEMENT,
891 NodeTypeEnum.Model, ModelData.class);
892 if (model.isLeft()) {
893 return model.left().value().getLeft().getName();
898 public void deleteInterfaceTypeById(String interfaceTypeId) {
899 try (final GraphTraversalSource traversal = janusGraphGenericDao.getJanusGraph().traversal()) {
901 .has(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), interfaceTypeId)
902 .out(GraphEdgeLabels.INTERFACE_OPERATION.getProperty())
904 .forEach(interfaceOperationVertex -> {
905 traversal.V(interfaceOperationVertex).out(GraphEdgeLabels.PROPERTY.getProperty()).drop().iterate();
906 interfaceOperationVertex.remove();
908 traversal.V().has(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), interfaceTypeId).toList()
909 .forEach(interfaceTypeVertex -> {
910 traversal.V(interfaceTypeVertex).out(GraphEdgeLabels.PROPERTY.getProperty()).drop().iterate();
911 interfaceTypeVertex.remove();
913 } catch (Exception e) {
914 log.error("Failed to delete interface type {} and interface operations in graph. {}", interfaceTypeId, e);
918 public void removeInterfaceTypeFromAdditionalType(InterfaceDefinition interfaceDefinition) {
919 modelOperation.removeTypeFromAdditionalType(ElementTypeEnum.INTERFACE_LIFECYCLE_TYPE, interfaceDefinition.getModel(),
920 interfaceDefinition.getType());