aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java
diff options
context:
space:
mode:
authorojasdubey <ojas.dubey@amdocs.com>2018-06-27 14:59:48 +0530
committerOren Kleks <orenkle@amdocs.com>2018-07-15 10:35:19 +0000
commit874bd9ed420ce8c281450e730d6d1ed3e3dc688e (patch)
tree477a1a1c110cdd7579c5db5b4e3c6293518dc76f /catalog-be/src/main/java
parent3f55e8e7cff615f2f97d3e0d5def0c2f0d80cea5 (diff)
Worklow Operation output tosca
Added implementation to export workflow operation outputs to TOSCA template Change-Id: Id4c7104f725f7e9f5c97ae738387d2592bb80f7b Issue-ID: SDC-1450 Signed-off-by: ojasdubey <ojas.dubey@amdocs.com>
Diffstat (limited to 'catalog-be/src/main/java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java2
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaAttribute.java69
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java19
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaNodeType.java9
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/InterfacesOperationsToscaUtil.java99
5 files changed, 177 insertions, 21 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
index 8d8eac36b9..4455c3205a 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/ToscaExportHandler.java
@@ -577,10 +577,10 @@ public class ToscaExportHandler {
inputDef.forEach(i -> {
ToscaProperty property = propertyConvertor.convertProperty(dataTypes, i, false);
inputs.put(i.getName(), property);
- addInterfaceDefinitionElement(component, toscaNodeType);
});
if (!inputs.isEmpty()) {
toscaNodeType.setProperties(inputs);
+ addInterfaceDefinitionElement(component, toscaNodeType);
}
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaAttribute.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaAttribute.java
new file mode 100644
index 0000000000..c32eed9d7a
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaAttribute.java
@@ -0,0 +1,69 @@
+/*
+ * 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.tosca.model;
+
+public class ToscaAttribute {
+
+ private String type;
+ private String description;
+ private Object _defaultp_;
+ private String status;
+ private EntrySchema entry_schema;
+
+ public ToscaAttribute() {
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Object getDefaultp() {
+ return _defaultp_;
+ }
+
+ public void setDefaultp(Object defaultp) {
+ this._defaultp_ = defaultp;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public EntrySchema getEntry_schema() {
+ return entry_schema;
+ }
+
+ public void setEntry_schema(EntrySchema entry_schema) {
+ this.entry_schema = entry_schema;
+ }
+}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java
index f801ac0264..3317778bfa 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java
@@ -19,16 +19,12 @@ package org.openecomp.sdc.be.tosca.model;
import java.util.Map;
import java.util.Objects;
-/**
- * @author KATYR
- * @since March 26, 2018
- */
-
public class ToscaLifecycleOperationDefinition {
private String description;
private String implementation;
private Map<String, ToscaProperty> inputs;
+ private Map<String, ToscaAttribute> outputs;
public String getImplementation() {
@@ -47,6 +43,13 @@ public class ToscaLifecycleOperationDefinition {
this.inputs = inputs;
}
+ public Map<String, ToscaAttribute> getOutputs() {
+ return outputs;
+ }
+
+ public void setOutputs(Map<String, ToscaAttribute> outputs) {
+ this.outputs = outputs;
+ }
@Override
public boolean equals(Object o) {
@@ -57,13 +60,13 @@ public class ToscaLifecycleOperationDefinition {
return false;
}
ToscaLifecycleOperationDefinition that = (ToscaLifecycleOperationDefinition) o;
- return Objects.equals(implementation, that.implementation) && Objects.equals(inputs, that.inputs);
+ return Objects.equals(implementation, that.implementation) && Objects.equals(inputs, that.inputs)
+ && Objects.equals(outputs, that.outputs);
}
@Override
public int hashCode() {
-
- return Objects.hash(implementation, inputs);
+ return Objects.hash(implementation, inputs, outputs);
}
public String getDescription() {
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaNodeType.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaNodeType.java
index 0d0cfb27b7..b6763ad6a1 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaNodeType.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaNodeType.java
@@ -33,6 +33,7 @@ public class ToscaNodeType {
private String description;
private Map<String, ToscaProperty> properties;
+ private Map<String, ToscaAttribute> attributes;
private Map<String, Object> interfaces; //ToscaInterfaceDefinition
private Map<String, ToscaCapability> capabilities;
@@ -46,6 +47,14 @@ public class ToscaNodeType {
this.properties = properties;
}
+ public Map<String, ToscaAttribute> getAttributes() {
+ return attributes;
+ }
+
+ public void setAttributes(Map<String, ToscaAttribute> attributes) {
+ this.attributes = attributes;
+ }
+
public Map<String, ToscaCapability> getCapabilities() {
return capabilities;
}
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/InterfacesOperationsToscaUtil.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/InterfacesOperationsToscaUtil.java
index 8c9c63af03..81b5c99460 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/InterfacesOperationsToscaUtil.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/utils/InterfacesOperationsToscaUtil.java
@@ -16,30 +16,31 @@
package org.openecomp.sdc.be.tosca.utils;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+
import org.apache.commons.collections.MapUtils;
import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
+import org.openecomp.sdc.be.datatypes.elements.OperationOutputDefinition;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.Product;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
import org.openecomp.sdc.be.tosca.model.ToscaInterfaceDefinition;
import org.openecomp.sdc.be.tosca.model.ToscaInterfaceNodeType;
import org.openecomp.sdc.be.tosca.model.ToscaLifecycleOperationDefinition;
import org.openecomp.sdc.be.tosca.model.ToscaNodeType;
import org.openecomp.sdc.be.tosca.model.ToscaProperty;
-/**
- * @author KATYR
- * @since March 20, 2018
- */
public class InterfacesOperationsToscaUtil {
@@ -50,8 +51,10 @@ public class InterfacesOperationsToscaUtil {
private static final String DEFAULT_HAS_UNDERSCORE = "_default";
private static final String DOT = ".";
private static final String DEFAULT_INPUT_TYPE = "string";
+ private static final String DEFAULT_OUTPUT_TYPE = "string";
private static final String SELF = "SELF";
private static final String GET_PROPERTY = "get_property";
+ private static final String GET_OPERATION_OUTPUT = "get_operation_output";
private static final String DEFAULTP = "defaultp";
private InterfacesOperationsToscaUtil() {
@@ -120,7 +123,7 @@ public class InterfacesOperationsToscaUtil {
toscaInterfaceDefinition.setType(toscaResourceName);
final Map<String, OperationDataDefinition> operations = interfaceDefinition.getOperations();
Map<String, Object> toscaOperations = new HashMap<>();
-
+ String interfaceName = getLastPartOfName(toscaResourceName);
String operationArtifactPath;
for (Map.Entry<String, OperationDataDefinition> operationEntry : operations.entrySet()) {
ToscaLifecycleOperationDefinition toscaOperation = new ToscaLifecycleOperationDefinition();
@@ -132,8 +135,8 @@ public class InterfacesOperationsToscaUtil {
toscaOperation.setImplementation(operationArtifactPath);
}
toscaOperation.setDescription(operationEntry.getValue().getDescription());
- fillToscaOperationInputs(operationEntry.getValue(), toscaOperation);
-
+ fillToscaOperationInputs(operationEntry.getValue(), toscaOperation, nodeType);
+ fillToscaOperationOutputs(operationEntry.getValue(), toscaOperation, interfaceName, nodeType);
toscaOperations.put(operationEntry.getValue().getName(), toscaOperation);
}
@@ -179,7 +182,8 @@ public class InterfacesOperationsToscaUtil {
}
private static void fillToscaOperationInputs(OperationDataDefinition operation,
- ToscaLifecycleOperationDefinition toscaOperation) {
+ ToscaLifecycleOperationDefinition toscaOperation,
+ ToscaNodeType nodeType) {
if (Objects.isNull(operation.getInputs()) || operation.getInputs().isEmpty()) {
toscaOperation.setInputs(null);
return;
@@ -189,15 +193,55 @@ public class InterfacesOperationsToscaUtil {
for (OperationInputDefinition input : operation.getInputs().getListToscaDataDefinition()) {
ToscaProperty toscaInput = new ToscaProperty();
toscaInput.setDescription(input.getDescription());
- toscaInput.setType(DEFAULT_INPUT_TYPE);
-
- toscaInput.setDefaultp(createDefaultValue(getLastPartOfName(input.getInputId())));
+ String mappedPropertyName = getLastPartOfName(input.getInputId());
+ toscaInput.setType(getOperationInputType(mappedPropertyName, nodeType));
+ toscaInput.setDefaultp(createDefaultValue(mappedPropertyName));
toscaInputs.put(input.getName(), toscaInput);
}
toscaOperation.setInputs(toscaInputs);
}
+ private static void fillToscaOperationOutputs(OperationDataDefinition operation,
+ ToscaLifecycleOperationDefinition toscaOperation,
+ String interfaceName,
+ ToscaNodeType nodeType) {
+ if (Objects.isNull(operation.getOutputs()) || operation.getOutputs().isEmpty()) {
+ toscaOperation.setOutputs(null);
+ return;
+ }
+ Map<String, ToscaAttribute> toscaOutputs = new HashMap<>();
+ for (OperationOutputDefinition output : operation.getOutputs().getListToscaDataDefinition()) {
+ if (Objects.nonNull(output.getInputId())) {
+ ToscaAttribute toscaOutput = new ToscaAttribute();
+ toscaOutput.setDescription(output.getDescription());
+ String outputName = output.getName();
+ String mappedAttributeName = getLastPartOfName(output.getInputId());
+ toscaOutput.setType(getOperationOutputType(mappedAttributeName, nodeType));
+ toscaOutputs.put(outputName, toscaOutput);
+ createDefaultValueForMappedAttribute(nodeType, mappedAttributeName, outputName, interfaceName,
+ operation.getName());
+ }
+ }
+ toscaOperation.setOutputs(toscaOutputs);
+ }
+
+ private static String getOperationInputType(String inputName, ToscaNodeType nodeType) {
+ if (nodeType.getProperties() != null
+ && nodeType.getProperties().containsKey(inputName)) {
+ return nodeType.getProperties().get(inputName).getType();
+ }
+ return DEFAULT_INPUT_TYPE;
+ }
+
+ private static String getOperationOutputType(String inputName, ToscaNodeType nodeType) {
+ if (nodeType.getProperties() != null
+ && nodeType.getProperties().containsKey(inputName)) {
+ return nodeType.getProperties().get(inputName).getType();
+ }
+ return DEFAULT_OUTPUT_TYPE;
+ }
+
private static Map<String, List<String>> createDefaultValue(String propertyName) {
Map<String, List<String>> getPropertyMap = new HashMap<>();
List<String> values = new ArrayList<>();
@@ -208,10 +252,41 @@ public class InterfacesOperationsToscaUtil {
return getPropertyMap;
}
+ private static Map<String, List<String>> createAttributeDefaultValue(String outputName,
+ String interfaceName,
+ String operationName) {
+ Map<String, List<String>> attributeDefaultValue = new HashMap<>();
+ List<String> values = new ArrayList<>();
+ values.add(SELF);
+ values.add(interfaceName);
+ values.add(operationName);
+ values.add(outputName);
+ attributeDefaultValue.put(GET_OPERATION_OUTPUT, values);
+ return attributeDefaultValue;
+ }
+
+ private static void createDefaultValueForMappedAttribute(ToscaNodeType nodeType, String mappedAttributeName,
+ String outputName, String interfaceName, String operationName) {
+ if (Objects.isNull(nodeType.getAttributes())) {
+ nodeType.setAttributes(new HashMap<>());
+ }
+ if (!nodeType.getAttributes().containsKey(mappedAttributeName)) {
+ ToscaAttribute toscaAttribute = new ToscaAttribute();
+ toscaAttribute.setType(getOperationOutputType(mappedAttributeName, nodeType));
+ nodeType.getAttributes().put(mappedAttributeName, toscaAttribute);
+ }
+ nodeType.getAttributes().get(mappedAttributeName)
+ .setDefaultp(createAttributeDefaultValue(outputName, interfaceName, operationName));
+ }
private static Map<String, Object> getObjectAsMap(Object obj) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ if (obj instanceof ToscaInterfaceDefinition) {
+ //Prevent empty field serialization in interface definition
+ objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+ }
Map<String, Object> objectAsMap =
- obj instanceof Map ? (Map<String, Object>) obj : new ObjectMapper().convertValue(obj, Map.class);
+ obj instanceof Map ? (Map<String, Object>) obj : objectMapper.convertValue(obj, Map.class);
if (objectAsMap.containsKey(DEFAULT)) {
Object defaultValue = objectAsMap.get(DEFAULT);