summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/sdc/toscaparser/api/Property.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/sdc/toscaparser/api/Property.java')
-rw-r--r--src/main/java/org/onap/sdc/toscaparser/api/Property.java369
1 files changed, 184 insertions, 185 deletions
diff --git a/src/main/java/org/onap/sdc/toscaparser/api/Property.java b/src/main/java/org/onap/sdc/toscaparser/api/Property.java
index 743262a..e20bd2f 100644
--- a/src/main/java/org/onap/sdc/toscaparser/api/Property.java
+++ b/src/main/java/org/onap/sdc/toscaparser/api/Property.java
@@ -7,9 +7,9 @@
* 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.
@@ -37,138 +37,139 @@ import java.util.stream.Collectors;
public class Property {
// TOSCA built-in Property type
- private static final Logger logger = LoggerFactory.getLogger(Property.class.getName());
-
- private static final String TYPE = "type";
- private static final String REQUIRED = "required";
- private static final String DESCRIPTION = "description";
- private static final String DEFAULT = "default";
- private static final String CONSTRAINTS = "constraints";
- private static String ENTRY_SCHEMA = "entry_schema";
- private static String DATA_TYPE = "datatypes";
-
- private static final String[] PROPERTY_KEYS = {
- TYPE, REQUIRED, DESCRIPTION, DEFAULT, CONSTRAINTS};
-
- private static final String ENTRYTYPE = "type";
- private static final String ENTRYPROPERTIES = "properties";
- private static final String PATH_DELIMITER = "#";
- private static final String[] ENTRY_SCHEMA_KEYS = {
- ENTRYTYPE, ENTRYPROPERTIES};
-
- private String name;
- private Object value;
- private Schema schema;
- private LinkedHashMap<String,Object> customDef;
-
- public Property(Map.Entry<String,Object> propertyEntry){
+ private static final Logger LOGGER = LoggerFactory.getLogger(Property.class.getName());
+
+ private static final String TYPE = "type";
+ private static final String REQUIRED = "required";
+ private static final String DESCRIPTION = "description";
+ private static final String DEFAULT = "default";
+ private static final String CONSTRAINTS = "constraints";
+ private static String entrySchema = "entry_schema";
+ private static String dataType = "datatypes";
+
+ private static final String[] PROPERTY_KEYS = {
+ TYPE, REQUIRED, DESCRIPTION, DEFAULT, CONSTRAINTS};
+
+ private static final String ENTRYTYPE = "type";
+ private static final String ENTRYPROPERTIES = "properties";
+ private static final String PATH_DELIMITER = "#";
+ private static final String[] ENTRY_SCHEMA_KEYS = {
+ ENTRYTYPE, ENTRYPROPERTIES};
+
+ private String name;
+ private Object value;
+ private Schema schema;
+ private LinkedHashMap<String, Object> customDef;
+
+ public Property(Map.Entry<String, Object> propertyEntry) {
name = propertyEntry.getKey();
value = propertyEntry.getValue();
- }
- public Property(String propname,
- Object propvalue,
- LinkedHashMap<String,Object> propschemaDict,
- LinkedHashMap<String,Object> propcustomDef) {
-
+ }
+
+ public Property(String propname,
+ Object propvalue,
+ LinkedHashMap<String, Object> propschemaDict,
+ LinkedHashMap<String, Object> propcustomDef) {
+
name = propname;
value = propvalue;
customDef = propcustomDef;
schema = new Schema(propname, propschemaDict);
- }
-
- public String getType() {
- return schema.getType();
- }
-
- public boolean isRequired() {
- return schema.isRequired();
- }
-
- public String getDescription() {
- return schema.getDescription();
- }
-
- public Object getDefault() {
- return schema.getDefault();
- }
-
- public ArrayList<Constraint> getConstraints() {
- return schema.getConstraints();
- }
-
- public LinkedHashMap<String,Object> getEntrySchema() {
- return schema.getEntrySchema();
- }
-
-
- public String getName() {
- return name;
- }
-
- public Object getValue() {
- return value;
- }
-
- // setter
- public Object setValue(Object vob) {
- value = vob;
- return value;
- }
-
- public void validate() {
- // Validate if not a reference property
- if(!Function.isFunction(value)) {
- if(getType().equals(Schema.STRING)) {
- value = value.toString();
- }
- value = DataEntity.validateDatatype(getType(),value,
- getEntrySchema(),
- customDef,
- name);
- _validateConstraints();
- }
- }
-
- private void _validateConstraints() {
- if(getConstraints() != null) {
- for(Constraint constraint: getConstraints()) {
- constraint.validate(value);
- }
- }
- }
-
- @Override
- public String toString() {
- return "Property{" +
- "name='" + name + '\'' +
- ", value=" + value +
- ", schema=" + schema +
- ", customDef=" + customDef +
- '}';
- }
+ }
+
+ public String getType() {
+ return schema.getType();
+ }
+
+ public boolean isRequired() {
+ return schema.isRequired();
+ }
+
+ public String getDescription() {
+ return schema.getDescription();
+ }
+
+ public Object getDefault() {
+ return schema.getDefault();
+ }
+
+ public ArrayList<Constraint> getConstraints() {
+ return schema.getConstraints();
+ }
+
+ public LinkedHashMap<String, Object> getEntrySchema() {
+ return schema.getEntrySchema();
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ // setter
+ public Object setValue(Object vob) {
+ value = vob;
+ return value;
+ }
+
+ public void validate() {
+ // Validate if not a reference property
+ if (!Function.isFunction(value)) {
+ if (getType().equals(Schema.STRING)) {
+ value = value.toString();
+ }
+ value = DataEntity.validateDatatype(getType(), value,
+ getEntrySchema(),
+ customDef,
+ name);
+ validateConstraints();
+ }
+ }
+
+ private void validateConstraints() {
+ if (getConstraints() != null) {
+ for (Constraint constraint : getConstraints()) {
+ constraint.validate(value);
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "Property{"
+ + "name='" + name + '\''
+ + ", value=" + value
+ + ", schema=" + schema
+ + ", customDef=" + customDef
+ + '}';
+ }
/**
* Retrieves property value as list of strings if<br>
* - the value is simple<br>
* - the value is list of simple values<br>
* - the provided path refers to a simple property inside a data type<br>
- * @param propertyPath valid name of property for search.<br>
- * If a name refers to a simple field inside a datatype, the property name should be defined with # delimiter.<br>
*
+ * @param propertyPath valid name of property for search.<br>
+ * If a name refers to a simple field inside a datatype, the property name should be defined with # delimiter.<br>
* @return List of property values. If not found, empty list will be returned.<br>
* If property value is a list either of simple fields or of simple fields inside a datatype, all values from the list should be returned
*/
public List<String> getLeafPropertyValue(String propertyPath) {
List<String> propertyValueList = Collections.emptyList();
- if (logger.isDebugEnabled()) {
- logger.debug("getLeafPropertyValue=> A new request: propertyPath: {}, value: {}", propertyPath, getValue());
- }
- if (propertyPath == null || getValue() == null ||
- //if entry_schema disappears, it is datatype,
- // otherwise it is map of simple types - should be ignored
- isValueMapOfSimpleTypes()) {
- logger.error("It is a wrong request - ignoring! propertyPath: {}, value: {}", propertyPath, getValue());
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("getLeafPropertyValue=> A new request: propertyPath: {}, value: {}", propertyPath, getValue());
+ }
+ if (propertyPath == null || getValue() == null
+ //if entry_schema disappears, it is datatype,
+ // otherwise it is map of simple types - should be ignored
+ || isValueMapOfSimpleTypes()) {
+ LOGGER.error("It is a wrong request - ignoring! propertyPath: {}, value: {}", propertyPath, getValue());
return propertyValueList;
}
String[] path = propertyPath.split(PATH_DELIMITER);
@@ -176,16 +177,15 @@ public class Property {
if (Schema.isRequestedTypeSimple(getPropertyTypeByPath(path))) {
//the internal property type in the path is either simple or list of simple types
if (isValueInsideDataType()) {
- if (logger.isDebugEnabled()) {
- logger.debug("The requested is an internal simple property inside of a data type");
- }
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("The requested is an internal simple property inside of a data type");
+ }
//requested value is an internal simple property inside of a data type
propertyValueList = getSimplePropertyValueForComplexType(path);
- }
- else {
- if (logger.isDebugEnabled()) {
- logger.debug("The requested property has simple type or list of simple types");
- }
+ } else {
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("The requested property has simple type or list of simple types");
+ }
//the requested property is simple type or list of simple types
propertyValueList = getSimplePropertyValueForSimpleType();
}
@@ -194,44 +194,43 @@ public class Property {
}
private boolean isValueMapOfSimpleTypes() {
- if (getValue() instanceof Map && getEntrySchema() != null) {
- logger.warn("This property value is a map of simple types");
- return true;
- }
- return false;
- }
+ if (getValue() instanceof Map && getEntrySchema() != null) {
+ LOGGER.warn("This property value is a map of simple types");
+ return true;
+ }
+ return false;
+ }
private boolean isValueInsideDataType() {
//value is either a list of values for data type
//or data type
return (Schema.LIST.equals(getType()) && isDataTypeInEntrySchema())
- || (getEntrySchema() == null && getType().contains(DATA_TYPE));
+ || (getEntrySchema() == null && getType().contains(dataType));
}
private Object getSimpleValueFromComplexObject(Object current, String[] path) {
- if (current == null) {
- return null;
- }
- int index = 0;
-
- if (path.length > index) {
- for (int i = index; i < path.length; i++) {
- if (current instanceof Map) {
- current = ((Map<String, Object>) current).get(path[i]);
- } else if (current instanceof List) {
- current = ((List) current).get(0);
- i--;
- }
- else {
- return null;
- }
- }
- }
- if (current != null) {
- return current;
- }
- return null;
- }
+ if (current == null) {
+ return null;
+ }
+ int index = 0;
+
+ if (path.length > index) {
+ for (int i = index; i < path.length; i++) {
+ if (current instanceof Map) {
+ current = ((Map<String, Object>) current).get(path[i]);
+ } else if (current instanceof List) {
+ current = ((List) current).get(0);
+ i--;
+ } else {
+ return null;
+ }
+ }
+ }
+ if (current != null) {
+ return current;
+ }
+ return null;
+ }
private List<String> getSimplePropertyValueForSimpleType() {
if (getValue() instanceof List || getValue() instanceof Map) {
@@ -240,32 +239,32 @@ public class Property {
return Lists.newArrayList(String.valueOf(value));
}
- private List<String> getSimplePropertyValueForComplexType(String[] path) {
- if (getValue() instanceof List ) {
- return ((List<Object>) getValue()).stream()
- .map(v -> {
- if (path != null) {
- return getSimpleValueFromComplexObject(v, path);
- } else {
- return v;
- }
- })
- //it might be null when get_input can't be resolved
- // e.g.:
- // - get_input has two parameters: 1. list and 2. index in this list
- //and list has no value
- // - neither value no default is defined for get_input
- .filter(Objects::nonNull)
- .map(String::valueOf)
- .collect(Collectors.toList());
- }
- //it is data type
- List<String> valueList = Lists.newArrayList();
- String valueString = String.valueOf(getSimpleValueFromComplexObject(getValue(), path));
- if (Objects.nonNull(valueString)) {
- valueList.add(valueString);
- }
- return valueList;
+ private List<String> getSimplePropertyValueForComplexType(String[] path) {
+ if (getValue() instanceof List) {
+ return ((List<Object>) getValue()).stream()
+ .map(v -> {
+ if (path != null) {
+ return getSimpleValueFromComplexObject(v, path);
+ } else {
+ return v;
+ }
+ })
+ //it might be null when get_input can't be resolved
+ // e.g.:
+ // - get_input has two parameters: 1. list and 2. index in this list
+ //and list has no value
+ // - neither value no default is defined for get_input
+ .filter(Objects::nonNull)
+ .map(String::valueOf)
+ .collect(Collectors.toList());
+ }
+ //it is data type
+ List<String> valueList = Lists.newArrayList();
+ String valueString = String.valueOf(getSimpleValueFromComplexObject(getValue(), path));
+ if (Objects.nonNull(valueString)) {
+ valueList.add(valueString);
+ }
+ return valueList;
}
private String getPropertyTypeByPath(String[] path) {
@@ -281,7 +280,7 @@ public class Property {
String propertyType = getType();
if (Schema.LIST.equals(propertyType)) {
//if it is list, return entry schema type
- return (String)getEntrySchema().get(ENTRYTYPE);
+ return (String) getEntrySchema().get(ENTRYTYPE);
}
return propertyType;
}
@@ -297,7 +296,7 @@ public class Property {
private String getInternalPropertyType(String dataTypeName, String[] path, int index) {
if (path.length > index) {
- LinkedHashMap<String, Object> complexProperty = (LinkedHashMap<String, Object>)customDef.get(dataTypeName);
+ LinkedHashMap<String, Object> complexProperty = (LinkedHashMap<String, Object>) customDef.get(dataTypeName);
if (complexProperty != null) {
LinkedHashMap<String, Object> dataTypeProperties = (LinkedHashMap<String, Object>) complexProperty.get(ENTRYPROPERTIES);
return getPropertyTypeFromCustomDefDeeply(path, index, dataTypeProperties);
@@ -308,7 +307,7 @@ public class Property {
}
private String getEntrySchemaType(LinkedHashMap<String, Object> property) {
- LinkedHashMap<String, Object> entrySchema = (LinkedHashMap<String, Object>)property.get(ENTRY_SCHEMA);
+ LinkedHashMap<String, Object> entrySchema = (LinkedHashMap<String, Object>) property.get(Property.entrySchema);
if (entrySchema != null) {
return (String) entrySchema.get(TYPE);
}
@@ -320,7 +319,7 @@ public class Property {
LinkedHashMap<String, Object> foundProperty = (LinkedHashMap<String, Object>) (properties).get(path[index]);
if (foundProperty != null) {
String propertyType = calculatePropertyType(foundProperty);
- if (propertyType == null || index == path.length - 1){
+ if (propertyType == null || index == path.length - 1) {
return propertyType;
}
return getInternalPropertyType(propertyType, path, index + 1);
@@ -330,8 +329,8 @@ public class Property {
}
private boolean isDataTypeInEntrySchema() {
- String entrySchemaType = (String)getEntrySchema().get(ENTRYTYPE);
- return entrySchemaType != null && entrySchemaType.contains(DATA_TYPE);
+ String entrySchemaType = (String) getEntrySchema().get(ENTRYTYPE);
+ return entrySchemaType != null && entrySchemaType.contains(dataType);
}