Support for concat TOSCA function
[sdc.git] / common-be / src / main / java / org / openecomp / sdc / be / datatypes / elements / PropertyDataDefinition.java
index af29a2f..f88514a 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.HashMap;
 import java.util.HashSet;
 import java.util.List;
 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 org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
+import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
 
-import static org.apache.commons.collections.CollectionUtils.isNotEmpty;
-
+@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 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();
@@ -85,16 +90,18 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
 
     public PropertyDataDefinition(Map<String, Object> pr) {
         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());
@@ -103,6 +110,7 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         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());
@@ -111,53 +119,24 @@ 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();
         if (isNotEmpty(propertyDataDefinition.annotations)) {
             this.setAnnotations(propertyDataDefinition.annotations);
         }
+        if (MapUtils.isNotEmpty(propertyDataDefinition.getMetadata())) {
+            setMetadata(new HashMap<>(propertyDataDefinition.getMetadata()));
+        }
+        if (isNotEmpty(propertyDataDefinition.getPropertyConstraints())) {
+            setPropertyConstraints(new ArrayList<>(propertyDataDefinition.getPropertyConstraints()));
+        }
         this.setIsDeclaredListInput(propertyDataDefinition.getIsDeclaredListInput());
-    }
-
-    public String getParentPropertyType() {
-        return parentPropertyType;
-    }
-
-    public void setParentPropertyType(String parentPropertyType) {
-        this.parentPropertyType = parentPropertyType;
-    }
-
-    public String getSubPropertyInputPath() {
-        return subPropertyInputPath;
-    }
-
-    public void setSubPropertyInputPath(String subPropertyInputPath) {
-        this.subPropertyInputPath = subPropertyInputPath;
-    }
-
-    public String getInputPath() {
-        return inputPath;
-    }
-
-    public void setInputPath(String inputPath) {
-        this.inputPath = inputPath;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
+        this.setUserCreated(propertyDataDefinition.isUserCreated());
     }
 
     // @Override
@@ -165,72 +144,20 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         return true;
     }
 
-    public void setDefinition(boolean definition) {
-        this.definition = definition;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public String getDefaultValue() {
-        return defaultValue;
-    }
-
-    public void setDefaultValue(String defaultValue) {
-        this.defaultValue = defaultValue;
-    }
-
-    public void setType(String type) {
-        this.type = type;
+    public boolean getDefinition() {
+        return definition;
     }
 
     public Boolean isRequired() {
         return required;
     }
 
-    public void setRequired(Boolean required) {
-        this.required = required;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public boolean isPassword() {
-        return password;
-    }
-
-    public void setPassword(boolean password) {
-        this.password = password;
-    }
-
-    public String getUniqueId() {
-        return uniqueId;
-    }
-
-    public void setUniqueId(String uniqueId) {
-        this.uniqueId = uniqueId;
-    }
-
-    public SchemaDefinition getSchema() {
-        return schema;
-    }
-
     public void setSchemaType(String schemaType) {
         if (schema != null && schema.getProperty() != null) {
             schema.getProperty().setType(schemaType);
         }
     }
 
-    public void setSchema(SchemaDefinition entrySchema) {
-        this.schema = entrySchema;
-    }
-
     public String getSchemaType() {
         if (schema != null && schema.getProperty() != null) {
             return schema.getProperty().getType();
@@ -242,34 +169,35 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         if (schema != null) {
             return schema.getProperty();
         }
-
         return null;
     }
 
-    public String getLabel() {
-        return label;
-    }
+    public ToscaGetFunctionType getToscaGetFunctionType() {
+        if (isToscaGetFunction()) {
+            if (toscaFunction != null) {
+                return ((ToscaGetFunctionDataDefinition) toscaFunction).getFunctionType();
+            }
+            return toscaGetFunctionType;
+        }
 
-    public void setLabel(String label) {
-        this.label = label;
+        return null;
     }
 
     public Boolean isHidden() {
         return hidden;
     }
 
-    public void setHidden(Boolean hidden) {
-        this.hidden = hidden;
-    }
-
     public Boolean isImmutable() {
         return immutable;
     }
 
-    public void setImmutable(Boolean immutable) {
-        this.immutable = immutable;
+    public Boolean isMappedToComponentProperty() {
+        return mappedToComponentProperty;
     }
 
+    /**
+     * The resource id which this property belongs to
+     */
     public String getParentUniqueId() {
         return getOwnerId();
     }
@@ -278,95 +206,10 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         setOwnerId(parentUniqueId);
     }
 
-    public List<GetInputValueDataDefinition> getGetInputValues() {
-        return getInputValues;
-    }
-
-    public void setGetInputValues(List<GetInputValueDataDefinition> getInputValues) {
-        this.getInputValues = getInputValues;
-    }
-
     public List<GetPolicyValueDataDefinition> safeGetGetPolicyValues() {
         return CollectionUtils.isEmpty(getPolicyValues) ? new ArrayList<>() : getPolicyValues;
     }
 
-    public List<GetPolicyValueDataDefinition> getGetPolicyValues() {
-        return getPolicyValues;
-    }
-
-    public void setGetPolicyValues(List<GetPolicyValueDataDefinition> getPolicyValues) {
-        this.getPolicyValues = getPolicyValues;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public String getInputId() {
-        return inputId;
-    }
-
-    public void setInputId(String inputId) {
-        this.inputId = inputId;
-    }
-
-    public String getInstanceUniqueId() {
-        return instanceUniqueId;
-    }
-
-    public void setInstanceUniqueId(String instanceUniqueId) {
-        this.instanceUniqueId = instanceUniqueId;
-    }
-
-    public String getPropertyId() {
-        return propertyId;
-    }
-
-    public void setPropertyId(String propertyId) {
-        this.propertyId = propertyId;
-    }
-
-    public Boolean getIsDeclaredListInput() {
-        return isDeclaredListInput;
-    }
-
-    public void setIsDeclaredListInput(Boolean isDeclaredListInput) {
-        this.isDeclaredListInput = isDeclaredListInput;
-    }
-
-    @Override
-    public String toString() {
-        return "PropertyDataDefinition [uniqueId=" + uniqueId + ", type=" + type + ", required=" + required + ", definition=" + definition + ", defaultValue=" + defaultValue + ", description=" + description + ", schema=" + schema + ", password="
-                + password + ", name=" + name + ", value=" + value + ", label=" + label + ", hidden=" + hidden + ", immutable=" + immutable + ", inputPath=" + inputPath + ", status=" + status + ", inputId=" + inputId + ", instanceUniqueId="
-                + instanceUniqueId + ", propertyId=" + propertyId + ", parentUniqueId=" + parentUniqueId + ", getInputValues=" + getInputValues + ", isDeclaredListInput=" + isDeclaredListInput
-                + ", parentPropertyType=" + parentPropertyType
-                + ", subPropertyInputPath=" + subPropertyInputPath + "]";
-    }
-
-    @Override
-    public int hashCode() {
-        final int hashingValueDefinition = 1231;
-        final int hashingValueNoDefinition = 1237;
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode());
-        result = prime * result + (definition ? hashingValueDefinition : hashingValueNoDefinition);
-        result = prime * result + ((description == null) ? 0 : description.hashCode());
-        result = prime * result + (password ? hashingValueDefinition : hashingValueNoDefinition);
-        result = prime * result + ((required == null) ? 0 : required.hashCode());
-        result = prime * result + ((schema == null) ? 0 : schema.hashCode());
-        result = prime * result + ((type == null) ? 0 : type.hashCode());
-        result = prime * result + ((uniqueId == null) ? 0 : uniqueId.hashCode());
-        result = prime * result + ((parentUniqueId == null) ? 0 : parentUniqueId.hashCode());
-        result = prime * result + ((status == null) ? 0 : status.hashCode());
-        result = prime * result + ((isDeclaredListInput == null) ? 0 : isDeclaredListInput.hashCode());
-        return result;
-    }
-
     public boolean typeEquals(Object obj) {
         if (this == obj) {
             return true;
@@ -392,90 +235,6 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         return thisSchemaType.equals(otherSchemaType);
     }
 
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        PropertyDataDefinition other = (PropertyDataDefinition) obj;
-        if (defaultValue == null) {
-            if (other.defaultValue != null) {
-                return false;
-            }
-        } else if (!defaultValue.equals(other.defaultValue)) {
-            return false;
-        }
-        if (definition != other.definition) {
-            return false;
-        }
-        if (description == null) {
-            if (other.description != null) {
-                return false;
-            }
-        } else if (!description.equals(other.description)) {
-            return false;
-        }
-        if (password != other.password) {
-            return false;
-        }
-        if (required == null) {
-            if (other.required != null) {
-                return false;
-            }
-        } else if (!required.equals(other.required)) {
-            return false;
-        }
-        if (schema == null) {
-            if (other.schema != null) {
-                return false;
-            }
-        } else if (!schema.equals(other.schema)) {
-            return false;
-        }
-        if (type == null) {
-            if (other.type != null) {
-                return false;
-            }
-        } else if (!type.equals(other.type)) {
-            return false;
-        }
-        if (parentUniqueId == null) {
-            if (other.parentUniqueId != null) {
-                return false;
-            }
-        } else if (!parentUniqueId.equals(other.parentUniqueId)) {
-            return false;
-        }
-        if (uniqueId == null) {
-            if (other.uniqueId != null) {
-                return false;
-            }
-        } else if (!uniqueId.equals(other.uniqueId)) {
-            return false;
-        }
-        if (status == null) {
-            if (other.status != null) {
-                return false;
-            }
-        } else if (!status.equals(other.status)) {
-            return false;
-        }
-        if (isDeclaredListInput == null) {
-            if (other.isDeclaredListInput != null) {
-                return false;
-            }
-        } else if (!isDeclaredListInput.equals(other.isDeclaredListInput)) {
-            return false;
-        }
-        return true;
-    }
-
     @Override
     public Object getToscaPresentationValue(JsonPresentationFields field) {
         switch (field) {
@@ -529,18 +288,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;
@@ -562,11 +319,8 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         Set<Annotation> annotationSet = isNotEmpty(newAnnotations) ? new HashSet<>(newAnnotations) : new HashSet<>();
         //We would to prioritize the new valid annotations over the old ones if the same one existed.
         if (this.annotations != null) {
-            for (Annotation oldInputAnnotation : this.annotations) {
-                annotationSet.add(oldInputAnnotation);
-            }
+            annotationSet.addAll(this.annotations);
         }
-
         this.annotations = new ArrayList<>(annotationSet);
         setToscaPresentationValue(JsonPresentationFields.ANNOTATIONS, this.annotations);
     }
@@ -575,4 +329,23 @@ public class PropertyDataDefinition extends ToscaDataDefinition {
         return (List<Annotation>) getToscaPresentationValue(JsonPresentationFields.ANNOTATIONS);
     }
 
+    @JsonIgnoreProperties
+    public boolean isToscaFunction() {
+        return this.toscaGetFunctionType != null || this.toscaFunction != null;
+    }
+
+
+    @JsonIgnoreProperties
+    public boolean isToscaGetFunction() {
+        return this.toscaGetFunctionType != null || (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;
+    }
+
 }