aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-model
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-model')
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperation.java224
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/TopologyTemplateOperation.java36
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtils.java62
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IInterfaceLifecycleOperation.java2
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiComponentDataTransfer.java11
-rw-r--r--catalog-model/src/test/java/org/openecomp/sdc/be/model/ResourceTest.java1
-rw-r--r--catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfacesOperationTest.java (renamed from catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperationTest.java)115
-rw-r--r--catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtilsTest.java50
8 files changed, 406 insertions, 95 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperation.java
index 4aec886092..f9f2ce9b35 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperation.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperation.java
@@ -17,75 +17,223 @@
package org.openecomp.sdc.be.model.jsontitan.operations;
import fj.data.Either;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.UUID;
+import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
+import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
-import org.openecomp.sdc.be.datatypes.elements.InterfaceDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.InterfaceDefinition;
+import org.openecomp.sdc.be.model.Operation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
+import org.springframework.beans.factory.annotation.Autowired;
@org.springframework.stereotype.Component("interfaces-operation")
public class InterfaceOperation extends BaseOperation {
- public Either<List<InterfaceDefinition>, StorageOperationStatus> addInterfaces(String componentId, List<InterfaceDefinition> interfaceDefinitions) {
- return addOrUpdateInterfaces(false, componentId, interfaceDefinitions);
- }
+ @Autowired
+ private ArtifactCassandraDao artifactCassandraDao;
+
+ public Either<InterfaceDefinition, StorageOperationStatus> addInterface(String componentId,
+ InterfaceDefinition interfaceDefinition) {
+ return addOrUpdateInterface(false, componentId, interfaceDefinition);
+ }
+
+ public Either<InterfaceDefinition, StorageOperationStatus> updateInterface(String componentId,
+ InterfaceDefinition interfaceDefinition) {
+ return addOrUpdateInterface(true, componentId, interfaceDefinition);
+ }
+
+ private Either<InterfaceDefinition, StorageOperationStatus> addOrUpdateInterface(
+ boolean isUpdateAction, String componentId, InterfaceDefinition interfaceDefinition) {
- public Either<List<InterfaceDefinition>, StorageOperationStatus> updateInterfaces(String componentId, List<InterfaceDefinition> interfaceDefinitions) {
- return addOrUpdateInterfaces(true, componentId, interfaceDefinitions);
+ StorageOperationStatus statusRes;
+ Either<GraphVertex, TitanOperationStatus> getToscaElementRes;
+
+ getToscaElementRes = titanDao.getVertexById(componentId, JsonParseFlagEnum.NoParse);
+ if (getToscaElementRes.isRight()) {
+ TitanOperationStatus status = getToscaElementRes.right().value();
+ statusRes = DaoStatusConverter.convertTitanStatusToStorageStatus(status);
+ return Either.right(statusRes);
+ }
+ GraphVertex componentVertex = getToscaElementRes.left().value();
+ if (!isUpdateAction) {
+ interfaceDefinition.setUniqueId(UUID.randomUUID().toString());
}
+ statusRes = performUpdateToscaAction(isUpdateAction, componentVertex,
+ Collections.singletonList(interfaceDefinition), EdgeLabelEnum.INTERFACE, VertexTypeEnum.INTERFACE);
+ if (!statusRes.equals(StorageOperationStatus.OK)) {
+ return Either.right(statusRes);
+ }
+ return Either.left(interfaceDefinition);
+ }
- private Either<List<InterfaceDefinition>, StorageOperationStatus> addOrUpdateInterfaces(boolean isUpdateAction, String componentId, List<InterfaceDefinition> interfaceDefinitions) {
+ public Either<Operation, StorageOperationStatus> addInterfaceOperation(String componentId, InterfaceDefinition interfaceDef, Operation interfaceOperation) {
+ return addOrUpdateInterfaceOperation(false, componentId, interfaceDef, interfaceOperation);
+ }
- StorageOperationStatus statusRes;
- Either<GraphVertex, TitanOperationStatus> getToscaElementRes;
+ public Either<Operation, StorageOperationStatus> updateInterfaceOperation(String componentId, InterfaceDefinition interfaceDef, Operation interfaceOperation) {
+ return addOrUpdateInterfaceOperation(true, componentId, interfaceDef, interfaceOperation);
+ }
- getToscaElementRes = titanDao.getVertexById(componentId, JsonParseFlagEnum.NoParse);
- if (getToscaElementRes.isRight()) {
- return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(getToscaElementRes.right().value()));
- }
- GraphVertex componentVertex = getToscaElementRes.left().value();
+ private Either<Operation, StorageOperationStatus> addOrUpdateInterfaceOperation(boolean isUpdateAction, String componentId, InterfaceDefinition interfaceDef, Operation operation) {
- List<ToscaDataDefinition> interfaceDataDefinitions = interfaceDefinitions.stream().map(interfaceDefinition -> new InterfaceDataDefinition(interfaceDefinition)).collect(Collectors.toList());
- statusRes = performUpdateToscaAction(isUpdateAction, componentVertex, interfaceDataDefinitions, EdgeLabelEnum.INTERFACE, VertexTypeEnum.INTERFACE);
- if (!statusRes.equals(StorageOperationStatus.OK)) {
- return Either.right(statusRes);
+ StorageOperationStatus statusRes;
+ Either<GraphVertex, TitanOperationStatus> getToscaElementRes;
+ Either<GraphVertex, TitanOperationStatus> getToscaElementInt;
+
+ if(isUpdateAction && operation.getImplementationArtifact() != null){
+ String artifactUUID = operation.getImplementationArtifact().getArtifactUUID();
+ Either<Long, CassandraOperationStatus> artifactCount = artifactCassandraDao.getCountOfArtifactById(artifactUUID);
+ if(artifactCount.isLeft()){
+ CassandraOperationStatus cassandraStatus = artifactCassandraDao.deleteArtifact(artifactUUID);
+ if (cassandraStatus != CassandraOperationStatus.OK) {
+ return Either.right(DaoStatusConverter.convertCassandraStatusToStorageStatus(cassandraStatus));
}
- return Either.left(interfaceDefinitions);
+ }
+ }
+
+ getToscaElementRes = titanDao.getVertexById(componentId, JsonParseFlagEnum.NoParse);
+ if (getToscaElementRes.isRight()) {
+ TitanOperationStatus status = getToscaElementRes.right().value();
+ statusRes = DaoStatusConverter.convertTitanStatusToStorageStatus(status);
+ return Either.right(statusRes);
+ }
+ GraphVertex componentVertex = getToscaElementRes.left().value();
+ getToscaElementInt = titanDao.getChildVertex(componentVertex, EdgeLabelEnum.INTERFACE, JsonParseFlagEnum.NoParse);
+ if (getToscaElementInt.isRight()) {
+ TitanOperationStatus status = getToscaElementInt.right().value();
+ statusRes = DaoStatusConverter.convertTitanStatusToStorageStatus(status);
+ return Either.right(statusRes);
+ }
+ GraphVertex interfaceVertex = getToscaElementInt.left().value();
+
+ statusRes = performUpdateToscaAction(isUpdateAction, interfaceVertex,
+ Collections.singletonList(operation), EdgeLabelEnum.INTERFACE_OPERATION, VertexTypeEnum.INTERFACE_OPERATION);
+ if (!statusRes.equals(StorageOperationStatus.OK)) {
+ return Either.right(statusRes);
+ }
+
+ getUpdatedInterfaceDef(interfaceDef, operation, operation.getUniqueId());
+ Either<InterfaceDefinition, StorageOperationStatus> intUpdateStatus = updateInterface(componentId, interfaceDef);
+ if (intUpdateStatus.isRight() && !intUpdateStatus.right().value().equals(StorageOperationStatus.OK)) {
+ return Either.right(statusRes);
}
- public Either<String, StorageOperationStatus> deleteInterface(String componentId, String interfacesToDelete) {
- StorageOperationStatus statusRes;
- Either<GraphVertex, TitanOperationStatus> getToscaElementRes;
+ return Either.left(operation);
+ }
- getToscaElementRes = titanDao.getVertexById(componentId, JsonParseFlagEnum.NoParse);
- if (getToscaElementRes.isRight()) {
- return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(getToscaElementRes.right().value()));
+ public Either<Operation, StorageOperationStatus> deleteInterfaceOperation(String componentId, InterfaceDefinition interfaceDef, String operationToDelete) {
+ Either<GraphVertex, TitanOperationStatus> getInterfaceVertex;
+ Either<GraphVertex, TitanOperationStatus> getComponentVertex;
+ Operation operation = new Operation();
+ StorageOperationStatus status;
+
+ getComponentVertex = titanDao.getVertexById(componentId, JsonParseFlagEnum.NoParse);
+ if (getComponentVertex.isRight()) {
+ return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(getComponentVertex.right().value()));
+ }
+
+ getInterfaceVertex = titanDao.getChildVertex(getComponentVertex.left().value(), EdgeLabelEnum.INTERFACE, JsonParseFlagEnum.NoParse);
+ if (getInterfaceVertex.isRight()) {
+ return Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(getInterfaceVertex.right().value()));
+ }
+
+ if (!interfaceDef.getOperationsMap().isEmpty()) {
+ Either<GraphVertex, TitanOperationStatus> getInterfaceOpVertex =
+ titanDao.getChildVertex(getInterfaceVertex.left().value(), EdgeLabelEnum.INTERFACE_OPERATION,
+ JsonParseFlagEnum.NoParse);
+ if (getInterfaceOpVertex.isRight()) {
+ List<ToscaDataDefinition> toscaDataList = new ArrayList<>(interfaceDef.getOperationsMap().values());
+ StorageOperationStatus statusRes =
+ addToscaDataToToscaElement(getInterfaceVertex.left().value(), EdgeLabelEnum.INTERFACE_OPERATION,
+ VertexTypeEnum.INTERFACE_OPERATION, toscaDataList, JsonPresentationFields.UNIQUE_ID);
+ if (!statusRes.equals(StorageOperationStatus.OK)) {
+ return Either.right(statusRes);
+ }
+ }
+ }
+
+ Optional<Entry<String, Operation>> operationToRemove = interfaceDef.getOperationsMap().entrySet().stream()
+ .filter(entry -> entry.getValue().getUniqueId().equals(operationToDelete)).findAny();
+ if (operationToRemove.isPresent()){
+ Map.Entry<String, Operation> stringOperationEntry = operationToRemove.get();
+ operation = stringOperationEntry.getValue();
+ ArtifactDefinition implementationArtifact = operation.getImplementationArtifact();
+ if(implementationArtifact != null){
+ String artifactUUID = implementationArtifact.getArtifactUUID();
+ CassandraOperationStatus cassandraStatus = artifactCassandraDao.deleteArtifact(artifactUUID);
+ if (cassandraStatus != CassandraOperationStatus.OK) {
+ return Either.right(DaoStatusConverter.convertCassandraStatusToStorageStatus(cassandraStatus));
+ }
+ }
+
+ if(interfaceDef.getOperationsMap().size() > 1){
+ status = deleteToscaDataElements(getInterfaceVertex.left().value(), EdgeLabelEnum.INTERFACE_OPERATION, Collections.singletonList(operationToDelete));
+ if (status != StorageOperationStatus.OK) {
+ return Either.right(status);
}
+ } else {
+ status = removeToscaDataVertex(getInterfaceVertex.left().value(), EdgeLabelEnum.INTERFACE_OPERATION, VertexTypeEnum.INTERFACE_OPERATION);
+ if (status != StorageOperationStatus.OK) {
+ return Either.right(status);
+ }
+ }
- statusRes = deleteToscaDataElements(componentId, EdgeLabelEnum.INTERFACE, Collections.singletonList(interfacesToDelete));
- if (statusRes != StorageOperationStatus.OK) {
- return Either.right(statusRes);
+ getUpdatedInterfaceDef(interfaceDef, null, operationToDelete);
+ if (interfaceDef.getOperations().isEmpty()) {
+ status = deleteToscaDataElements(getComponentVertex.left().value(), EdgeLabelEnum.INTERFACE, Collections.singletonList(interfaceDef.getUniqueId()));
+ if (status != StorageOperationStatus.OK) {
+ return Either.right(status);
+ }
+ status = removeToscaDataVertex(getComponentVertex.left().value(), EdgeLabelEnum.INTERFACE, VertexTypeEnum.INTERFACE);
+ if (status != StorageOperationStatus.OK) {
+ return Either.right(status);
}
+ }
+ else {
+ Either<InterfaceDefinition, StorageOperationStatus> intUpdateStatus = updateInterface(componentId, interfaceDef);
+ if (intUpdateStatus.isRight() && !intUpdateStatus.right().value().equals(StorageOperationStatus.OK)) {
+ return Either.right(status);
+ }
+ }
+ }
+ return Either.left(operation);
+ }
- return Either.left(interfacesToDelete);
+ private StorageOperationStatus performUpdateToscaAction(boolean isUpdate, GraphVertex graphVertex,
+ List<ToscaDataDefinition> toscaDataList, EdgeLabelEnum edgeLabel, VertexTypeEnum vertexLabel) {
+ if (isUpdate) {
+ return updateToscaDataOfToscaElement(graphVertex, edgeLabel, vertexLabel, toscaDataList, JsonPresentationFields.UNIQUE_ID);
+ } else {
+ return addToscaDataToToscaElement(graphVertex, edgeLabel, vertexLabel, toscaDataList, JsonPresentationFields.UNIQUE_ID);
}
+ }
- private StorageOperationStatus performUpdateToscaAction(boolean isUpdate, GraphVertex graphVertex,
- List<ToscaDataDefinition> toscaDataList, EdgeLabelEnum edgeLabel, VertexTypeEnum vertexLabel) {
- if (isUpdate) {
- return updateToscaDataOfToscaElement(graphVertex, edgeLabel, vertexLabel, toscaDataList, JsonPresentationFields.UNIQUE_ID);
- } else {
- return addToscaDataToToscaElement(graphVertex, edgeLabel, vertexLabel, toscaDataList, JsonPresentationFields.UNIQUE_ID);
- }
+ private void getUpdatedInterfaceDef(InterfaceDefinition interfaceDef, Operation operation, String operationId){
+ Map<String, Operation> operationMap = interfaceDef.getOperationsMap();
+ if(operation != null){
+ operationMap.put(operationId, operation);
+ interfaceDef.setOperationsMap(operationMap);
+ }
+ else {
+ operationMap.remove(operationId);
+ interfaceDef.setOperationsMap(operationMap);
}
+ }
+
+}
+
-} \ No newline at end of file
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/TopologyTemplateOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/TopologyTemplateOperation.java
index 3bdec2a30a..9a87874b2a 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/TopologyTemplateOperation.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/operations/TopologyTemplateOperation.java
@@ -44,6 +44,7 @@ import org.openecomp.sdc.be.model.category.CategoryDefinition;
import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElementTypeEnum;
+import org.openecomp.sdc.be.model.jsontitan.enums.JsonConstantKeysEnum;
import org.openecomp.sdc.be.model.jsontitan.utils.ModelConverter;
import org.openecomp.sdc.be.model.operations.StorageException;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
@@ -728,6 +729,15 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
if (assosiateElementToData.isRight()) {
return assosiateElementToData.right().value();
}
+ else {
+ Map<String, OperationDataDefinition> operationMap = interfaceMap.values().stream().filter(op -> MapUtils.isNotEmpty(op.getOperations())).flatMap(a -> a.getOperations().entrySet().stream()).collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
+ if(MapUtils.isNotEmpty(operationMap)) {
+ Either<GraphVertex, StorageOperationStatus> assosiateOpToInterface = associateElementToData(assosiateElementToData.left().value(), VertexTypeEnum.INTERFACE_OPERATION, EdgeLabelEnum.INTERFACE_OPERATION, operationMap);
+ if (assosiateOpToInterface.isRight()) {
+ return assosiateOpToInterface.right().value();
+ }
+ }
+ }
}
return StorageOperationStatus.OK;
}
@@ -1052,17 +1062,25 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
log.debug("Failed to disassociate service api artifacts for {} error {}", toscaElementVertex.getUniqueId(), status);
Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
}
- status = titanDao.disassociateAndDeleteLast(toscaElementVertex, Direction.OUT, EdgeLabelEnum.INTERFACE);
- if (status != TitanOperationStatus.OK) {
- log.debug("Failed to disassociate interfaces for {} error {}", toscaElementVertex.getUniqueId(), status);
- Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
- }
- titanDao.disassociateAndDeleteLast(toscaElementVertex, Direction.OUT, EdgeLabelEnum.INSTANCE_ARTIFACTS);
- if (status != TitanOperationStatus.OK) {
- log.debug("Failed to disassociate instance artifact for {} error {}", toscaElementVertex.getUniqueId(), status);
- Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
+
+ Either<GraphVertex, TitanOperationStatus> getInterfaceVertex = titanDao.getChildVertex(toscaElementVertex, EdgeLabelEnum.INTERFACE, JsonParseFlagEnum.NoParse);
+ if (getInterfaceVertex.isLeft()) {
+ status = titanDao.disassociateAndDeleteLast(getInterfaceVertex.left().value(), Direction.OUT, EdgeLabelEnum.INTERFACE_OPERATION);
+ if (status != TitanOperationStatus.OK) {
+ log.debug("Failed to disassociate interface operations for {} error {}", getInterfaceVertex.left().value().getUniqueId(), status);
+ Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
+ }
+ else {
+ status = titanDao.disassociateAndDeleteLast(toscaElementVertex, Direction.OUT, EdgeLabelEnum.INTERFACE);
+ if (status != TitanOperationStatus.OK) {
+ log.debug("Failed to disassociate interfaces for {} error {}", toscaElementVertex.getUniqueId(), status);
+ Either.right(DaoStatusConverter.convertTitanStatusToStorageStatus(status));
+ }
+ }
+
}
+ titanDao.disassociateAndDeleteLast(toscaElementVertex, Direction.OUT, EdgeLabelEnum.INSTANCE_ARTIFACTS);
toscaElementVertex.getVertex().remove();
log.trace("Tosca element vertex for {} was removed", toscaElementVertex.getUniqueId());
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtils.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtils.java
new file mode 100644
index 0000000000..feef31cbc1
--- /dev/null
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtils.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openecomp.sdc.be.model.jsontitan.utils;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.be.model.InterfaceDefinition;
+
+import java.util.Collection;
+import java.util.Formatter;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.openecomp.sdc.common.util.ValidationUtils;
+
+public class InterfaceUtils {
+
+ public static final String INTERFACE_TOSCA_RESOURCE_NAME = "org.openecomp.interfaces.node.lifecycle.%s";
+
+ public static final Optional<InterfaceDefinition> getInterfaceDefinitionFromToscaName(
+ Collection<InterfaceDefinition> interfaces,
+ String componentName) {
+ if (CollectionUtils.isEmpty(interfaces)) {
+ return Optional.empty();
+ }
+
+ String toscaName = createInterfaceToscaResourceName(componentName);
+ return interfaces.stream().filter(
+ interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
+ .getToscaResourceName().equals(toscaName)).findAny();
+ }
+
+ public static Collection<InterfaceDefinition> getInterfaceDefinitionListFromToscaName(Collection<InterfaceDefinition> interfaces,
+ String componentName) {
+ if (CollectionUtils.isEmpty(interfaces)) {
+ return CollectionUtils.EMPTY_COLLECTION;
+ }
+
+ String toscaName = createInterfaceToscaResourceName(componentName);
+ return interfaces.stream().filter(
+ interfaceDefinition -> interfaceDefinition.getToscaResourceName() != null && interfaceDefinition
+ .getToscaResourceName().equals(toscaName)).collect(Collectors.toList());
+ }
+
+ public static String createInterfaceToscaResourceName(String componentName) {
+ StringBuilder sb = new StringBuilder();
+ try (Formatter formatter = new Formatter(sb)) {
+ return formatter.format(INTERFACE_TOSCA_RESOURCE_NAME, ValidationUtils.convertToSystemName(componentName)).toString();
+ }
+ }
+}
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IInterfaceLifecycleOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IInterfaceLifecycleOperation.java
index 2f12226d95..06622ebba6 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IInterfaceLifecycleOperation.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IInterfaceLifecycleOperation.java
@@ -51,5 +51,5 @@ public interface IInterfaceLifecycleOperation {
public String getShortInterfaceName(InterfaceDataDefinition interfaceDefinition);
- public Either<Map<String, InterfaceDefinition>,StorageOperationStatus> getAllInterfaceLifecycleTypes();
+ Either<Map<String, InterfaceDefinition>,StorageOperationStatus> getAllInterfaceLifecycleTypes();
}
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiComponentDataTransfer.java b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiComponentDataTransfer.java
index 43df6da2e6..0090f86f0e 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiComponentDataTransfer.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/UiComponentDataTransfer.java
@@ -20,7 +20,7 @@
package org.openecomp.sdc.be.ui.model;
-
+import org.openecomp.sdc.be.datatypes.elements.InterfaceOperationDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.model.AdditionalInformationDefinition;
import org.openecomp.sdc.be.model.ArtifactDefinition;
@@ -78,8 +78,17 @@ public class UiComponentDataTransfer {
protected List<AdditionalInformationDefinition> additionalInformation;
+ private Map<String, InterfaceOperationDataDefinition> interfaceOperations;
private Map<String, InterfaceDefinition> interfaces;
+ public Map<String, InterfaceOperationDataDefinition> getInterfaceOperations() {
+ return interfaceOperations;
+ }
+
+ public void setInterfaceOperations(Map<String, InterfaceOperationDataDefinition> interfaceOperations) {
+ this.interfaceOperations = interfaceOperations;
+ }
+
public Map<String, InterfaceDefinition> getInterfaces() {
return interfaces;
}
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/ResourceTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/ResourceTest.java
index 0d5614f176..2ecb4b444c 100644
--- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/ResourceTest.java
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/ResourceTest.java
@@ -3,6 +3,7 @@ package org.openecomp.sdc.be.model;
import mockit.Deencapsulation;
import org.junit.Assert;
import org.junit.Test;
+import org.openecomp.sdc.be.datatypes.elements.InterfaceOperationDataDefinition;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.be.unittests.utils.ModelConfDependentTest;
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfacesOperationTest.java
index f5835b6c4c..375208d24e 100644
--- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfaceOperationTest.java
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/operations/InterfacesOperationTest.java
@@ -6,7 +6,6 @@ import static org.junit.Assert.assertTrue;
import fj.data.Either;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -49,7 +48,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application-context-test.xml")
-public class InterfaceOperationTest extends ModelTestBase {
+public class InterfacesOperationTest extends ModelTestBase {
@Resource
protected TitanDao titanDao;
@@ -103,10 +102,10 @@ public class InterfaceOperationTest extends ModelTestBase {
}
@Test
- public void testAddInterface_Service(){testAddSingleInterface(service);}
+ public void testAddInterface_Service(){testAddInterface(service);}
@Test
- public void testAddInterface_Resource(){testAddMultipleInterface(resource);}
+ public void testAddInterface_Resource(){testAddInterface(resource);}
@Test
public void testUpdateInterface_Service(){testUpdateInterface(service);}
@@ -115,71 +114,95 @@ public class InterfaceOperationTest extends ModelTestBase {
public void testUpdateInterface_Resource(){testUpdateInterface(resource);}
@Test
- public void testDeleteInterface_Service(){testDeleteInterface(service);}
+ public void testAddInterfaceOperation_Service(){testAddInterfaceOperation(service);}
@Test
- public void testDeleteInterface_Resource(){testDeleteInterface(resource);}
+ public void testAddInterfaceOperation_Resource(){testAddInterfaceOperation(resource);}
+
+ @Test
+ public void testUpdateInterfaceOperation_Service(){testUpdateInterfaceOperation(service);}
+
+ @Test
+ public void testUpdateInterfaceOperation_Resource(){testUpdateInterfaceOperation(resource);}
+
+ @Test
+ public void testDeleteInterfaceOperation_Service(){testDeleteInterfaceOperation(service);}
+
+ @Test
+ public void testDeleteInterfaceOperation_Resource(){testDeleteInterfaceOperation(resource);}
@Test
public void testUpdateInterfaceShouldFailWhenNOtCreatedFirst() {
Component component = createResource();
- InterfaceDefinition interfaceDefinition = buildInterfaceDefinitionWithoutOperation();
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
interfaceDefinition.setOperationsMap(createMockOperationMap());
- Either<List<InterfaceDefinition>, StorageOperationStatus> res = interfaceOperation.updateInterfaces(component.getUniqueId(), Collections.singletonList(interfaceDefinition));
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.updateInterface(component.getUniqueId(),
+ interfaceDefinition);
Assert.assertTrue(res.isRight());
}
- private void testAddSingleInterface(Component component) {
- InterfaceDefinition interfaceDefinition = buildInterfaceDefinition("1");
- Either<List<InterfaceDefinition>, StorageOperationStatus> res = interfaceOperation.addInterfaces(component.getUniqueId(), Collections.singletonList(interfaceDefinition));
- Assert.assertTrue(res.isLeft());
- Assert.assertEquals("1", res.left().value().get(0).getUniqueId());
- }
-
- private void testAddMultipleInterface(Component component) {
- InterfaceDefinition interfaceDefinition1 = buildInterfaceDefinition("1");
- InterfaceDefinition interfaceDefinition2 = buildInterfaceDefinition("2");
- List<InterfaceDefinition> interfaceDefinitions = new ArrayList<>();
- interfaceDefinitions.add(interfaceDefinition1);
- interfaceDefinitions.add(interfaceDefinition2);
- Either<List<InterfaceDefinition>, StorageOperationStatus> res = interfaceOperation.addInterfaces(component.getUniqueId(), interfaceDefinitions);
+ private void testAddInterface(Component component) {
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.addInterface(component.getUniqueId(),
+ interfaceDefinition);
Assert.assertTrue(res.isLeft());
- Assert.assertEquals(2, res.left().value().size());
}
private void testUpdateInterface(Component component) {
- InterfaceDefinition interfaceDefinition = buildInterfaceDefinition("1");
- Either<List<InterfaceDefinition>, StorageOperationStatus> res = interfaceOperation.addInterfaces(component.getUniqueId(), Collections.singletonList(interfaceDefinition));
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
+ interfaceDefinition.setOperationsMap(createMockOperationMap());
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.addInterface(component.getUniqueId(), interfaceDefinition);
Assert.assertTrue(res.isLeft());
- List<InterfaceDefinition> value = res.left().value();
- InterfaceDefinition createdInterfaceDef = value.get(0);
+ InterfaceDefinition value = res.left().value();
String new_description = "New Description";
- createdInterfaceDef.setDescription(new_description);
- res = interfaceOperation.updateInterfaces(component.getUniqueId(), Collections.singletonList(createdInterfaceDef));
+ value.setDescription(new_description);
+ res = interfaceOperation.updateInterface(component.getUniqueId(), interfaceDefinition);
assertTrue(res.isLeft());
- assertEquals(new_description,res.left().value().get(0).getDescription());
+ assertEquals(new_description,res.left().value().getDescription());
}
- private void testDeleteInterface(Component component) {
- InterfaceDefinition interfaceDefinition = buildInterfaceDefinition("1");
- Either<List<InterfaceDefinition>, StorageOperationStatus> res = interfaceOperation.addInterfaces(component.getUniqueId(), Collections.singletonList(interfaceDefinition));
+ private void testAddInterfaceOperation(Component component) {
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.addInterface(component.getUniqueId(), interfaceDefinition);
Assert.assertTrue(res.isLeft());
- List<InterfaceDefinition> value = res.left().value();
- Either<String, StorageOperationStatus> deleteInterfaceOperationRes = interfaceOperation.deleteInterface(component.getUniqueId(), value.get(0).getUniqueId());
- assertTrue(deleteInterfaceOperationRes.isLeft());
+ InterfaceDefinition value = res.left().value();
+ Operation op = createMockOperation();
+ Either<Operation, StorageOperationStatus> addInterfaceOperationRes = interfaceOperation.addInterfaceOperation(component.getUniqueId(), value, op);
+ assertTrue(addInterfaceOperationRes.isLeft());
}
- private InterfaceDefinition buildInterfaceDefinition(String uniqueId) {
- InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
- interfaceDefinition.setType("tosca.interfaces.standard");
- interfaceDefinition.setUniqueId(uniqueId);
- interfaceDefinition.setOperationsMap(createMockOperationMap());
- return interfaceDefinition;
+ private void testUpdateInterfaceOperation(Component component) {
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.addInterface(component.getUniqueId(), interfaceDefinition);
+ Assert.assertTrue(res.isLeft());
+ InterfaceDefinition value = res.left().value();
+ Operation op = createMockOperation();
+ Either<Operation, StorageOperationStatus> addInterfaceOperationRes = interfaceOperation.addInterfaceOperation(component.getUniqueId(), value, op);
+ Assert.assertTrue(addInterfaceOperationRes.isLeft());
+ Operation resultOp = addInterfaceOperationRes.left().value();
+ resultOp.setName("New_Create");
+ Either<Operation, StorageOperationStatus> updateInterfaceOperationRes = interfaceOperation.updateInterfaceOperation(component.getUniqueId(), value, resultOp);
+ assertTrue(updateInterfaceOperationRes.isLeft());
+ assertEquals("New_Create", updateInterfaceOperationRes.left().value().getName());
+ }
+
+ private void testDeleteInterfaceOperation(Component component) {
+ InterfaceDefinition interfaceDefinition = buildInterfaceDefinition();
+ Either<InterfaceDefinition, StorageOperationStatus> res = interfaceOperation.addInterface(component.getUniqueId(), interfaceDefinition);
+ Assert.assertTrue(res.isLeft());
+ InterfaceDefinition value = res.left().value();
+ Operation op = createMockOperation();
+ Either<Operation, StorageOperationStatus> addInterfaceOperationRes = interfaceOperation.addInterfaceOperation(component.getUniqueId(), value, op);
+ Assert.assertTrue(addInterfaceOperationRes.isLeft());
+ Operation resultOp = addInterfaceOperationRes.left().value();
+ Either<Operation, StorageOperationStatus> deleteInterfaceOperationRes = interfaceOperation.deleteInterfaceOperation(component.getUniqueId(), value, resultOp.getUniqueId());
+ assertTrue(deleteInterfaceOperationRes.isLeft());
}
- private InterfaceDefinition buildInterfaceDefinitionWithoutOperation() {
+ private InterfaceDefinition buildInterfaceDefinition() {
InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
interfaceDefinition.setType("tosca.interfaces.standard");
+ interfaceDefinition.setCreationDate(101232L);
return interfaceDefinition;
}
@@ -343,21 +366,21 @@ public class InterfaceOperationTest extends ModelTestBase {
addProperties.add(prop22);
StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
- assertSame(StorageOperationStatus.OK, status);
+ assertSame(status, StorageOperationStatus.OK);
PropertyDataDefinition prop33 = new PropertyDataDefinition();
prop33.setName("prop33");
prop33.setDefaultValue("def33");
status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
- assertSame(StorageOperationStatus.OK, status);
+ assertSame(status, StorageOperationStatus.OK);
PropertyDataDefinition prop44 = new PropertyDataDefinition();
prop44.setName("prop44");
prop44.setDefaultValue("def44");
status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
- assertSame(StorageOperationStatus.OK, status);
+ assertSame(status, StorageOperationStatus.OK);
PropertyDataDefinition capProp = new PropertyDataDefinition();
capProp.setName("capProp");
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtilsTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtilsTest.java
new file mode 100644
index 0000000000..fbf01bc91d
--- /dev/null
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsontitan/utils/InterfaceUtilsTest.java
@@ -0,0 +1,50 @@
+package org.openecomp.sdc.be.model.jsontitan.utils;
+
+import org.junit.Test;
+import org.openecomp.sdc.be.model.InterfaceDefinition;
+import org.openecomp.sdc.be.model.Operation;
+import org.openecomp.sdc.be.model.Resource;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+public class InterfaceUtilsTest {
+
+ private InterfaceUtils createTestSubject() {
+ return new InterfaceUtils();
+ }
+
+
+ @Test
+ public void testGetInterfaceDefinitionFromToscaName() throws Exception {
+ Collection<InterfaceDefinition> interfaces = null;
+ String resourceName = "";
+ Optional<InterfaceDefinition> result;
+
+ // default test
+ result = InterfaceUtils.getInterfaceDefinitionFromToscaName(interfaces, resourceName);
+ }
+
+
+ @Test
+ public void testGetInterfaceDefinitionListFromToscaName() throws Exception {
+ Collection<InterfaceDefinition> interfaces = null;
+ String resourceName = "";
+ Collection<InterfaceDefinition> result;
+
+ // default test
+ result = InterfaceUtils.getInterfaceDefinitionListFromToscaName(interfaces, resourceName);
+ }
+
+
+ @Test
+ public void testCreateInterfaceToscaResourceName() throws Exception {
+ String resourceName = "";
+ String result;
+
+ // default test
+ result = InterfaceUtils.createInterfaceToscaResourceName(resourceName);
+ }
+} \ No newline at end of file