/*- * ============LICENSE_START======================================================= * SDC * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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. * ============LICENSE_END========================================================= */ package org.openecomp.sdc.be.datatypes.elements; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition; import fj.data.Either; public class PropertyDataDefinition extends ToscaDataDefinition implements Serializable { /** * */ private static final long serialVersionUID = 5798685557528432389L; 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; private Boolean hidden = Boolean.FALSE;; private Boolean immutable = Boolean.FALSE; private String inputPath; /** * The resource id which this property belongs to */ private String parentUniqueId; private List getInputValues; public PropertyDataDefinition() { super(); } public PropertyDataDefinition(Map pr) { super(pr); } public PropertyDataDefinition(PropertyDataDefinition p) { super(); this.setUniqueId(p.getUniqueId()); this.setRequired(p.isRequired()); this.setDefaultValue(p.getDefaultValue()); this.setDescription(p.getDescription()); this.setSchema(p.getSchema()); this.setPassword(p.isPassword()); this.setType(p.getType()); this.setName(p.getName()); this.setValue(p.getValue()); this.setRequired(p.isRequired()); this.setHidden(p.isHidden()); this.setLabel(p.getLabel()); this.setImmutable(p.isImmutable()); this.setParentUniqueId(p.getParentUniqueId()); this.setOwnerId(p.getOwnerId()); this.setGetInputValues(p.getInputValues); this.setInputPath(p.getInputPath()); } 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; } // @Override public boolean isDefinition() { 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 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 setSchema(SchemaDefinition entrySchema) { this.schema = entrySchema; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } 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 String getParentUniqueId() { return getOwnerId(); } public void setParentUniqueId(String parentUniqueId) { setOwnerId(parentUniqueId); } public List getGetInputValues() { return getInputValues; } public void setGetInputValues(List getInputValues) { this.getInputValues = getInputValues; } @Override public String toString() { return "PropertyDataDefinition [uniqueId=" + uniqueId + ", type=" + type + ", required=" + required + ", defaultValue=" + defaultValue + ", description=" + description + ", entrySchema=" + schema + ", parentUniqueId=" + parentUniqueId + ", password=" + password + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode()); result = prime * result + (definition ? 1231 : 1237); result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + (password ? 1231 : 1237); 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()); return result; } @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; return true; } @Override public Object getToscaPresentationValue(JsonPresentationFields field) { switch (field) { case NAME: return name; case UNIQUE_ID: return uniqueId; case PASSWORD: return password; case TYPE: return type; case DEFINITION: return definition; case VALUE: return value; case DEFAULT_VALUE: return defaultValue; default: return super.getToscaPresentationValue(field); } } protected T overrideDataDefinition(T other, boolean allowDefaultValueOverride){ if(this.getType().equals(other.getType())){ other.setOwnerId(getOwnerId()); if(allowDefaultValueOverride) other.setDefaultValue(getDefaultValue()); return other; } return null; } //return Either.right(propertyName) if an illegal merge was attempted (overriding data type is forbidden) public static Either, String> mergeProperties(Map derivedProps, Map importedProps, boolean allowDefaultValueOverride){ for(T property : importedProps.values()){ derivedProps.merge(property.getName(), property, (derivedProp, importedProp) -> derivedProp.overrideDataDefinition(importedProp, allowDefaultValueOverride)); //validate merge success if(!derivedProps.containsKey(property.getName())) return Either.right(property.getName()); } return Either.left(derivedProps); } public static Map listToMapByName(List propertiesList) { return propertiesList.stream() .collect(Collectors.toMap(p -> p.getName(), p -> p)); } }