Fix 'Tosca Function get_input in Properties Assignment error'-bug
[sdc.git] / common-be / src / main / java / org / openecomp / sdc / be / datatypes / elements / PropertyDataDefinition.java
index d9e053f..ee5cd0e 100644 (file)
 
 package org.openecomp.sdc.be.datatypes.elements;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
-import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
+import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -32,62 +32,59 @@ import java.util.Map;
 import java.util.Set;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
-import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
+import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
 
 @EqualsAndHashCode(callSuper = false)
 @Data
 public class PropertyDataDefinition extends ToscaDataDefinition {
 
+    private boolean definition = false;
+    private Boolean hidden = Boolean.FALSE;
     private String uniqueId;
-
     // "boolean", "string", "float", "integer", "version" })
     private String type;
-
     private Boolean required = Boolean.FALSE;
-
-    protected boolean definition = false;
-
     private String defaultValue;
-
     private String description;
-
     private SchemaDefinition schema;
-
     private boolean password;
-
     private String name;
-
     private String value;
-
     private String label;
-    protected Boolean hidden = Boolean.FALSE;
     private Boolean immutable = Boolean.FALSE;
+    private Boolean mappedToComponentProperty = Boolean.TRUE;
+    /**
+     * @deprecated use {@link #toscaFunction} instead
+     */
+    @Deprecated
+    private ToscaGetFunctionType toscaGetFunctionType;
+    /**
+     * @deprecated use {@link #toscaFunction} instead
+     */
+    @Deprecated
+    private ToscaGetFunctionDataDefinition toscaGetFunction;
+    private ToscaFunction toscaFunction;
+    private Collection<SubPropertyToscaFunction> subPropertyToscaFunctions;
 
     private String inputPath;
     private String status;
     private String inputId;
     private String instanceUniqueId;
+    private String model;
     private String propertyId;
     private String parentPropertyType;
     private String subPropertyInputPath;
-
     private List<Annotation> annotations;
-    /**
-     * The resource id which this property belongs to
-     */
-    private String parentUniqueId;
-
     private List<GetInputValueDataDefinition> getInputValues;
-
     private Boolean isDeclaredListInput = Boolean.FALSE;
-
     private List<GetPolicyValueDataDefinition> getPolicyValues;
-
     private List<String> propertyConstraints;
-    
     private Map<String, String> metadata;
+    private boolean userCreated;
 
     public PropertyDataDefinition() {
         super();
@@ -97,22 +94,24 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         super(pr);
     }
 
-    public PropertyDataDefinition(PropertyDataDefinition propertyDataDefinition) {
+    public PropertyDataDefinition(final PropertyDataDefinition propertyDataDefinition) {
         super();
         this.setUniqueId(propertyDataDefinition.getUniqueId());
         this.setRequired(propertyDataDefinition.isRequired());
         this.setDefaultValue(propertyDataDefinition.getDefaultValue());
         this.setDefinition(propertyDataDefinition.getDefinition());
         this.setDescription(propertyDataDefinition.getDescription());
-        this.setSchema(propertyDataDefinition.getSchema());
+        if (propertyDataDefinition.getSchema() != null) {
+            this.setSchema(new SchemaDefinition(propertyDataDefinition.getSchema()));
+        }
         this.setPassword(propertyDataDefinition.isPassword());
         this.setType(propertyDataDefinition.getType());
         this.setName(propertyDataDefinition.getName());
         this.setValue(propertyDataDefinition.getValue());
-        this.setRequired(propertyDataDefinition.isRequired());
         this.setHidden(propertyDataDefinition.isHidden());
         this.setLabel(propertyDataDefinition.getLabel());
         this.setImmutable(propertyDataDefinition.isImmutable());
+        this.setMappedToComponentProperty(propertyDataDefinition.isMappedToComponentProperty());
         this.setParentUniqueId(propertyDataDefinition.getParentUniqueId());
         this.setOwnerId(propertyDataDefinition.getOwnerId());
         this.setGetInputValues(propertyDataDefinition.getGetInputValues());
@@ -121,22 +120,27 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         this.setStatus(propertyDataDefinition.getStatus());
         this.setInputId(propertyDataDefinition.getInputId());
         this.setInstanceUniqueId(propertyDataDefinition.getInstanceUniqueId());
+        this.setModel(propertyDataDefinition.getModel());
         this.setPropertyId(propertyDataDefinition.getPropertyId());
+        this.setToscaGetFunction(propertyDataDefinition.getToscaGetFunction());
+        this.setToscaGetFunctionType(propertyDataDefinition.getToscaGetFunctionType());
+        this.setToscaFunction(propertyDataDefinition.getToscaFunction());
         this.parentPropertyType = propertyDataDefinition.getParentPropertyType();
         this.subPropertyInputPath = propertyDataDefinition.getSubPropertyInputPath();
+        this.subPropertyToscaFunctions = propertyDataDefinition.getSubPropertyToscaFunctions();
         if (isNotEmpty(propertyDataDefinition.annotations)) {
             this.setAnnotations(propertyDataDefinition.annotations);
         }
         if (MapUtils.isNotEmpty(propertyDataDefinition.getMetadata())) {
             setMetadata(new HashMap<>(propertyDataDefinition.getMetadata()));
         }
-        if(isNotEmpty(propertyDataDefinition.getPropertyConstraints())){
+        if (isNotEmpty(propertyDataDefinition.getPropertyConstraints())) {
             setPropertyConstraints(new ArrayList<>(propertyDataDefinition.getPropertyConstraints()));
         }
         this.setIsDeclaredListInput(propertyDataDefinition.getIsDeclaredListInput());
+        this.setUserCreated(propertyDataDefinition.isUserCreated());
     }
 
-    // @Override
     public boolean isDefinition() {
         return true;
     }
@@ -166,6 +170,13 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         if (schema != null) {
             return schema.getProperty();
         }
+        return null;
+    }
+
+    public ToscaGetFunctionType getToscaGetFunctionType() {
+        if (isToscaGetFunction() && toscaFunction != null) {
+            return ((ToscaGetFunctionDataDefinition) toscaFunction).getFunctionType();
+        }
 
         return null;
     }
@@ -178,6 +189,13 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         return immutable;
     }
 
+    public Boolean isMappedToComponentProperty() {
+        return mappedToComponentProperty;
+    }
+
+    /**
+     * The resource id which this property belongs to
+     */
     public String getParentUniqueId() {
         return getOwnerId();
     }
@@ -268,18 +286,16 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
     }
 
     private <T extends ToscaDataDefinition> boolean compareSchemaType(T other) {
-        return !"list".equals(type) && !"map".equals(type) || this.getSchema().getProperty().getType().equals(((PropertyDataDefinition) other).getSchema().getProperty().getType());
+        return !"list".equals(type) && !"map".equals(type) || this.getSchema().getProperty().getType()
+            .equals(((PropertyDataDefinition) other).getSchema().getProperty().getType());
     }
 
     @Override
     public <T extends ToscaDataDefinition> T mergeFunction(T other, boolean allowDefaultValueOverride) {
-        if (this.getType() != null
-                && this.getType().equals(other.getToscaPresentationValue(JsonPresentationFields.TYPE))
-                && compareSchemaType(other)) {
+        if (this.getType() != null && this.getType().equals(other.getToscaPresentationValue(JsonPresentationFields.TYPE)) && compareSchemaType(
+            other)) {
             other.setOwnerId(getOwnerId());
-            if (allowDefaultValueOverride
-                    && getDefaultValue() != null
-                    && !getDefaultValue().isEmpty()) {
+            if (allowDefaultValueOverride && getDefaultValue() != null && !getDefaultValue().isEmpty()) {
                 other.setToscaPresentationValue(JsonPresentationFields.DEFAULT_VALUE, getDefaultValue());
             }
             return other;
@@ -303,7 +319,6 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         if (this.annotations != null) {
             annotationSet.addAll(this.annotations);
         }
-
         this.annotations = new ArrayList<>(annotationSet);
         setToscaPresentationValue(JsonPresentationFields.ANNOTATIONS, this.annotations);
     }
@@ -311,4 +326,23 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
     public List<Annotation> getAnnotations() {
         return (List<Annotation>) getToscaPresentationValue(JsonPresentationFields.ANNOTATIONS);
     }
+
+    @JsonIgnoreProperties
+    public boolean isToscaFunction() {
+        return this.toscaGetFunctionType != null || this.toscaFunction != null;
+    }
+
+    @JsonIgnoreProperties
+    public boolean isToscaGetFunction() {
+        return this.toscaFunction != null
+            && (this.toscaFunction.getType() == ToscaFunctionType.GET_ATTRIBUTE
+            || this.toscaFunction.getType() == ToscaFunctionType.GET_INPUT
+            || this.toscaFunction.getType() == ToscaFunctionType.GET_PROPERTY);
+    }
+
+    @JsonIgnoreProperties
+    public boolean hasToscaFunction() {
+        return this.toscaFunction != null;
+    }
+
 }