From b0686a9ab5db28b0ee1fc3fea270667023626e5f Mon Sep 17 00:00:00 2001 From: Pavel Aharoni Date: Sun, 24 Sep 2017 16:35:27 +0300 Subject: [SDC-380] jtosca errors cutomization Change-Id: I18513daa0c3cdf99b5cf5b6732c7c5c57486c7d0 Signed-off-by: Pavel Aharoni --- .../openecomp/sdc/toscaparser/api/DataEntity.java | 31 +++--- .../sdc/toscaparser/api/DataEntity.java.orig | 2 +- .../sdc/toscaparser/api/EntityTemplate.java | 50 ++++----- .../org/openecomp/sdc/toscaparser/api/Group.java | 11 +- .../sdc/toscaparser/api/ImportsLoader.java | 101 ++++++++--------- .../sdc/toscaparser/api/NodeTemplate.java | 56 +++++----- .../org/openecomp/sdc/toscaparser/api/Policy.java | 11 +- .../openecomp/sdc/toscaparser/api/Repository.java | 23 ++-- .../sdc/toscaparser/api/SubstitutionMappings.java | 60 +++++----- .../sdc/toscaparser/api/TopologyTemplate.java | 26 +++-- .../sdc/toscaparser/api/TopologyTemplate.java.orig | 16 +-- .../sdc/toscaparser/api/ToscaTemplate.java | 78 ++++++------- .../openecomp/sdc/toscaparser/api/Triggers.java | 17 +-- .../sdc/toscaparser/api/UnsupportedType.java | 11 +- .../toscaparser/api/common/ExceptionCollector.java | 122 --------------------- .../toscaparser/api/common/JToscaException.java | 12 +- .../api/common/JToscaValidationIssue.java | 35 ++++++ .../api/common/ValidationIssueCollector.java | 35 ++++++ .../sdc/toscaparser/api/elements/EntityType.java | 6 +- .../sdc/toscaparser/api/elements/GroupType.java | 23 ++-- .../toscaparser/api/elements/InterfacesDef.java | 11 +- .../sdc/toscaparser/api/elements/NodeType.java | 12 +- .../sdc/toscaparser/api/elements/PolicyType.java | 29 ++--- .../sdc/toscaparser/api/elements/PortSpec.java | 17 +-- .../sdc/toscaparser/api/elements/PropertyDef.java | 18 +-- .../toscaparser/api/elements/RelationshipType.java | 13 +-- .../sdc/toscaparser/api/elements/ScalarUnit.java | 22 ++-- .../api/elements/StatefulEntityType.java | 16 ++- .../toscaparser/api/elements/TypeValidation.java | 17 +-- .../api/elements/constraints/Constraint.java | 24 ++-- .../api/elements/constraints/GreaterOrEqual.java | 5 +- .../api/elements/constraints/GreaterThan.java | 7 +- .../api/elements/constraints/InRange.java | 15 +-- .../api/elements/constraints/Length.java | 7 +- .../api/elements/constraints/LessOrEqual.java | 7 +- .../api/elements/constraints/LessThan.java | 7 +- .../api/elements/constraints/MaxLength.java | 7 +- .../api/elements/constraints/MinLength.java | 7 +- .../api/elements/constraints/Pattern.java | 15 +-- .../api/elements/constraints/Schema.java | 19 ++-- .../api/elements/constraints/Schema.java.orig | 2 +- .../api/elements/constraints/ValidValues.java | 2 +- .../sdc/toscaparser/api/functions/Concat.java | 9 +- .../sdc/toscaparser/api/functions/Function.java | 2 +- .../toscaparser/api/functions/GetAttribute.java | 74 +++++++------ .../sdc/toscaparser/api/functions/GetInput.java | 14 +-- .../api/functions/GetOperationOutput.java | 51 ++++----- .../sdc/toscaparser/api/functions/GetProperty.java | 72 ++++++------ .../sdc/toscaparser/api/functions/Token.java | 23 ++-- .../sdc/toscaparser/api/parameters/Input.java | 17 +-- .../sdc/toscaparser/api/parameters/Output.java | 21 ++-- .../openecomp/sdc/toscaparser/api/prereq/CSAR.java | 56 +++++----- .../sdc/toscaparser/api/prereq/CSAR.java.orig | 2 +- .../toscaparser/api/utils/JToscaErrorCodes.java | 16 +-- .../api/utils/TOSCAVersionProperty.java | 22 ++-- .../toscaparser/api/utils/ThreadLocalsHolder.java | 10 +- .../sdc/toscaparser/api/utils/UrlUtils.java | 16 +-- .../sdc/toscaparser/api/utils/ValidateUtils.java | 96 ++++++++-------- .../sdc/toscaparser/api/GetValidationIssues.java | 81 ++++++++++++++ 59 files changed, 821 insertions(+), 766 deletions(-) delete mode 100644 src/main/java/org/openecomp/sdc/toscaparser/api/common/ExceptionCollector.java create mode 100644 src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaValidationIssue.java create mode 100644 src/main/java/org/openecomp/sdc/toscaparser/api/common/ValidationIssueCollector.java create mode 100644 src/test/java/org/openecomp/sdc/toscaparser/api/GetValidationIssues.java (limited to 'src') diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java b/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java index 350068b..08e154f 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java @@ -1,11 +1,10 @@ -package org.openecomp.sdc.toscaparser.api; +package org.openecomp.sdc.toscaparser.api; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.elements.*; import org.openecomp.sdc.toscaparser.api.elements.constraints.Constraint; import org.openecomp.sdc.toscaparser.api.elements.constraints.Schema; @@ -50,9 +49,9 @@ public class DataEntity { else { if(!(value instanceof LinkedHashMap)) { //ERROR under investigation - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE001", String.format( "TypeMismatchError: \"%s\" is not a map. The type is \"%s\"", - value.toString(),dataType.getType())); + value.toString(),dataType.getType()))); if (value instanceof List && ((List) value).size() > 0) { value = ((List) value).get(0); @@ -86,9 +85,9 @@ public class DataEntity { for(String valueKey: valueDict.keySet()) { //1710 devlop JSON validation if(!("json").equals(dataType.getType()) && !allowedProps.contains(valueKey)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Data value of type \"%s\" contains unknown field \"%s\"", - dataType.getType(),valueKey)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE100", String.format( + "UnknownFieldError: Data value of type \"%s\" contains unknown field \"%s\"", + dataType.getType(),valueKey))); } } @@ -109,9 +108,9 @@ public class DataEntity { } } if(missingProp.size() > 0) { - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE003",String.format( "MissingRequiredFieldError: Data value of type \"%s\" is missing required field(s) \"%s\"", - dataType.getType(),missingProp.toString())); + dataType.getType(),missingProp.toString()))); } // check every field @@ -169,9 +168,9 @@ public class DataEntity { } else if (type == null) { //NOT ANALYZED - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE002", String.format( "MissingType: Type is missing for value \"%s\"", - value.toString())); + value.toString()))); return value; } else if(type.equals(Schema.STRING)) { @@ -277,7 +276,7 @@ public class DataEntity { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import TypeMismatchError from toscaparser.common.exception import UnknownFieldError @@ -318,7 +317,7 @@ class DataEntity(object): # If the datatype has 'properties' definition else: if not isinstance(self.value, dict): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( TypeMismatchError(what=self.value, type=self.datatype.type)) allowed_props = [] @@ -335,7 +334,7 @@ class DataEntity(object): # check allowed field for value_key in list(self.value.keys()): if value_key not in allowed_props: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what=(_('Data value of type "%s"') % self.datatype.type), field=value_key)) @@ -351,7 +350,7 @@ class DataEntity(object): if req_key not in list(self.value.keys()): missingprop.append(req_key) if missingprop: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what=(_('Data value of type "%s"') % self.datatype.type), required=missingprop)) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java.orig b/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java.orig index c3f8fb5..2c6d923 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java.orig +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/DataEntity.java.orig @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; import org.openecomp.sdc.toscaparser.api.elements.*; import org.openecomp.sdc.toscaparser.api.elements.constraints.Constraint; import org.openecomp.sdc.toscaparser.api.elements.constraints.Schema; diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/EntityTemplate.java b/src/main/java/org/openecomp/sdc/toscaparser/api/EntityTemplate.java index 9220dac..32de069 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/EntityTemplate.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/EntityTemplate.java @@ -1,13 +1,13 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; +import org.openecomp.sdc.toscaparser.api.elements.*; +import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; + import java.util.ArrayList; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.elements.*; -import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; - public abstract class EntityTemplate { // Base class for TOSCA templates @@ -93,8 +93,8 @@ public abstract class EntityTemplate { if(type == null) { //msg = (_('Policy definition of "%(pname)s" must have' // ' a "type" ''attribute.') % dict(pname=name)) - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValidationError: Policy definition of \"%s\" must have a \"type\" attribute",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE140", String.format( + "ValidationError: Policy definition of \"%s\" must have a \"type\" attribute",name))); } typeDefinition = new PolicyType(type, customDef); } @@ -335,9 +335,9 @@ public abstract class EntityTemplate { // '"default_instances" value is not between ' // '"min_instances" and "max_instances".' % // self.name) - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE141", String.format( "ValidationError: \"properties\" of template \"%s\": \"default_instances\" value is not between \"min_instances\" and \"max_instances\"", - name)); + name))); } } } @@ -366,17 +366,17 @@ public abstract class EntityTemplate { } // Required properties found without value or a default value if(!reqPropsNoValueOrDefault.isEmpty()) { - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE003", String.format( "MissingRequiredFieldError: properties of template \"%s\" are missing field(s): %s", - name,reqPropsNoValueOrDefault.toString())); + name,reqPropsNoValueOrDefault.toString()))); } } else { // Required properties in schema, but not in template if(!requiredProps.isEmpty()) { - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE004", String.format( "MissingRequiredFieldError2: properties of template \"%s\" are missing field(s): %s", - name,requiredProps.toString())); + name,requiredProps.toString()))); } } } @@ -384,8 +384,8 @@ public abstract class EntityTemplate { @SuppressWarnings("unchecked") private void _validateField(LinkedHashMap template) { if(!(template instanceof LinkedHashMap)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredFieldError: Template \"%s\" is missing required field \"%s\"",name,TYPE)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE142", String.format( + "MissingRequiredFieldError: Template \"%s\" is missing required field \"%s\"",name,TYPE))); return;//??? } boolean bBad = false; @@ -402,8 +402,8 @@ public abstract class EntityTemplate { bBad = (template.get(TYPE) == null); } if(bBad) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredFieldError: Template \"%s\" is missing required field \"%s\"",name,TYPE)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE143", String.format( + "MissingRequiredFieldError: Template \"%s\" is missing required field \"%s\"",name,TYPE))); } } @@ -417,8 +417,8 @@ public abstract class EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Section \"%s\" of template \"%s\" contains unknown field \"%s\"",section,name,sname)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE144", String.format( + "UnknownFieldError: Section \"%s\" of template \"%s\" contains unknown field \"%s\"",section,name,sname))); } } @@ -585,7 +585,7 @@ class EntityTemplate(object): if not type: msg = (_('Policy definition of "%(pname)s" must have' ' a "type" ''attribute.') % dict(pname=name)) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(msg)) self.type_definition = PolicyType(type, custom_def) @@ -729,7 +729,7 @@ class EntityTemplate(object): '"default_instances" value is not between ' '"min_instances" and "max_instances".' % self.name) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) def _common_validate_properties(self, entitytype, properties): @@ -751,21 +751,21 @@ class EntityTemplate(object): req_props_no_value_or_default.append(r) # Required properties found without value or a default value if req_props_no_value_or_default: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what='"properties" of template "%s"' % self.name, required=req_props_no_value_or_default)) else: # Required properties in schema, but not in template if required_props: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what='"properties" of template "%s"' % self.name, required=required_props)) def _validate_field(self, template): if not isinstance(template, dict): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what='Template "%s"' % self.name, required=self.TYPE)) try: @@ -777,14 +777,14 @@ class EntityTemplate(object): else: template[self.TYPE] except KeyError: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what='Template "%s"' % self.name, required=self.TYPE)) def _common_validate_field(self, schema, allowedlist, section): for name in schema: if name not in allowedlist: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError( what=('"%(section)s" of template "%(nodename)s"' % {'section': section, 'nodename': self.name}), diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/Group.java b/src/main/java/org/openecomp/sdc/toscaparser/api/Group.java index 8ed623f..d183ac7 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/Group.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/Group.java @@ -1,10 +1,11 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.elements.Metadata; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.ValidateUtils; @@ -70,9 +71,9 @@ public class Group extends EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE183", String.format( "UnknownFieldError: Groups \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -91,7 +92,7 @@ public class Group extends EntityTemplate { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.entity_template import EntityTemplate from toscaparser.utils import validateutils @@ -131,7 +132,7 @@ class Group(EntityTemplate): def _validate_keys(self): for key in self.entity_tpl.keys(): if key not in SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Groups "%s"' % self.name, field=key)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/ImportsLoader.java b/src/main/java/org/openecomp/sdc/toscaparser/api/ImportsLoader.java index a97a360..6794f9a 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/ImportsLoader.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/ImportsLoader.java @@ -1,6 +1,7 @@ package org.openecomp.sdc.toscaparser.api; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import org.openecomp.sdc.toscaparser.api.elements.TypeValidation; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.UrlUtils; @@ -42,7 +43,7 @@ public class ImportsLoader { if((_path == null || _path.isEmpty()) && tpl == null) { //msg = _('Input tosca template is not provided.') //log.warning(msg) - ThreadLocalsHolder.getCollector().appendException("ValidationError: Input tosca template is not provided"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE184", "ValidationError: Input tosca template is not provided")); } this.path = _path; @@ -78,8 +79,8 @@ public class ImportsLoader { if(importslist == null) { //msg = _('"imports" keyname is defined without including templates.') //log.error(msg) - ThreadLocalsHolder.getCollector().appendException( - "ValidationError: \"imports\" keyname is defined without including templates"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE185", + "ValidationError: \"imports\" keyname is defined without including templates")); return; } @@ -93,8 +94,8 @@ public class ImportsLoader { if(importNames.contains(importName)) { //msg = (_('Duplicate import name "%s" was found.') % import_name) //log.error(msg) - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValidationError: Duplicate import name \"%s\" was found",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE186", String.format( + "ValidationError: Duplicate import name \"%s\" was found",importName))); } importNames.add(importName); //??? @@ -169,8 +170,8 @@ public class ImportsLoader { private void _validateImportKeys(String importName, LinkedHashMap importUri) { if(importUri.get(FILE) == null) { //log.warning(_('Missing keyname "file" in import "%(name)s".') % {'name': import_name}) - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredFieldError: Import of template \"%s\" is missing field %s",importName,FILE)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE187", String.format( + "MissingRequiredFieldError: Import of template \"%s\" is missing field %s",importName,FILE))); } for(String key: importUri.keySet()) { boolean bFound = false; @@ -184,8 +185,8 @@ public class ImportsLoader { //log.warning(_('Unknown keyname "%(key)s" error in ' // 'imported definition "%(def)s".') // % {'key': key, 'def': import_name}) - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Import of template \"%s\" has unknown fiels %s",importName,key)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE188", String.format( + "UnknownFieldError: Import of template \"%s\" has unknown fiels %s",importName,key))); } } } @@ -221,9 +222,9 @@ public class ImportsLoader { repository = (String)((LinkedHashMap)importUriDef).get(REPOSITORY); if(repository != null) { if(!repositories.keySet().contains(repository)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE189", String.format( "InvalidPropertyValueError: Repository \"%s\" not found in \"%s\"", - repository,repositories.keySet().toString())); + repository,repositories.keySet().toString()))); } } } @@ -238,8 +239,8 @@ public class ImportsLoader { // 'definition "%(import_name)s".') // % {'import_name': import_name}) //log.error(msg) - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValidationError: A template file name is not provided with import definition \"%s\"",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE190", String.format( + "ValidationError: A template file name is not provided with import definition \"%s\"",importName))); al[0] = al[1] = null; return al; } @@ -253,8 +254,8 @@ public class ImportsLoader { return al; } catch(IOException e) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: \"%s\" loading YAML import from \"%s\"",e.getClass().getSimpleName(),fileName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE191", String.format( + "ImportError: \"%s\" loading YAML import from \"%s\"",e.getClass().getSimpleName(),fileName))); al[0] = al[1] = null; return al; } @@ -269,7 +270,7 @@ public class ImportsLoader { String msg = String.format( "ImportError: Absolute file name \"%s\" cannot be used in the URL-based input template \"%s\"", fileName,path); - ThreadLocalsHolder.getCollector().appendException(msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE192", msg)); al[0] = al[1] = null; return al; } @@ -312,7 +313,7 @@ public class ImportsLoader { //log.error(msg) String msg = String.format( "ValueError: \"%s\" is not a valid file",importTemplate); - ThreadLocalsHolder.getCollector().appendException(msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE193", msg)); log.debug("ImportsLoader - _loadImportTemplate - {}", msg); } } @@ -330,7 +331,7 @@ public class ImportsLoader { else { String msg = String.format( "Relative file name \"%s\" cannot be used in a pre-parsed input template",fileName); - ThreadLocalsHolder.getCollector().appendException("ImportError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE194", "ImportError: " + msg)); al[0] = al[1] = null; return al; } @@ -339,8 +340,8 @@ public class ImportsLoader { if(importTemplate == null || importTemplate.isEmpty()) { //log.error(_('Import "%(name)s" is not valid.') % // {'name': import_uri_def}) - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Import \"%s\" is not valid",importUriDef)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE195", String.format( + "ImportError: Import \"%s\" is not valid",importUriDef))); al[0] = al[1] = null; return al; } @@ -348,8 +349,8 @@ public class ImportsLoader { // for now, this must be a file if(!aFile) { log.error("ImportsLoader - _loadImportTemplate - Error!! Expected a file. importUriDef = {}, importTemplate = {}", importUriDef, importTemplate); - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Import \"%s\" is not a file",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE196", String.format( + "ImportError: Import \"%s\" is not a file",importName))); al[0] = al[1] = null; return al; } @@ -361,14 +362,14 @@ public class ImportsLoader { return al; } catch(FileNotFoundException e) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Failed to load YAML from \"%s\"",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE197", String.format( + "ImportError: Failed to load YAML from \"%s\"",importName))); al[0] = al[1] = null; return al; } catch(Exception e) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Exception from SnakeYAML file = \"%s\"",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE198", String.format( + "ImportError: Exception from SnakeYAML file = \"%s\"",importName))); al[0] = al[1] = null; return al; } @@ -376,8 +377,8 @@ public class ImportsLoader { if(shortImportNotation) { //log.error(_('Import "%(name)s" is not valid.') % import_uri_def) - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Import \"%s\" is not valid",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE199", String.format( + "ImportError: Import \"%s\" is not valid",importName))); al[0] = al[1] = null; return al; } @@ -410,7 +411,7 @@ public class ImportsLoader { String msg = String.format( "referenced repository \"%s\" in import definition \"%s\" not found", repository,importName); - ThreadLocalsHolder.getCollector().appendException("ImportError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE200", "ImportError: " + msg)); al[0] = al[1] = null; return al; } @@ -424,8 +425,8 @@ public class ImportsLoader { return al; } catch(IOException e) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: Exception loading YAML import from \"%s\"",fullUrl)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE201", String.format( + "ImportError: Exception loading YAML import from \"%s\"",fullUrl))); al[0] = al[1] = null; return al; } @@ -434,13 +435,13 @@ public class ImportsLoader { String msg = String.format( "repository URL \"%s\" in import definition \"%s\" is not valid", repoUrl,importName); - ThreadLocalsHolder.getCollector().appendException("ImportError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE202", "ImportError: " + msg)); } // if we got here something is wrong with the flow... log.error("ImportsLoader - _loadImportTemplate - got to dead end (importName {})", importName); - ThreadLocalsHolder.getCollector().appendException(String.format( - "ImportError: _loadImportTemplate got to dead end (importName %s)\n",importName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE203", String.format( + "ImportError: _loadImportTemplate got to dead end (importName %s)\n",importName))); al[0] = al[1] = null; return al; } @@ -464,7 +465,7 @@ public class ImportsLoader { import logging import os -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidPropertyValueError from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import UnknownFieldError @@ -491,7 +492,7 @@ class ImportsLoader(object): if not path and not tpl: msg = _('Input tosca template is not provided.') log.warning(msg) - ExceptionCollector.appendException(ValidationError(message=msg)) + ValidationIssueCollector.appendException(ValidationError(message=msg)) self.path = path self.repositories = {} if tpl and tpl.get('repositories'): @@ -514,7 +515,7 @@ class ImportsLoader(object): msg = _('"imports" keyname is defined without including ' 'templates.') log.error(msg) - ExceptionCollector.appendException(ValidationError(message=msg)) + ValidationIssueCollector.appendException(ValidationError(message=msg)) return for import_def in self.importslist: @@ -524,7 +525,7 @@ class ImportsLoader(object): msg = (_('Duplicate import name "%s" was found.') % import_name) log.error(msg) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=msg)) imports_names.add(import_name) @@ -568,7 +569,7 @@ class ImportsLoader(object): if self.FILE not in import_uri_def.keys(): log.warning(_('Missing keyname "file" in import "%(name)s".') % {'name': import_name}) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what='Import of template "%s"' % import_name, required=self.FILE)) @@ -577,7 +578,7 @@ class ImportsLoader(object): log.warning(_('Unknown keyname "%(key)s" error in ' 'imported definition "%(def)s".') % {'key': key, 'def': import_name}) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError( what='Import of template "%s"' % import_name, field=key)) @@ -610,7 +611,7 @@ class ImportsLoader(object): repos = self.repositories.keys() if repository is not None: if repository not in repos: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidPropertyValueError( what=_('Repository is not found in "%s"') % repos)) else: @@ -623,7 +624,7 @@ class ImportsLoader(object): 'definition "%(import_name)s".') % {'import_name': import_name}) log.error(msg) - ExceptionCollector.appendException(ValidationError(message=msg)) + ValidationIssueCollector.appendException(ValidationError(message=msg)) return if toscaparser.utils.urlutils.UrlUtils.validate_url(file_name): @@ -638,7 +639,7 @@ class ImportsLoader(object): '"%(template)s".') % {'name': file_name, 'template': self.path}) log.error(msg) - ExceptionCollector.appendException(ImportError(msg)) + ValidationIssueCollector.appendException(ImportError(msg)) return import_template = toscaparser.utils.urlutils.UrlUtils.\ join_url(self.path, file_name) @@ -670,7 +671,7 @@ class ImportsLoader(object): % {'import_template': import_template}) log.error(msg) - ExceptionCollector.appendException + ValidationIssueCollector.appendException (ValueError(msg)) else: # template is pre-parsed if os.path.isabs(file_name) and os.path.isfile(file_name): @@ -681,13 +682,13 @@ class ImportsLoader(object): 'in a pre-parsed input template.') % {'name': file_name}) log.error(msg) - ExceptionCollector.appendException(ImportError(msg)) + ValidationIssueCollector.appendException(ImportError(msg)) return if not import_template: log.error(_('Import "%(name)s" is not valid.') % {'name': import_uri_def}) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ImportError(_('Import "%s" is not valid.') % import_uri_def)) return @@ -695,7 +696,7 @@ class ImportsLoader(object): if short_import_notation: log.error(_('Import "%(name)s" is not valid.') % import_uri_def) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ImportError(_('Import "%s" is not valid.') % import_uri_def)) return @@ -714,7 +715,7 @@ class ImportsLoader(object): 'definition "%(tpl)s" not found.') % {'n_uri': repository, 'tpl': import_name}) log.error(msg) - ExceptionCollector.appendException(ImportError(msg)) + ValidationIssueCollector.appendException(ImportError(msg)) return if toscaparser.utils.urlutils.UrlUtils.validate_url(full_url): @@ -724,5 +725,5 @@ class ImportsLoader(object): 'definition "%(tpl)s".') % {'n_uri': repo_url, 'tpl': import_name}) log.error(msg) - ExceptionCollector.appendException(ImportError(msg)) + ValidationIssueCollector.appendException(ImportError(msg)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/NodeTemplate.java b/src/main/java/org/openecomp/sdc/toscaparser/api/NodeTemplate.java index 6606068..1e97572 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/NodeTemplate.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/NodeTemplate.java @@ -1,5 +1,7 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -86,14 +88,14 @@ public class NodeTemplate extends EntityTemplate { } } if(bFound || customDef.get(node) != null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE205", String.format( "NotImplementedError: Lookup by TOSCA types is not supported. Requirement for \"%s\" can not be full-filled", - getName())); + getName()))); return null; } if(templates.get(node) == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "KeyError: Node template \"%s\" was not found",node)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE206", String.format( + "KeyError: Node template \"%s\" was not found",node))); return null; } NodeTemplate relatedTpl = new NodeTemplate(node,templates,customDef,null,null); @@ -105,7 +107,7 @@ public class NodeTemplate extends EntityTemplate { if(relationship == null) { ArrayList parentReqs = ((NodeType)typeDefinition).getAllRequirements(); if(parentReqs == null) { - ThreadLocalsHolder.getCollector().appendException("ValidationError: parent_req is null"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE207", "ValidationError: parent_req is null")); } else { // for(String key: req.keySet()) { @@ -165,9 +167,9 @@ public class NodeTemplate extends EntityTemplate { } } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE208", String.format( "MissingRequiredFieldError: \"relationship\" used in template \"%s\" is missing required field \"type\"", - relatedTpl.getName())); + relatedTpl.getName()))); } } for(RelationshipType rtype: ((NodeType)typeDefinition).getRelationship().keySet()) { @@ -275,8 +277,8 @@ public class NodeTemplate extends EntityTemplate { ArrayList requires = (ArrayList)((NodeType)typeDefinition).getValue(REQUIREMENTS, entityTpl, false); if(requires != null) { if(!(requires instanceof ArrayList)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "TypeMismatchError: \"requirements\" of template \"%s\" are not of type \"list\"",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE209", String.format( + "TypeMismatchError: \"requirements\" of template \"%s\" are not of type \"list\"",name))); } else { for(Object ro: requires) { @@ -320,8 +322,8 @@ public class NodeTemplate extends EntityTemplate { if(occurrences.size() != 2 || !(0 <= (int)occurrences.get(0) && (int)occurrences.get(0) <= (int)occurrences.get(1)) || (int)occurrences.get(1) == 0) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidPropertyValueError: property has invalid value %s",occurrences.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE210", String.format( + "InvalidPropertyValueError: property has invalid value %s",occurrences.toString()))); } } @@ -335,8 +337,8 @@ public class NodeTemplate extends EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: \"requirements\" of template \"%s\" contains unknown field \"%s\"",name,key)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE211", String.format( + "UnknownFieldError: \"requirements\" of template \"%s\" contains unknown field \"%s\"",name,key))); } } } @@ -369,8 +371,8 @@ public class NodeTemplate extends EntityTemplate { _commonValidateField(value,_collectCustomIfaceOperations(iname),"interfaces"); } else { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: \"interfaces\" of template \"%s\" contains unknown field %s",name,iname)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE212", String.format( + "UnknownFieldError: \"interfaces\" of template \"%s\" contains unknown field %s",name,iname))); } } } @@ -421,8 +423,8 @@ public class NodeTemplate extends EntityTemplate { } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Node template \"%s\" has unknown field \"%s\"",name,ntname)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE213", String.format( + "UnknownFieldError: Node template \"%s\" has unknown field \"%s\"",name,ntname))); } } } @@ -455,7 +457,7 @@ public class NodeTemplate extends EntityTemplate { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidPropertyValueError from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import TypeMismatchError @@ -524,11 +526,11 @@ class NodeTemplate(EntityTemplate): 'Requirement for "%s" can not be full-filled.') % self.name if (node in list(self.type_definition.TOSCA_DEF.keys()) or node in self.custom_def): - ExceptionCollector.appendException(NotImplementedError(msg)) + ValidationIssueCollector.appendException(NotImplementedError(msg)) return if node not in self.templates: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Node template "%s" was not found.') % node)) return @@ -539,7 +541,7 @@ class NodeTemplate(EntityTemplate): if not relationship: parent_reqs = self.type_definition.get_all_requirements() if parent_reqs is None: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message='parent_req is ' + str(parent_reqs))) else: @@ -574,7 +576,7 @@ class NodeTemplate(EntityTemplate): elif not relationship.startswith(rel_prfx): relationship = rel_prfx + relationship else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what=_('"relationship" used in template ' '"%s"') % related_tpl.name, @@ -645,7 +647,7 @@ class NodeTemplate(EntityTemplate): self.entity_tpl) if requires: if not isinstance(requires, list): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( TypeMismatchError( what='"requirements" of template "%s"' % self.name, type='list')) @@ -675,13 +677,13 @@ class NodeTemplate(EntityTemplate): DataEntity.validate_datatype('integer', value) if len(occurrences) != 2 or not (0 <= occurrences[0] <= occurrences[1]) \ or occurrences[1] == 0: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidPropertyValueError(what=(occurrences))) def _validate_requirements_keys(self, requirement): for key in requirement.keys(): if key not in self.REQUIREMENTS_SECTION: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError( what='"requirements" of template "%s"' % self.name, field=key)) @@ -707,7 +709,7 @@ class NodeTemplate(EntityTemplate): self._collect_custom_iface_operations(name), 'interfaces') else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError( what='"interfaces" of template "%s"' % self.name, field=name)) @@ -730,6 +732,6 @@ class NodeTemplate(EntityTemplate): def _validate_fields(self, nodetemplate): for name in nodetemplate.keys(): if name not in self.SECTIONS and name not in self.SPECIAL_SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Node template "%s"' % self.name, field=name))*/ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/Policy.java b/src/main/java/org/openecomp/sdc/toscaparser/api/Policy.java index a59d9d5..26805bd 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/Policy.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/Policy.java @@ -1,10 +1,11 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.ValidateUtils; @@ -101,9 +102,9 @@ public class Policy extends EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE219", String.format( "UnknownFieldError: Policy \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -122,7 +123,7 @@ public class Policy extends EntityTemplate { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.entity_template import EntityTemplate from toscaparser.triggers import Triggers @@ -181,7 +182,7 @@ class Policy(EntityTemplate): def _validate_keys(self): for key in self.entity_tpl.keys(): if key not in SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Policy "%s"' % self.name, field=key)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/Repository.java b/src/main/java/org/openecomp/sdc/toscaparser/api/Repository.java index 92a90af..3ede22c 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/Repository.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/Repository.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.UrlUtils; @@ -24,9 +25,9 @@ public class Repository { if(reposit instanceof LinkedHashMap) { url = (String)((LinkedHashMap)reposit).get("url"); if(url == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE229", String.format( "MissingRequiredFieldError: Repository \"%s\" is missing required field \"url\"", - name)); + name))); } } loadAndValidate(name,reposit); @@ -45,9 +46,9 @@ public class Repository { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE230", String.format( "UnknownFieldError: repositories \"%s\" contains unknown field \"%s\"", - keyname,key)); + keyname,key))); } } @@ -55,8 +56,8 @@ public class Repository { if(repositUrl != null) { boolean urlVal = UrlUtils.validateUrl(repositUrl); if(!urlVal) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "URLException: repsositories \"%s\" Invalid Url",keyname)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE231", String.format( + "URLException: repsositories \"%s\" Invalid Url",keyname))); } } } @@ -74,7 +75,7 @@ public class Repository { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import UnknownFieldError from toscaparser.common.exception import URLException @@ -91,7 +92,7 @@ class Repository(object): self.reposit = values if isinstance(self.reposit, dict): if 'url' not in self.reposit.keys(): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError(what=_('Repository "%s"') % self.name, required='url')) self.url = self.reposit['url'] @@ -102,7 +103,7 @@ class Repository(object): if isinstance(reposit_def, dict): for key in reposit_def.keys(): if key not in SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what=_('repositories "%s"') % self.keyname, field=key)) @@ -111,7 +112,7 @@ class Repository(object): url_val = toscaparser.utils.urlutils.UrlUtils.\ validate_url(reposit_url) if url_val is not True: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( URLException(what=_('repsositories "%s" Invalid Url') % self.keyname)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java b/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java index a68f9fb..e5e9d9a 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java @@ -1,13 +1,17 @@ package org.openecomp.sdc.toscaparser.api; -import java.util.*; - +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.elements.NodeType; import org.openecomp.sdc.toscaparser.api.elements.PropertyDef; import org.openecomp.sdc.toscaparser.api.parameters.Input; import org.openecomp.sdc.toscaparser.api.parameters.Output; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; + public class SubstitutionMappings { // SubstitutionMappings class declaration @@ -126,9 +130,9 @@ public class SubstitutionMappings { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE232", String.format( "UnknownFieldError: SubstitutionMappings contain unknown field \"%s\"", - key)); + key))); } } } @@ -137,14 +141,14 @@ public class SubstitutionMappings { // validate the node_type of substitution mappings String nodeType = (String)subMappingDef.get(NODE_TYPE); if(nodeType == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE233", String.format( "MissingRequiredFieldError: SubstitutionMappings used in topology_template is missing required field \"%s\"", - NODE_TYPE)); + NODE_TYPE))); } Object nodeTypeDef = customDefs.get(nodeType); if(nodeTypeDef == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidNodeTypeError: \"%s\" is invalid",nodeType)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE234", String.format( + "InvalidNodeTypeError: \"%s\" is invalid",nodeType))); } } @@ -170,9 +174,9 @@ public class SubstitutionMappings { for(String property: requiredProperties) { // Check property which is 'required' and has no 'default' value if(!allInputs.contains(property)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE235", String.format( "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing required input \"%s\"", - getNodeType(),property)); + getNodeType(),property))); } } // If the optional properties of node type need to be customized by @@ -188,9 +192,9 @@ public class SubstitutionMappings { diffset.removeAll(allInputs); for(String parameter: diffset) { if(allProperties.contains(parameter)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE236", String.format( "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing required input \"%s\"", - getNodeType(),parameter)); + getNodeType(),parameter))); } } // Additional inputs are not in the properties of node type must @@ -201,9 +205,9 @@ public class SubstitutionMappings { diffset = allInputs; diffset.removeAll(allProperties); if(diffset.contains(inp.getName()) && inp.getDefault() == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE237", String.format( "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing rquired input \"%s\"", - getNodeType(),inp.getName())); + getNodeType(),inp.getName()))); } } } @@ -222,7 +226,7 @@ public class SubstitutionMappings { for(CapabilityAssignment cap: nodeCapabilities) { if(tplsCapabilities != null && tplsCapabilities.get(cap.getName()) == null) { ; //pass - // ExceptionCollector.appendException( + // ValidationIssueCollector.appendException( // UnknownFieldError(what='SubstitutionMappings', // field=cap)) } @@ -247,7 +251,7 @@ public class SubstitutionMappings { String cap = ro.getName(); if(tplsRequirements != null && tplsRequirements.get(cap) == null) { ; //pass - // ExceptionCollector.appendException( + // ValidationIssueCollector.appendException( // UnknownFieldError(what='SubstitutionMappings', // field=cap)) } @@ -272,9 +276,9 @@ public class SubstitutionMappings { for(Output output: outputs) { Object ado = getNodeDefinition().getAttributesDef(); if(ado != null && ((LinkedHashMap)ado).get(output.getName()) == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE238", String.format( "UnknownOutputError: Unknown output \"%s\" in SubstitutionMappings with node_type \"%s\"", - output.getName(),getNodeType())); + output.getName(),getNodeType()))); } } } @@ -313,7 +317,7 @@ public class SubstitutionMappings { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidNodeTypeError from toscaparser.common.exception import MissingDefaultValueError from toscaparser.common.exception import MissingRequiredFieldError @@ -392,7 +396,7 @@ class SubstitutionMappings(object): """validate the keys of substitution mappings.""" for key in self.sub_mapping_def.keys(): if key not in self.SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what=_('SubstitutionMappings'), field=key)) @@ -400,14 +404,14 @@ class SubstitutionMappings(object): """validate the node_type of substitution mappings.""" node_type = self.sub_mapping_def.get(self.NODE_TYPE) if not node_type: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError( what=_('SubstitutionMappings used in topology_template'), required=self.NODE_TYPE)) node_type_def = self.custom_defs.get(node_type) if not node_type_def: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidNodeTypeError(what=node_type)) def _validate_inputs(self): @@ -428,7 +432,7 @@ class SubstitutionMappings(object): for property in required_properties: # Check property which is 'required' and has no 'default' value if property not in all_inputs: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredInputError( what=_('SubstitutionMappings with node_type ') + self.node_type, @@ -443,7 +447,7 @@ class SubstitutionMappings(object): all_properties = set(self.node_definition.get_properties_def()) for parameter in customized_parameters - all_inputs: if parameter in all_properties: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredInputError( what=_('SubstitutionMappings with node_type ') + self.node_type, @@ -456,7 +460,7 @@ class SubstitutionMappings(object): for input in self.inputs: if input.name in all_inputs - all_properties \ and input.default is None: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingDefaultValueError( what=_('SubstitutionMappings with node_type ') + self.node_type, @@ -473,7 +477,7 @@ class SubstitutionMappings(object): if (tpls_capabilities and cap not in list(tpls_capabilities.keys())): pass - # ExceptionCollector.appendException( + # ValidationIssueCollector.appendException( # UnknownFieldError(what='SubstitutionMappings', # field=cap)) @@ -488,7 +492,7 @@ class SubstitutionMappings(object): if (tpls_requirements and req not in list(tpls_requirements.keys())): pass - # ExceptionCollector.appendException( + # ValidationIssueCollector.appendException( # UnknownFieldError(what='SubstitutionMappings', # field=req)) @@ -508,7 +512,7 @@ class SubstitutionMappings(object): # has properties, the specification will be amended? for output in self.outputs: if output.name not in self.node_definition.get_attributes_def(): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownOutputError( where=_('SubstitutionMappings with node_type ') + self.node_type, diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java b/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java index afedfdb..c19623f 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java @@ -1,7 +1,6 @@ package org.openecomp.sdc.toscaparser.api; -import java.util.*; - +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.elements.InterfacesDef; import org.openecomp.sdc.toscaparser.api.elements.NodeType; import org.openecomp.sdc.toscaparser.api.elements.RelationshipType; @@ -12,6 +11,11 @@ import org.openecomp.sdc.toscaparser.api.parameters.Input; import org.openecomp.sdc.toscaparser.api.parameters.Output; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; + public class TopologyTemplate { private static final String DESCRIPTION = "description"; @@ -232,9 +236,9 @@ public class TopologyTemplate { DataEntity.validateDatatype("list", memberNames,null,null,null); if(memberNames.size() < 1 || (new HashSet(memberNames)).size() != memberNames.size()) { - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE005",String.format( "InvalidGroupTargetException: Member nodes \"%s\" should be >= 1 and not repeated", - memberNames.toString())); + memberNames.toString()))); } else { memberNodes = _getGroupMembers(memberNames); @@ -281,8 +285,8 @@ public class TopologyTemplate { } for(String member: members) { if(!nodeNames.contains(member)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidGroupTargetException: Target member \"%s\" is not found in \"nodeTemplates\"",member)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE239", String.format( + "InvalidGroupTargetException: Target member \"%s\" is not found in \"nodeTemplates\"",member))); } } } @@ -383,8 +387,8 @@ public class TopologyTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: TopologyTemplate contains unknown field \"%s\"",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE240", String.format( + "UnknownFieldError: TopologyTemplate contains unknown field \"%s\"",name))); } } } @@ -697,7 +701,7 @@ class TopologyTemplate(object): DataEntity.validate_datatype('list', member_names) if len(member_names) < 1 or \ len(member_names) != len(set(member_names)): - exception.ExceptionCollector.appendException( + exception.ValidationIssueCollector.appendException( exception.InvalidGroupTargetException( message=_('Member nodes "%s" should be >= 1 ' 'and not repeated') % member_names)) @@ -732,7 +736,7 @@ class TopologyTemplate(object): node_names.append(node.name) for member in members: if member not in node_names: - exception.ExceptionCollector.appendException( + exception.ValidationIssueCollector.appendException( exception.InvalidGroupTargetException( message=_('Target member "%s" is not found in ' 'node_templates') % member)) @@ -780,7 +784,7 @@ class TopologyTemplate(object): def _validate_field(self): for name in self.tpl: if name not in SECTIONS: - exception.ExceptionCollector.appendException( + exception.ValidationIssueCollector.appendException( exception.UnknownFieldError(what='Template', field=name)) def _process_intrinsic_functions(self): diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java.orig b/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java.orig index 3af4b34..7e5f4af 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java.orig +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/TopologyTemplate.java.orig @@ -1,11 +1,13 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaError; + import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; import org.openecomp.sdc.toscaparser.api.elements.InterfacesDef; import org.openecomp.sdc.toscaparser.api.elements.NodeType; import org.openecomp.sdc.toscaparser.api.elements.RelationshipType; @@ -233,9 +235,9 @@ public class TopologyTemplate { DataEntity.validateDatatype("list", memberNames,null,null,null); if(memberNames.size() < 1 || (new HashSet(memberNames)).size() != memberNames.size()) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendError(new JToscaError("JE241", String.format( "InvalidGroupTargetException: Member nodes \"%s\" should be >= 1 and not repeated", - memberNames.toString())); + memberNames.toString()))); } else { memberNodes = _getGroupMembers(memberNames); @@ -282,8 +284,8 @@ public class TopologyTemplate { } for(String member: members) { if(!nodeNames.contains(member)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidGroupTargetException: Target member \"%s\" is not found in \"nodeTemplates\"",member)); + ThreadLocalsHolder.getCollector().appendError(new JToscaError("JE242", String.format( + "InvalidGroupTargetException: Target member \"%s\" is not found in \"nodeTemplates\"",member))); } } } @@ -384,8 +386,8 @@ public class TopologyTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: TopologyTemplate contains unknown field \"%s\"",name)); + ThreadLocalsHolder.getCollector().appendError(new JToscaError("JE243", String.format( + "UnknownFieldError: TopologyTemplate contains unknown field \"%s\"",name))); } } } diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/ToscaTemplate.java b/src/main/java/org/openecomp/sdc/toscaparser/api/ToscaTemplate.java index 5d5cb87..f5902c4 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/ToscaTemplate.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/ToscaTemplate.java @@ -1,5 +1,7 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -8,7 +10,7 @@ import java.io.InputStream; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; import org.openecomp.sdc.toscaparser.api.common.JToscaException; import org.openecomp.sdc.toscaparser.api.elements.EntityType; import org.openecomp.sdc.toscaparser.api.elements.Metadata; @@ -110,7 +112,7 @@ public class ToscaTemplate extends Object { boolean aFile, LinkedHashMap yamlDictTpl, boolean _resolveGetInput) throws JToscaException { - ThreadLocalsHolder.setCollector(new ExceptionCollector(_path)); + ThreadLocalsHolder.setCollector(new ValidationIssueCollector()); VALID_TEMPLATE_VERSIONS = new ArrayList<>(); VALID_TEMPLATE_VERSIONS.add("tosca_simple_yaml_1_0"); @@ -174,8 +176,8 @@ public class ToscaTemplate extends Object { tpl = yamlDictTpl; } else { - ThreadLocalsHolder.getCollector().appendException( - "ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE244", + "ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse")); log.debug("ToscaTemplate ValueError: No path or yaml_dict_tpl was provided. There is nothing to parse"); } @@ -449,8 +451,8 @@ public class ToscaTemplate extends Object { private void _validateField() { String sVersion = _tplVersion(); if(sVersion == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredField: Template is missing required field \"%s\"",DEFINITION_VERSION)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE245", String.format( + "MissingRequiredField: Template is missing required field \"%s\"",DEFINITION_VERSION))); } else { _validateVersion(sVersion); @@ -473,9 +475,9 @@ public class ToscaTemplate extends Object { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE246", String.format( "UnknownFieldError: Template contains unknown field \"%s\"", - sKey)); + sKey))); } } } @@ -489,9 +491,9 @@ public class ToscaTemplate extends Object { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE247", String.format( "InvalidTemplateVersion: \"%s\" is invalid. Valid versions are %s", - sVersion,VALID_TEMPLATE_VERSIONS.toString())); + sVersion,VALID_TEMPLATE_VERSIONS.toString()))); } else if(!sVersion.equals("tosca_simple_yaml_1_0")) { EntityType.updateDefinitions(sVersion); @@ -521,39 +523,25 @@ public class ToscaTemplate extends Object { } } else { - ThreadLocalsHolder.getCollector().appendException("ValueError: " + _path + " is not a valid file"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE248", "ValueError: " + _path + " is not a valid file")); return null; } return null; } private void verifyTemplate() throws JToscaException { - ThreadLocalsHolder.getCollector().setWantTrace(false); - - //Warnings - int warningsCount = ThreadLocalsHolder.getCollector().warningsCaught(); - if (warningsCount > 0) { - List warningsStrings = ThreadLocalsHolder.getCollector().getWarningsReport(); - log.warn("####################################################################################################"); - log.warn("CSAR Warnings found! CSAR name - {}", inputPath); - log.warn("ToscaTemplate - verifyTemplate - {} Parsing Warning{} occurred...", warningsCount, (warningsCount > 1 ? "s" : "")); - for (String s : warningsStrings) { - log.warn("{}. CSAR name - {}", s, inputPath); - } - log.warn("####################################################################################################"); - } - //Criticals - int criticalsCount = ThreadLocalsHolder.getCollector().criticalsCaught(); - if (criticalsCount > 0) { - List criticalStrings = ThreadLocalsHolder.getCollector().getCriticalsReport(); - log.error("####################################################################################################"); - log.error("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", criticalsCount, (criticalsCount > 1 ? "s" : "")); - for (String s : criticalStrings) { - log.error("{}. CSAR name - {}", s, inputPath); + int validationIssuesCaught = ThreadLocalsHolder.getCollector().validationIssuesCaught(); + if (validationIssuesCaught > 0) { + List validationIssueStrings = ThreadLocalsHolder.getCollector().getValidationIssueReport(); + log.trace("####################################################################################################"); + log.trace("ToscaTemplate - verifyTemplate - {} Parsing Critical{} occurred...", validationIssuesCaught, (validationIssuesCaught > 1 ? "s" : "")); + for (String s : validationIssueStrings) { + log.trace("{}. CSAR name - {}", s, inputPath); } - throw new JToscaException(String.format("CSAR Validation Failed. CSAR name - {}. Please check logs for details.", inputPath), JToscaErrorCodes.CSAR_TOSCA_VALIDATION_ERROR.getValue()); + log.trace("####################################################################################################"); } + } public String getPath() { @@ -697,7 +685,7 @@ import logging import os from copy import deepcopy -from toscaparser.common.exception import ExceptionCollector.collector +from toscaparser.common.exception import ValidationIssueCollector.collector from toscaparser.common.exception import InvalidTemplateVersion from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import UnknownFieldError @@ -749,7 +737,7 @@ class ToscaTemplate(object): def __init__(self, path=None, parsed_params=None, a_file=True, yaml_dict_tpl=None): - ExceptionCollector.collector.start() + ValidationIssueCollector.collector.start() self.a_file = a_file self.input_path = None self.path = None @@ -770,7 +758,7 @@ class ToscaTemplate(object): if yaml_dict_tpl: self.tpl = yaml_dict_tpl else: - ExceptionCollector.collector.appendException( + ValidationIssueCollector.collector.appendException( ValueError(_('No path or yaml_dict_tpl was provided. ' 'There is nothing to parse.'))) @@ -790,7 +778,7 @@ class ToscaTemplate(object): self._handle_nested_tosca_templates_with_topology() self.graph = ToscaGraph(self.nodetemplates) - ExceptionCollector.collector.stop() + ValidationIssueCollector.collector.stop() self.verify_template() def _topology_template(self): @@ -926,7 +914,7 @@ class ToscaTemplate(object): def _validate_field(self): version = self._tpl_version() if not version: - ExceptionCollector.collector.appendException( + ValidationIssueCollector.collector.appendException( MissingRequiredFieldError(what='Template', required=DEFINITION_VERSION)) else: @@ -936,12 +924,12 @@ class ToscaTemplate(object): for name in self.tpl: if (name not in SECTIONS and name not in self.ADDITIONAL_SECTIONS.get(version, ())): - ExceptionCollector.collector.appendException( + ValidationIssueCollector.collector.appendException( UnknownFieldError(what='Template', field=name)) def _validate_version(self, version): if version not in self.VALID_TEMPLATE_VERSIONS: - ExceptionCollector.collector.appendException( + ValidationIssueCollector.collector.appendException( InvalidTemplateVersion( what=version, valid_versions=', '. join(self.VALID_TEMPLATE_VERSIONS))) @@ -960,23 +948,23 @@ class ToscaTemplate(object): self.a_file = True # the file has been decompressed locally return os.path.join(csar.temp_dir, csar.get_main_template()) else: - ExceptionCollector.collector.appendException( + ValidationIssueCollector.collector.appendException( ValueError(_('"%(path)s" is not a valid file.') % {'path': path})) def verify_template(self): - if ExceptionCollector.collector.exceptionsCaught(): + if ValidationIssueCollector.collector.exceptionsCaught(): if self.input_path: raise ValidationError( message=(_('\nThe input "%(path)s" failed validation with ' 'the following error(s): \n\n\t') % {'path': self.input_path}) + - '\n\t'.join(ExceptionCollector.collector.getExceptionsReport())) + '\n\t'.join(ValidationIssueCollector.collector.getExceptionsReport())) else: raise ValidationError( message=_('\nThe pre-parsed input failed validation with ' 'the following error(s): \n\n\t') + - '\n\t'.join(ExceptionCollector.collector.getExceptionsReport())) + '\n\t'.join(ValidationIssueCollector.collector.getExceptionsReport())) else: if self.input_path: msg = (_('The input "%(path)s" successfully passed ' diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/Triggers.java b/src/main/java/org/openecomp/sdc/toscaparser/api/Triggers.java index 0ec0b5a..1e82a6c 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/Triggers.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/Triggers.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.ValidateUtils; @@ -77,9 +78,9 @@ public class Triggers extends EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE249", String.format( "UnknownFieldError: Triggers \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -94,9 +95,9 @@ public class Triggers extends EntityTemplate { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE250", String.format( "UnknownFieldError: Triggers \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -127,7 +128,7 @@ public class Triggers extends EntityTemplate { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.entity_template import EntityTemplate @@ -170,14 +171,14 @@ class Triggers(EntityTemplate): def _validate_keys(self): for key in self.trigger_tpl.keys(): if key not in SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Triggers "%s"' % self.name, field=key)) def _validate_condition(self): for key in self.get_condition(): if key not in CONDITION_KEYNAMES: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Triggers "%s"' % self.name, field=key)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/UnsupportedType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/UnsupportedType.java index 2bd0197..73858c6 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/UnsupportedType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/UnsupportedType.java @@ -1,6 +1,7 @@ package org.openecomp.sdc.toscaparser.api; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class UnsupportedType { @@ -27,8 +28,8 @@ public class UnsupportedType { public static boolean validateType(String entityType) { for(String ust: unsupportedTypes) { if(ust.equals(entityType)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnsupportedTypeError: Entity type \"%s\" is not supported",entityType)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE251", String.format( + "UnsupportedTypeError: Entity type \"%s\" is not supported",entityType))); return true; } } @@ -38,7 +39,7 @@ public class UnsupportedType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnsupportedTypeError from toscaparser.utils.gettextutils import _ @@ -69,7 +70,7 @@ class UnsupportedType(object): @staticmethod def validate_type(entitytype): if entitytype in UnsupportedType.un_supported_types: - ExceptionCollector.appendException(UnsupportedTypeError( + ValidationIssueCollector.appendException(UnsupportedTypeError( what=_('%s') % entitytype)) return True diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/common/ExceptionCollector.java b/src/main/java/org/openecomp/sdc/toscaparser/api/common/ExceptionCollector.java deleted file mode 100644 index fa65ae4..0000000 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/common/ExceptionCollector.java +++ /dev/null @@ -1,122 +0,0 @@ -package org.openecomp.sdc.toscaparser.api.common; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -// Perfectly good enough... - -public class ExceptionCollector { - - private static Logger log = LoggerFactory.getLogger(ExceptionCollector.class.getName()); - - private Map notAnalyzedExceptions = new HashMap<>(); - private Map criticalExceptions = new HashMap<>(); - private Map warningExceptions = new HashMap<>(); - - private boolean bWantTrace = true; - private String filePath; - - public enum ReportType {WARNING, CRITICAL, NOT_ANALYZED} - - public ExceptionCollector(String filePath) { - this.filePath = filePath; - } - - public void appendException(String exception) { - - addException(exception, ReportType.NOT_ANALYZED); - } - - public void appendCriticalException(String exception) { - - addException(exception, ReportType.CRITICAL); - } - - public void appendWarning(String exception) { - - addException(exception, ReportType.WARNING); - } - - private void addException(String exception, ReportType type) { - - Map exceptions = getExceptionCollection(type); - - if (!exceptions.containsKey(exception)) { - // get stack trace - StackTraceElement[] ste = Thread.currentThread().getStackTrace(); - StringBuilder sb = new StringBuilder(); - // skip the last 2 (getStackTrace and this) - for (int i = 2; i < ste.length; i++) { - sb.append(String.format(" %s(%s:%d)%s", ste[i].getClassName(), ste[i].getFileName(), - ste[i].getLineNumber(), i == ste.length - 1 ? " " : "\n")); - } - exceptions.put(exception, sb.toString()); - } - } - - public List getCriticalsReport() { - - return getReport(ReportType.CRITICAL); - } - - public List getNotAnalyzedExceptionsReport() { - - return getReport(ReportType.NOT_ANALYZED); - } - - public List getWarningsReport() { - - return getReport(ReportType.WARNING); - } - - private List getReport(ReportType type) { - Map collectedExceptions = getExceptionCollection(type); - - List report = new ArrayList<>(); - if (collectedExceptions.size() > 0) { - for (Map.Entry exception : collectedExceptions.entrySet()) { - report.add(exception.getKey()); - if (bWantTrace) { - report.add(exception.getValue()); - } - } - } - - return report; - } - - private Map getExceptionCollection(ReportType type) { - switch (type) { - case WARNING: - return warningExceptions; - case CRITICAL: - return criticalExceptions; - case NOT_ANALYZED: - return notAnalyzedExceptions; - default: - return notAnalyzedExceptions; - } - } - - public int errorsNotAnalyzedCaught() { - return notAnalyzedExceptions.size(); - } - - public int criticalsCaught() { - return criticalExceptions.size(); - } - - public int warningsCaught() { - return warningExceptions.size(); - } - - public void setWantTrace(boolean b) { - bWantTrace = b; - } - -} diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaException.java b/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaException.java index 6cd5872..f97e6ad 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaException.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaException.java @@ -18,10 +18,10 @@ public class JToscaException extends Exception { this.code = code; } - //JT1001 - Meta file missing - //JT1002 - Invalid yaml content - //JT1003 - Entry-Definition not defined in meta file - //JT1004 - Entry-Definition file missing - //JT1005 - General Error - //JT1006 - General Error/Path not valid + //JE1001 - Meta file missing + //JE1002 - Invalid yaml content + //JE1003 - Entry-Definition not defined in meta file + //JE1004 - Entry-Definition file missing + //JE1005 - General Error + //JE1006 - General Error/Path not valid } diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaValidationIssue.java b/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaValidationIssue.java new file mode 100644 index 0000000..5caba26 --- /dev/null +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/common/JToscaValidationIssue.java @@ -0,0 +1,35 @@ +package org.openecomp.sdc.toscaparser.api.common; + +public class JToscaValidationIssue { + + private String code; + private String message; + + + public JToscaValidationIssue(String code, String message) { + super(); + this.code = code; + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + @Override + public String toString() { + return "JToscaError [code=" + code + ", message=" + message + "]"; + } +} diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/common/ValidationIssueCollector.java b/src/main/java/org/openecomp/sdc/toscaparser/api/common/ValidationIssueCollector.java new file mode 100644 index 0000000..6e2961a --- /dev/null +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/common/ValidationIssueCollector.java @@ -0,0 +1,35 @@ +package org.openecomp.sdc.toscaparser.api.common; + +import java.util.*; + +// Perfectly good enough... + +public class ValidationIssueCollector { + + private Map validationIssues = new HashMap(); + public void appendValidationIssue(JToscaValidationIssue issue) { + + validationIssues.put(issue.getMessage(),issue); + + } + + public List getValidationIssueReport() { + List report = new ArrayList<>(); + if (!validationIssues.isEmpty()) { + for (JToscaValidationIssue exception : validationIssues.values()) { + report.add("["+exception.getCode()+"]: "+ exception.getMessage()); + } + } + + return report; + } + public Map getValidationIssues() { + return validationIssues; + } + + + public int validationIssuesCaught() { + return validationIssues.size(); + } + +} diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/EntityType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/EntityType.java index 650166d..70f7ae7 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/EntityType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/EntityType.java @@ -203,7 +203,7 @@ public class EntityType { // doesn't do anything except emit an exception anyway //if not hasattr(self, 'defs'): // defs = None - // ExceptionCollector.appendException( + // ValidationIssueCollector.appendException( // ValidationError(message="defs is " + str(defs))) //else: // defs = self.defs @@ -266,7 +266,7 @@ public class EntityType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import ValidationError from toscaparser.extensions.exttools import ExtTools import org.openecomp.sdc.toscaparser.api.utils.yamlparser @@ -384,7 +384,7 @@ class EntityType(object): value = None if not hasattr(self, 'defs'): defs = None - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message="defs is " + str(defs))) else: defs = self.defs diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/GroupType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/GroupType.java index d226b78..0f6ae6d 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/GroupType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/GroupType.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class GroupType extends StatefulEntityType { @@ -92,9 +93,9 @@ public class GroupType extends StatefulEntityType { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE120", String.format( "UnknownFieldError: Group Type \"%s\" contains unknown field \"%s\"", - groupType,name)); + groupType,name))); } } } @@ -104,18 +105,18 @@ public class GroupType extends StatefulEntityType { private void _validateMetadata(LinkedHashMap metadata) { String mtt = (String) metadata.get("type"); if(mtt != null && !mtt.equals("map") && !mtt.equals("tosca:map")) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE121", String.format( "InvalidTypeError: \"%s\" defined in group for metadata is invalid", - mtt)); + mtt))); } for(String entrySchema: metadata.keySet()) { Object estob = metadata.get(entrySchema); if(estob instanceof LinkedHashMap) { String est = (String)((LinkedHashMap)estob).get("type"); if(!est.equals("string")) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE122", String.format( "InvalidTypeError: \"%s\" defined in group for metadata \"%s\" is invalid", - est,entrySchema)); + est,entrySchema))); } } } @@ -130,7 +131,7 @@ public class GroupType extends StatefulEntityType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidTypeError from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.statefulentitytype import StatefulEntityType @@ -195,19 +196,19 @@ class GroupType(StatefulEntityType): if self.defs: for name in self.defs.keys(): if name not in self.SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Group Type %s' % self.grouptype, field=name)) def _validate_metadata(self, meta_data): if not meta_data.get('type') in ['map', 'tosca:map']: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what='"%s" defined in group for ' 'metadata' % (meta_data.get('type')))) for entry_schema, entry_schema_type in meta_data.items(): if isinstance(entry_schema_type, dict) and not \ entry_schema_type.get('type') == 'string': - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what='"%s" defined in group for ' 'metadata "%s"' % (entry_schema_type.get('type'), diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/InterfacesDef.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/InterfacesDef.java index 8a2b4dd..c13fd96 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/InterfacesDef.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/InterfacesDef.java @@ -1,11 +1,12 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import org.openecomp.sdc.toscaparser.api.EntityTemplate; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class InterfacesDef extends StatefulEntityType { @@ -91,9 +92,9 @@ public class InterfacesDef extends StatefulEntityType { inputs = (LinkedHashMap)me.getValue(); } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE123", String.format( "UnknownFieldError: \"interfaces\" of template \"%s\" contain unknown field \"%s\"", - nodeTemplate.getName(),me.getKey())); + nodeTemplate.getName(),me.getKey()))); } } } @@ -150,7 +151,7 @@ public class InterfacesDef extends StatefulEntityType { # License for the specific language governing permissions and limitations # under the License. -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.statefulentitytype import StatefulEntityType @@ -203,7 +204,7 @@ class InterfacesDef(StatefulEntityType): else: what = ('"interfaces" of template "%s"' % self.node_template.name) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what=what, field=i)) else: self.implementation = value diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java index d5f1a18..157e016 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/NodeType.java @@ -1,11 +1,11 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; -import org.openecomp.sdc.toscaparser.api.elements.InterfacesDef; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class NodeType extends StatefulEntityType { @@ -315,8 +315,8 @@ public class NodeType extends StatefulEntityType { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Nodetype \"%s\" has unknown field \"%s\"",ntype,key)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE124", String.format( + "UnknownFieldError: Nodetype \"%s\" has unknown field \"%s\"",ntype,key))); } } } @@ -326,7 +326,7 @@ public class NodeType extends StatefulEntityType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.capabilitytype import CapabilityTypeDef import org.openecomp.sdc.toscaparser.api.elements.interfaces as ifaces @@ -517,7 +517,7 @@ class NodeType(StatefulEntityType): if self.defs: for key in self.defs.keys(): if key not in self.SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Nodetype"%s"' % self.ntype, field=key)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PolicyType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PolicyType.java index c60bed1..b046a48 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PolicyType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PolicyType.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.TOSCAVersionProperty; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -135,9 +136,9 @@ public class PolicyType extends StatefulEntityType { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE125", String.format( "UnknownFieldError: Policy \"%s\" contains unknown field \"%s\"", - type,key)); + type,key))); } } } @@ -146,9 +147,9 @@ public class PolicyType extends StatefulEntityType { LinkedHashMap _customDef) { for(String nodetype: _targetsList) { if(_customDef.get(nodetype) == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE126", String.format( "InvalidTypeError: \"%s\" defined in targets for policy \"%s\"", - nodetype,type)); + nodetype,type))); } } @@ -157,9 +158,9 @@ public class PolicyType extends StatefulEntityType { private void _validateMetadata(LinkedHashMap _metaData) { String mtype = (String)_metaData.get("type"); if(mtype != null && !mtype.equals("map") && !mtype.equals("tosca:map")) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE127", String.format( "InvalidTypeError: \"%s\" defined in policy for metadata", - mtype)); + mtype))); } for(String entrySchema: metaData.keySet()) { Object estob = metaData.get(entrySchema); @@ -167,9 +168,9 @@ public class PolicyType extends StatefulEntityType { String est = (String) ((LinkedHashMap)estob).get("type"); if(!est.equals("string")) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE128", String.format( "InvalidTypeError: \"%s\" defined in policy for metadata \"%s\"", - est,entrySchema)); + est,entrySchema))); } } } @@ -179,7 +180,7 @@ public class PolicyType extends StatefulEntityType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidTypeError from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.statefulentitytype import StatefulEntityType @@ -262,27 +263,27 @@ class PolicyType(StatefulEntityType): def _validate_keys(self): for key in self.defs.keys(): if key not in self.SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Policy "%s"' % self.type, field=key)) def _validate_targets(self, targets_list, custom_def): for nodetype in targets_list: if nodetype not in custom_def: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what='"%s" defined in targets for ' 'policy "%s"' % (nodetype, self.type))) def _validate_metadata(self, meta_data): if not meta_data.get('type') in ['map', 'tosca:map']: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what='"%s" defined in policy for ' 'metadata' % (meta_data.get('type')))) for entry_schema, entry_schema_type in meta_data.items(): if isinstance(entry_schema_type, dict) and not \ entry_schema_type.get('type') == 'string': - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what='"%s" defined in policy for ' 'metadata "%s"' % (entry_schema_type.get('type'), diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PortSpec.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PortSpec.java index 8d490ee..1a6745c 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PortSpec.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PortSpec.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; import org.openecomp.sdc.toscaparser.api.DataEntity; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.ValidateUtils; @@ -53,9 +54,9 @@ public class PortSpec { // verify one of the specified values is set if(source == null && sourceRange == null && target == null && targetRange == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE129", String.format( "InvalidTypeAdditionalRequirementsError: Additional requirements for type \"%s\" not met", - TYPE_URI)); + TYPE_URI))); } // Validate source value is in specified range if(source != null && sourceRange != null) { @@ -75,9 +76,9 @@ public class PortSpec { } } catch(Exception e) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE130", String.format( "ValueError: \"%s\" do not meet requirements for type \"%s\"", - _properties.toString(),SHORTNAME)); + _properties.toString(),SHORTNAME))); } } @@ -85,7 +86,7 @@ public class PortSpec { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidTypeAdditionalRequirementsError from toscaparser.utils.gettextutils import _ import org.openecomp.sdc.toscaparser.api.utils.validateutils as validateutils @@ -132,7 +133,7 @@ class PortSpec(object): # verify one of the specified values is set if source is None and source_range is None and \ target is None and target_range is None: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeAdditionalRequirementsError( type=PortSpec.TYPE_URI)) # Validate source value is in specified range @@ -155,6 +156,6 @@ class PortSpec(object): msg = _('"%(value)s" do not meet requirements ' 'for type "%(type)s".') \ % {'value': properties, 'type': PortSpec.SHORTNAME} - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(msg)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PropertyDef.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PropertyDef.java index c139eb6..bdd376b 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PropertyDef.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/PropertyDef.java @@ -3,7 +3,7 @@ package org.openecomp.sdc.toscaparser.api.elements; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class PropertyDef { @@ -46,8 +46,8 @@ public class PropertyDef { if(schema.get("type") == null) { //msg = (_('Schema definition of "%(pname)s" must have a "type" ' // 'attribute.') % dict(pname=self.name)) - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidSchemaError: Schema definition of \"%s\" must have a \"type\" attribute",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE131", String.format( + "InvalidSchemaError: Schema definition of \"%s\" must have a \"type\" attribute",name))); } _loadRequiredAttrFromSchema(); _loadStatusAttrFromSchema(); @@ -84,9 +84,9 @@ public class PropertyDef { // attr, // value, // valid_values) - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE132", String.format( "Schema definition of \"%s\" has \"required\" attribute with an invalid value", - name)); + name))); } } } @@ -117,9 +117,9 @@ public class PropertyDef { // attr, // value, // valid_values) - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE006", String.format( "Schema definition of \"%s\" has \"status\" attribute with an invalid value", - name)); + name))); } } } @@ -140,7 +140,7 @@ public class PropertyDef { } /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidSchemaError from toscaparser.common.exception import TOSCAException from toscaparser.utils.gettextutils import _ @@ -176,7 +176,7 @@ class PropertyDef(object): except KeyError: msg = (_('Schema definition of "%(pname)s" must have a "type" ' 'attribute.') % dict(pname=self.name)) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=msg)) if self.schema: diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/RelationshipType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/RelationshipType.java index 3903941..3a56840 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/RelationshipType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/RelationshipType.java @@ -1,10 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; -import org.openecomp.sdc.toscaparser.api.elements.EntityType; -import org.openecomp.sdc.toscaparser.api.elements.StatefulEntityType; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class RelationshipType extends StatefulEntityType { @@ -54,8 +53,8 @@ public class RelationshipType extends StatefulEntityType { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: Relationshiptype \"%s\" has unknown field \"%s\"",type,key)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE133", String.format( + "UnknownFieldError: Relationshiptype \"%s\" has unknown field \"%s\"",type,key))); } } } @@ -63,7 +62,7 @@ public class RelationshipType extends StatefulEntityType { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.statefulentitytype import StatefulEntityType @@ -97,7 +96,7 @@ class RelationshipType(StatefulEntityType): def _validate_keys(self): for key in self.defs.keys(): if key not in self.SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Relationshiptype "%s"' % self.type, field=key)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/ScalarUnit.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/ScalarUnit.java index de18cd6..77cd4c2 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/ScalarUnit.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/ScalarUnit.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import org.openecomp.sdc.toscaparser.api.utils.ValidateUtils; import org.slf4j.Logger; @@ -52,9 +52,9 @@ public abstract class ScalarUnit { return key; } } - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE007", String.format( "'The unit \"%s\" is not valid. Valid units are \n%s", - inputUnit,SCALAR_UNIT_DICT.keySet().toString())); + inputUnit,SCALAR_UNIT_DICT.keySet().toString()))); return inputUnit; } } @@ -68,8 +68,8 @@ public abstract class ScalarUnit { value = matcher.group(1) + " " + scalarUnit; } else { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a valid scalar-unit",value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE134", String.format( + "ValueError: \"%s\" is not a valid scalar-unit",value.toString()))); } return value; } @@ -136,8 +136,8 @@ public abstract class ScalarUnit { if(type.equals(SCALAR_UNIT_FREQUENCY)) { return (new ScalarUnitFrequency(value)).getNumFromScalarUnit(unit); } - ThreadLocalsHolder.getCollector().appendException(String.format( - "TypeError: \"%s\" is not a valid scalar-unit type",type)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE135", String.format( + "TypeError: \"%s\" is not a valid scalar-unit type",type))); return 0.0; } @@ -145,7 +145,7 @@ public abstract class ScalarUnit { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.utils.gettextutils import _ from toscaparser.utils import validateutils @@ -184,7 +184,7 @@ class ScalarUnit(object): '"%(valid_units)s".') % {'unit': input_unit, 'valid_units': sorted(self.SCALAR_UNIT_DICT.keys())}) - ExceptionCollector.appendException(ValueError(msg)) + ValidationIssueCollector.appendException(ValueError(msg)) def validate_scalar_unit(self): regex = re.compile('([0-9.]+)\s*(\w+)') @@ -196,7 +196,7 @@ class ScalarUnit(object): return self.value except Exception: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a valid scalar-unit.') % self.value)) @@ -257,6 +257,6 @@ def get_scalarunit_value(type, value, unit=None): return (ScalarUnit_Class(value). get_num_from_scalar_unit(unit)) else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( TypeError(_('"%s" is not a valid scalar-unit type.') % type)) */ \ No newline at end of file diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/StatefulEntityType.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/StatefulEntityType.java index 5ab816f..0a83cb1 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/StatefulEntityType.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/StatefulEntityType.java @@ -1,14 +1,12 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import org.openecomp.sdc.toscaparser.api.UnsupportedType; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; -import org.openecomp.sdc.toscaparser.api.elements.AttributeDef; -import org.openecomp.sdc.toscaparser.api.elements.EntityType; -import org.openecomp.sdc.toscaparser.api.elements.PropertyDef; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -49,8 +47,8 @@ public class StatefulEntityType extends EntityType { } else{ defs = null; - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidTypeError: \"%s\" is not a valid type",entityType)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE136", String.format( + "InvalidTypeError: \"%s\" is not a valid type",entityType))); } } type = entityType; @@ -67,8 +65,8 @@ public class StatefulEntityType extends EntityType { Object to = me.getValue(); if(to == null || !(to instanceof LinkedHashMap)) { String s = to == null ? "null" : to.getClass().getSimpleName(); - ThreadLocalsHolder.getCollector().appendException(String.format( - "Unexpected type error: property \"%s\" has type \"%s\" (expected dict)",pdname,s)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE137", String.format( + "Unexpected type error: property \"%s\" has type \"%s\" (expected dict)",pdname,s))); continue; } LinkedHashMap pdschema = (LinkedHashMap)to; @@ -175,7 +173,7 @@ class StatefulEntityType(EntityType): self.defs = custom_def[entitytype] else: self.defs = None - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTypeError(what=entitytype)) self.type = entitytype diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/TypeValidation.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/TypeValidation.java index 2caf5c4..50c9739 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/TypeValidation.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/TypeValidation.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.elements; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.extensions.ExtTools; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -71,9 +72,9 @@ public class TypeValidation { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE138", String.format( "UnknownFieldError: Template \"%s\" contains unknown field \"%s\"", - importDef.toString(),name)); + importDef.toString(),name))); } } } @@ -89,17 +90,17 @@ public class TypeValidation { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE139", String.format( "InvalidTemplateVersion: version \"%s\" in \"%s\" is not supported\n" + "Allowed versions: [%s]", - sVersion,importDef.toString(),allowed)); + sVersion,importDef.toString(),allowed))); } } } /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidTemplateVersion from toscaparser.common.exception import UnknownFieldError from toscaparser.extensions.exttools import ExtTools @@ -136,14 +137,14 @@ class TypeValidation(object): for name in custom_type: if name not in self.ALLOWED_TYPE_SECTIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( # UnknownFieldError(what='Template ' + (self.import_def), UnknownFieldError(what= (self.import_def), field=name)) def _validate_type_version(self, version): if version not in self.VALID_TEMPLATE_VERSIONS: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTemplateVersion( # what=version + ' in ' + self.import_def, what=self.import_def, diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Constraint.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Constraint.java index 3c60a66..253cc0c 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Constraint.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Constraint.java @@ -3,7 +3,7 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; import java.util.ArrayList; import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.elements.ScalarUnit; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -35,8 +35,8 @@ public abstract class Constraint { if(!(constraint instanceof LinkedHashMap) || ((LinkedHashMap)constraint).size() != 1) { - ThreadLocalsHolder.getCollector().appendException( - "InvalidSchemaError: Invalid constraint schema " + constraint.toString()); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE101", + "InvalidSchemaError: Invalid constraint schema " + constraint.toString())); } if(constraintClass.equals(EQUAL)) { @@ -73,8 +73,8 @@ public abstract class Constraint { return new Pattern(propname,proptype,constraint); } else { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidSchemaError: Invalid property \"%s\"",constraintClass)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE102", String.format( + "InvalidSchemaError: Invalid property \"%s\"",constraintClass))); return null; } } @@ -117,9 +117,9 @@ public abstract class Constraint { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE103", String.format( "InvalidSchemaError: Property \"%s\" is not valid for data type \"%s\"", - constraintKey,propertyType)); + constraintKey,propertyType))); } } @@ -153,7 +153,7 @@ public abstract class Constraint { value = ScalarUnit.getScalarunitValue(propertyType,value,null); } if(!_isValid(value)) { - ThreadLocalsHolder.getCollector().appendWarning("ValidationError: " + _errMsg(value)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE008", "ValidationError: " + _errMsg(value))); } } @@ -183,14 +183,14 @@ class Constraint(object): if(not isinstance(constraint, collections.Mapping) or len(constraint) != 1): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=_('Invalid constraint schema.'))) for type in constraint.keys(): ConstraintClass = get_constraint_class(type) if not ConstraintClass: msg = _('Invalid property "%s".') % type - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=msg)) return ConstraintClass(property_name, property_type, constraint) @@ -208,7 +208,7 @@ class Constraint(object): '"%(dtype)s".') % dict( ctype=self.constraint_key, dtype=property_type) - ExceptionCollector.appendException(InvalidSchemaError(message=msg)) + ValidationIssueCollector.appendException(InvalidSchemaError(message=msg)) def _get_scalarunit_constraint_value(self): if self.property_type in scalarunit.ScalarUnit.SCALAR_UNIT_TYPES: @@ -230,7 +230,7 @@ class Constraint(object): value = scalarunit.get_scalarunit_value(self.property_type, value) if not self._is_valid(value): err_msg = self._err_msg(value) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterOrEqual.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterOrEqual.java index 021bed3..ad6183e 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterOrEqual.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterOrEqual.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.Date; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.functions.Function; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -38,7 +39,7 @@ public class GreaterOrEqual extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"greater_or_equal\" expects comparable values"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE104", "InvalidSchemaError: The property \"greater_or_equal\" expects comparable values")); } } diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterThan.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterThan.java index d23d7ce..b9e06b3 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterThan.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/GreaterThan.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.Date; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class GreaterThan extends Constraint { @@ -35,7 +36,7 @@ public class GreaterThan extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"greater_than\" expects comparable values"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE105", "InvalidSchemaError: The property \"greater_than\" expects comparable values")); } } @@ -83,7 +84,7 @@ class GreaterThan(Constraint): super(GreaterThan, self).__init__(property_name, property_type, constraint) if not isinstance(constraint[self.GREATER_THAN], self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "greater_than" ' 'expects comparable values.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/InRange.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/InRange.java index 282267d..7d0d654 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/InRange.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/InRange.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.Date; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; import java.util.ArrayList; @@ -46,7 +47,7 @@ public class InRange extends Constraint { super(name,type,c); if(!(constraintValue instanceof ArrayList) || ((ArrayList)constraintValue).size() != 2) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"in_range\" expects a list"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE106", "InvalidSchemaError: The property \"in_range\" expects a list")); } @@ -54,11 +55,11 @@ public class InRange extends Constraint { String msg = "The property \"in_range\" expects comparable values"; for(Object vo: alcv) { if(!validTypes.contains(vo.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE107", "InvalidSchemaError: " + msg)); } // The only string we allow for range is the special value 'UNBOUNDED' if((vo instanceof String) && !((String)vo).equals(UNBOUNDED)) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE108", "InvalidSchemaError: " + msg)); } } min = alcv.get(0); @@ -129,19 +130,19 @@ class InRange(Constraint): super(InRange, self).__init__(property_name, property_type, constraint) if(not isinstance(self.constraint_value, collections.Sequence) or (len(constraint[self.IN_RANGE]) != 2)): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=_('The property "in_range" ' 'expects a list.'))) msg = _('The property "in_range" expects comparable values.') for value in self.constraint_value: if not isinstance(value, self.valid_types): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=msg)) # The only string we allow for range is the special value # 'UNBOUNDED' if(isinstance(value, str) and value != self.UNBOUNDED): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidSchemaError(message=msg)) self.min = self.constraint_value[0] diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Length.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Length.java index 4cfd1c0..c94cda5 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Length.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Length.java @@ -1,6 +1,7 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class Length extends Constraint { @@ -23,7 +24,7 @@ public class Length extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"length\" expects an integer"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE109", "InvalidSchemaError: The property \"length\" expects an integer")); } } @@ -60,7 +61,7 @@ public class Length extends Constraint { def __init__(self, property_name, property_type, constraint): super(Length, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "length" expects ' 'an integer.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessOrEqual.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessOrEqual.java index 00cba36..1601e27 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessOrEqual.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessOrEqual.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.Date; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class LessOrEqual extends Constraint { @@ -37,7 +38,7 @@ public class LessOrEqual extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"less_or_equal\" expects comparable values"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE110", "InvalidSchemaError: The property \"less_or_equal\" expects comparable values")); } } @@ -87,7 +88,7 @@ class LessOrEqual(Constraint): super(LessOrEqual, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "less_or_equal" ' 'expects comparable values.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessThan.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessThan.java index eb5a41d..b867fa7 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessThan.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/LessThan.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.Date; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class LessThan extends Constraint { @@ -35,7 +36,7 @@ public class LessThan extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"less_than\" expects comparable values"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE111", "InvalidSchemaError: The property \"less_than\" expects comparable values")); } } @@ -85,7 +86,7 @@ def __init__(self, property_name, property_type, constraint): super(LessThan, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "less_than" ' 'expects comparable values.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MaxLength.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MaxLength.java index 278ae85..48ac349 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MaxLength.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MaxLength.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class MaxLength extends Constraint { @@ -26,7 +27,7 @@ public class MaxLength extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"max_length\" expects an integer"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE112", "InvalidSchemaError: The property \"max_length\" expects an integer")); } } @@ -70,7 +71,7 @@ class MaxLength(Constraint): super(MaxLength, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "max_length" ' 'expects an integer.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MinLength.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MinLength.java index 480c878..0203484 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MinLength.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/MinLength.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class MinLength extends Constraint { @@ -26,7 +27,7 @@ public class MinLength extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"min_length\" expects an integer"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE113", "InvalidSchemaError: The property \"min_length\" expects an integer")); } } @@ -70,7 +71,7 @@ class MinLength(Constraint): super(MinLength, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "min_length" ' 'expects an integer.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Pattern.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Pattern.java index 444a73c..a29bac6 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Pattern.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Pattern.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.regex.Matcher; import java.util.regex.PatternSyntaxException; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class Pattern extends Constraint { @@ -24,7 +25,7 @@ public class Pattern extends Constraint { super(name,type,c); if(!validTypes.contains(constraintValue.getClass().getSimpleName())) { - ThreadLocalsHolder.getCollector().appendException("InvalidSchemaError: The property \"pattern\" expects a string"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE114", "InvalidSchemaError: The property \"pattern\" expects a string")); } } @@ -32,8 +33,8 @@ public class Pattern extends Constraint { protected boolean _isValid(Object value) { try { if(!(value instanceof String)) { - ThreadLocalsHolder.getCollector().appendException(String.format("ValueError: Input value \"%s\" to \"pattern\" property \"%s\" must be a string", - value.toString(),propertyName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE115", String.format("ValueError: Input value \"%s\" to \"pattern\" property \"%s\" must be a string", + value.toString(),propertyName))); return false; } String strp = constraintValue.toString(); @@ -46,8 +47,8 @@ public class Pattern extends Constraint { return false; } catch(PatternSyntaxException pse) { - ThreadLocalsHolder.getCollector().appendException(String.format("ValueError: Invalid regex \"%s\" in \"pattern\" property \"%s\"", - constraintValue.toString(),propertyName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE116", String.format("ValueError: Invalid regex \"%s\" in \"pattern\" property \"%s\"", + constraintValue.toString(),propertyName))); return false; } } @@ -78,7 +79,7 @@ class Pattern(Constraint): def __init__(self, property_name, property_type, constraint): super(Pattern, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, self.valid_types): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "pattern" ' 'expects a string.'))) self.match = re.compile(self.constraint_value).match diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java index ca721e6..d0ee118 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java @@ -1,11 +1,12 @@ package org.openecomp.sdc.toscaparser.api.elements.constraints; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -71,15 +72,15 @@ public class Schema { if(!(_schemaDict instanceof LinkedHashMap)) { //msg = (_('Schema definition of "%(pname)s" must be a dict.') // % dict(pname=name)) - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidSchemaError: Schema definition of \"%s\" must be a dict",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE117", String.format( + "InvalidSchemaError: Schema definition of \"%s\" must be a dict",name))); } if(_schemaDict.get("type") == null) { //msg = (_('Schema definition of "%(pname)s" must have a "type" ' // 'attribute.') % dict(pname=name)) - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidSchemaError: Schema definition of \"%s\" must have a \"type\" attribute",name)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE118", String.format( + "InvalidSchemaError: Schema definition of \"%s\" must have a \"type\" attribute",name))); } schema = _schemaDict; @@ -122,9 +123,9 @@ public class Schema { } else { // error - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE119", String.format( "UnknownFieldError: Constraint type \"%s\" for property \"%s\" is not supported", - cClass,name)); + cClass,name))); } break; } @@ -211,14 +212,14 @@ def __init__(self, name, schema_dict): if not isinstance(schema_dict, collections.Mapping): msg = (_('Schema definition of "%(pname)s" must be a dict.') % dict(pname=name)) - ExceptionCollector.appendException(InvalidSchemaError(message=msg)) + ValidationIssueCollector.appendException(InvalidSchemaError(message=msg)) try: schema_dict['type'] except KeyError: msg = (_('Schema definition of "%(pname)s" must have a "type" ' 'attribute.') % dict(pname=name)) - ExceptionCollector.appendException(InvalidSchemaError(message=msg)) + ValidationIssueCollector.appendException(InvalidSchemaError(message=msg)) self.schema = schema_dict self._len = None diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java.orig b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java.orig index 96eff34..355f505 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java.orig +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/Schema.java.orig @@ -5,7 +5,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; public class Schema { diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/ValidValues.java b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/ValidValues.java index 06622e4..60b6be2 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/ValidValues.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/elements/constraints/ValidValues.java @@ -62,7 +62,7 @@ def __init__(self, property_name, property_type, constraint): super(ValidValues, self).__init__(property_name, property_type, constraint) if not isinstance(self.constraint_value, collections.Sequence): - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( InvalidSchemaError(message=_('The property "valid_values" ' 'expects a list.'))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Concat.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Concat.java index 6dc7deb..84afbc9 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Concat.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Concat.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.functions; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import org.openecomp.sdc.toscaparser.api.TopologyTemplate; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class Concat extends Function { @@ -37,9 +38,9 @@ public class Concat extends Function { @Override void validate() { if(args.size() < 1) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE145", "ValueError: Invalid arguments for function \"concat\". " + - "Expected at least one argument"); + "Expected at least one argument")); } } @@ -68,7 +69,7 @@ Example: def validate(self): if len(self.args) < 1: - ExceptionCollector.appendException( + ValidationIsshueCollector.appendException( ValueError(_('Invalid arguments for function "{0}". Expected ' 'at least one arguments.').format(CONCAT))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Function.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Function.java index 7615a00..0278508 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Function.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Function.java @@ -171,7 +171,7 @@ public abstract class Function { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIsshueCollector from toscaparser.common.exception import UnknownInputError from toscaparser.dataentity import DataEntity from toscaparser.elements.constraints import Schema diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetAttribute.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetAttribute.java index 8a3d0b6..66e9320 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetAttribute.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetAttribute.java @@ -1,5 +1,7 @@ package org.openecomp.sdc.toscaparser.api.functions; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; @@ -45,8 +47,8 @@ public class GetAttribute extends Function { @Override void validate() { if(args.size() < 2) { - ThreadLocalsHolder.getCollector().appendException( - "ValueError: Illegal arguments for function \"get_attribute\". Expected arguments: \"node-template-name\", \"req-or-cap\" (optional), \"property name.\""); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE146", + "ValueError: Illegal arguments for function \"get_attribute\". Expected arguments: \"node-template-name\", \"req-or-cap\" (optional), \"property name.\"")); return; } else if(args.size() == 2) { @@ -76,9 +78,9 @@ public class GetAttribute extends Function { for(Object elem: args.subList(index,args.size())) { if(valueType.equals("list")) { if(!(elem instanceof Integer)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE147", String.format( "ValueError: Illegal arguments for function \"get_attribute\" \"%s\". Expected positive integer argument", - elem.toString())); + elem.toString()))); } Object ob = attr.getSchema().get("entry_schema"); valueType = (String) @@ -98,9 +100,9 @@ public class GetAttribute extends Function { } } if(bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: 'Illegal arguments for function \"get_attribute\". Unexpected attribute/index value \"%d\"", - elem)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE148", String.format( + "ValueError: 'Illegal arguments for function \"get_attribute\". Unexpected attribute/index value \"%s\"", + elem))); return; } else { // It is a complex type @@ -112,9 +114,9 @@ public class GetAttribute extends Function { valueType = (String)prop.getSchema().get("type"); } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE149", String.format( "KeyError: Illegal arguments for function \"get_attribute\". Attribute name \"%s\" not found in \"%\"", - elem,valueType)); + elem,valueType))); } } } @@ -146,9 +148,9 @@ public class GetAttribute extends Function { if(nodeTpl != null && !_attributeExistsInType(nodeTpl.getTypeDefinition()) && !nodeTpl.getProperties().keySet().contains(getAttributeName())) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE150", String.format( "KeyError: Attribute \"%s\" was not found in node template \"%s\"", - getAttributeName(),nodeTpl.getName())); + getAttributeName(),nodeTpl.getName()))); } return nodeTpl; } @@ -187,34 +189,34 @@ public class GetAttribute extends Function { // Currently this is the only way to tell whether the function // is used within the outputs section of the TOSCA template. if(context instanceof ArrayList) { - ThreadLocalsHolder.getCollector().appendException( - "ValueError: \"get_attribute: [ HOST, ... ]\" is not allowed in \"outputs\" section of the TOSCA template"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE151", + "ValueError: \"get_attribute: [ HOST, ... ]\" is not allowed in \"outputs\" section of the TOSCA template")); return null; } NodeTemplate nodeTpl = _findHostContainingAttribute(SELF); if(nodeTpl == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE152", String.format( "ValueError: \"get_attribute: [ HOST, ... ]\" was used in " + "node template \"%s\" but \"%s\" was not found in " + - "the relationship chain",((NodeTemplate)context).getName(),HOSTED_ON)); + "the relationship chain",((NodeTemplate)context).getName(),HOSTED_ON))); return null; } return nodeTpl; } if(nodeTemplateName.equals(TARGET)) { if(!(((EntityTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE153", "KeyError: \"TARGET\" keyword can only be used in context " + - " to \"Relationships\" target node"); + " to \"Relationships\" target node")); return null; } return ((RelationshipTemplate)context).getTarget(); } if(nodeTemplateName.equals(SOURCE)) { if(!(((EntityTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE154", "KeyError: \"SOURCE\" keyword can only be used in context " + - " to \"Relationships\" source node"); + " to \"Relationships\" source node")); return null; } return ((RelationshipTemplate)context).getTarget(); @@ -231,8 +233,8 @@ public class GetAttribute extends Function { return nt; } } - ThreadLocalsHolder.getCollector().appendException(String.format( - "KeyError: Node template \"%s\" was not found",nodeTemplateName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE155", String.format( + "KeyError: Node template \"%s\" was not found",nodeTemplateName))); return null; } @@ -265,16 +267,16 @@ public class GetAttribute extends Function { attribute = attrs.get(attrName); } if(attribute == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE156", String.format( "KeyError: Attribute \"%s\" was not found in capability \"%s\" of node template \"%s\" referenced from node template \"%s\"", - attrName,capabilityName,nodeTemplate.getName(),((NodeTemplate)context).getName())); + attrName,capabilityName,nodeTemplate.getName(),((NodeTemplate)context).getName()))); } return attribute; } String msg = String.format( "Requirement/CapabilityAssignment \"%s\" referenced from node template \"%s\" was not found in node template \"%s\"", capabilityName,((NodeTemplate)context).getName(),nodeTemplate.getName()); - ThreadLocalsHolder.getCollector().appendException("KeyError: " + msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE157", "KeyError: " + msg)); return null; } @@ -316,7 +318,7 @@ Examples: def validate(self): if len(self.args) < 2: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Illegal arguments for function "{0}". Expected ' 'arguments: "node-template-name", "req-or-cap"' '(optional), "property name"' @@ -344,7 +346,7 @@ def validate(self): for elem in self.args[index:]: if value_type == "list": if not isinstance(elem, int): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Illegal arguments for function' ' "{0}". "{1}" Expected positive' ' integer argument' @@ -353,7 +355,7 @@ def validate(self): elif value_type == "map": value_type = attr.schema['entry_schema']['type'] elif value_type in Schema.PROPERTY_TYPES: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Illegal arguments for function' ' "{0}". Unexpected attribute/' 'index value "{1}"' @@ -367,7 +369,7 @@ def validate(self): prop = found[0] value_type = prop.schema['type'] else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Illegal arguments for function' ' "{0}". Attribute name "{1}" not' ' found in "{2}"' @@ -394,7 +396,7 @@ def _find_node_template_containing_attribute(self): if node_tpl and \ not self._attribute_exists_in_type(node_tpl.type_definition) \ and self.attribute_name not in node_tpl.get_properties(): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Attribute "%(att)s" was not found in node ' 'template "%(ntpl)s".') % {'att': self.attribute_name, @@ -428,14 +430,14 @@ def _find_node_template(self, node_template_name): # Currently this is the only way to tell whether the function # is used within the outputs section of the TOSCA template. if isinstance(self.context, list): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_( '"get_attribute: [ HOST, ... ]" is not allowed in ' '"outputs" section of the TOSCA template.'))) return node_tpl = self._find_host_containing_attribute() if not node_tpl: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_( '"get_attribute: [ HOST, ... ]" was used in node ' 'template "{0}" but "{1}" was not found in ' @@ -445,14 +447,14 @@ def _find_node_template(self, node_template_name): return node_tpl if node_template_name == TARGET: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"TARGET" keyword can only be used in context' ' to "Relationships" target node'))) return return self.context.target if node_template_name == SOURCE: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"SOURCE" keyword can only be used in context' ' to "Relationships" source node'))) return @@ -464,7 +466,7 @@ def _find_node_template(self, node_template_name): for node_template in self.tosca_tpl.nodetemplates: if node_template.name == name: return node_template - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( 'Node template "{0}" was not found.' ).format(node_template_name))) @@ -498,7 +500,7 @@ def _get_capability_attribute(self, if attrs and attr_name in attrs.keys(): attribute = attrs[attr_name] if not attribute: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Attribute "%(attr)s" was not found in ' 'capability "%(cap)s" of node template ' '"%(ntpl1)s" referenced from node template ' @@ -512,7 +514,7 @@ def _get_capability_attribute(self, capability_name, self.context.name, node_template.name) - ExceptionCollector.appendException(KeyError(msg)) + ValidationIssueCollector.appendException(KeyError(msg)) @property def node_template_name(self): diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetInput.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetInput.java index dd6c05c..67cecd7 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetInput.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetInput.java @@ -5,7 +5,7 @@ import java.util.LinkedHashMap; import org.openecomp.sdc.toscaparser.api.DataEntity; import org.openecomp.sdc.toscaparser.api.TopologyTemplate; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; import org.openecomp.sdc.toscaparser.api.parameters.Input; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -25,9 +25,9 @@ public class GetInput extends Function { // args.toString())); // } if(args.size() > 2) { - ThreadLocalsHolder.getCollector().appendWarning(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE009", String.format( "ValueError: Expected max 2 arguments for function \"get_input\" but received \"%s\"", - args.size())); + args.size()))); } boolean bFound = false; for(Input inp: toscaTpl.getInputs()) { @@ -37,8 +37,8 @@ public class GetInput extends Function { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownInputError: Unknown input \"%s\"",args.get(0))); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE158", String.format( + "UnknownInputError: Unknown input \"%s\"",args.get(0)))); } } @@ -99,13 +99,13 @@ Example: def validate(self): if len(self.args) != 1: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_( 'Expected one argument for function "get_input" but ' 'received "%s".') % self.args)) inputs = [input.name for input in self.tosca_tpl.inputs] if self.args[0] not in inputs: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownInputError(input_name=self.args[0])) def result(self): diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetOperationOutput.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetOperationOutput.java index 22f2cd7..7af7eeb 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetOperationOutput.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetOperationOutput.java @@ -1,9 +1,10 @@ package org.openecomp.sdc.toscaparser.api.functions; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import org.openecomp.sdc.toscaparser.api.*; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.elements.InterfacesDef; import org.openecomp.sdc.toscaparser.api.elements.RelationshipType; import org.openecomp.sdc.toscaparser.api.elements.StatefulEntityType; @@ -23,10 +24,10 @@ public class GetOperationOutput extends Function { _findOperationName(interfaceName,(String)args.get(2)); } else { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE159", "ValueError: Illegal arguments for function \"get_operation_output\". " + "Expected arguments: \"template_name\",\"interface_name\"," + - "\"operation_name\",\"output_variable_name\""); + "\"operation_name\",\"output_variable_name\"")); } } @@ -42,9 +43,9 @@ public class GetOperationOutput extends Function { return _interfaceName; } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE160", String.format( "ValueError: invalid interface name \"%s\" in \"get_operation_output\"", - _interfaceName)); + _interfaceName))); return null; } } @@ -64,9 +65,9 @@ public class GetOperationOutput extends Function { return operationName; } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE161", String.format( "ValueError: Invalid operation of Configure interface \"%s\" in \"get_operation_output\"", - operationName)); + operationName))); return null; } } @@ -83,16 +84,16 @@ public class GetOperationOutput extends Function { return operationName; } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE162", String.format( "ValueError: Invalid operation of Configure interface \"%s\" in \"get_operation_output\"", - operationName)); + operationName))); return null; } } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE163", String.format( "ValueError: Invalid interface name \"%s\" in \"get_operation_output\"", - interfaceName)); + interfaceName))); return null; } } @@ -100,18 +101,18 @@ public class GetOperationOutput extends Function { private NodeTemplate _findNodeTemplate(String nodeTemplateName) { if(nodeTemplateName.equals(TARGET)) { if(!(((EntityTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE164", "KeyError: \"TARGET\" keyword can only be used in context " + - " to \"Relationships\" target node"); + " to \"Relationships\" target node")); return null; } return ((RelationshipTemplate)context).getTarget(); } if(nodeTemplateName.equals(SOURCE)) { if(!(((EntityTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE165", "KeyError: \"SOURCE\" keyword can only be used in context " + - " to \"Relationships\" source node"); + " to \"Relationships\" source node")); return null; } return ((RelationshipTemplate)context).getTarget(); @@ -128,8 +129,8 @@ public class GetOperationOutput extends Function { return nt; } } - ThreadLocalsHolder.getCollector().appendException(String.format( - "KeyError: Node template \"%s\" was not found",nodeTemplateName)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE166", String.format( + "KeyError: Node template \"%s\" was not found",nodeTemplateName))); return null; } @@ -149,7 +150,7 @@ def validate(self): interface_name = self._find_interface_name(self.args[1]) self._find_operation_name(interface_name, self.args[2]) else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Illegal arguments for function "{0}". Expected ' 'arguments: "template_name","interface_name",' '"operation_name","output_variable_name"' @@ -160,7 +161,7 @@ def _find_interface_name(self, interface_name): if interface_name in toscaparser.elements.interfaces.SECTIONS: return interface_name else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Enter a valid interface name' ).format(GET_OPERATION_OUTPUT))) return @@ -173,7 +174,7 @@ def _find_operation_name(self, interface_name, operation_name): interfaces_relationship_configure_operations): return operation_name else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Enter an operation of Configure interface' ).format(GET_OPERATION_OUTPUT))) return @@ -183,12 +184,12 @@ def _find_operation_name(self, interface_name, operation_name): StatefulEntityType.interfaces_node_lifecycle_operations): return operation_name else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Enter an operation of Standard interface' ).format(GET_OPERATION_OUTPUT))) return else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Enter a valid operation name' ).format(GET_OPERATION_OUTPUT))) return @@ -196,14 +197,14 @@ def _find_operation_name(self, interface_name, operation_name): def _find_node_template(self, node_template_name): if node_template_name == TARGET: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"TARGET" keyword can only be used in context' ' to "Relationships" target node'))) return return self.context.target if node_template_name == SOURCE: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"SOURCE" keyword can only be used in context' ' to "Relationships" source node'))) return @@ -215,7 +216,7 @@ def _find_node_template(self, node_template_name): for node_template in self.tosca_tpl.nodetemplates: if node_template.name == name: return node_template - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( 'Node template "{0}" was not found.' ).format(node_template_name))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetProperty.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetProperty.java index 41495bc..1abee6e 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetProperty.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/GetProperty.java @@ -1,5 +1,7 @@ package org.openecomp.sdc.toscaparser.api.functions; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.LinkedHashMap; @@ -46,8 +48,8 @@ public class GetProperty extends Function { @Override void validate() { if(args.size() < 2) { - ThreadLocalsHolder.getCollector().appendException( - "ValueError: Illegal arguments for function \"get_property\". Expected arguments: \"node-template-name\", \"req-or-cap\" (optional), \"property name.\""); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE167", + "ValueError: Illegal arguments for function \"get_property\". Expected arguments: \"node-template-name\", \"req-or-cap\" (optional), \"property name.\"")); return; } if(args.size() == 2) { @@ -129,16 +131,16 @@ public class GetProperty extends Function { property = ((Property)props.get(propertyName)).getValue(); } if(property == null && throwErrors) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE168", String.format( "KeyError: Property \"%s\" was not found in capability \"%s\" of node template \"%s\" referenced from node template \"%s\"", - propertyName,capabilityName,nodeTemplate.getName(),((NodeTemplate)context).getName())); + propertyName,capabilityName,nodeTemplate.getName(),((NodeTemplate)context).getName()))); } return property; } if(throwErrors) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE169", String.format( "KeyError: Requirement/CapabilityAssignment \"%s\" referenced from node template \"%s\" was not found in node template \"%s\"", - capabilityName,((NodeTemplate)context).getName(),nodeTemplate.getName())); + capabilityName,((NodeTemplate)context).getName(),nodeTemplate.getName()))); } return null; @@ -152,9 +154,9 @@ public class GetProperty extends Function { LinkedHashMap props = nodeTpl.getProperties(); Property found = props.get(propertyName); if(found == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE170", String.format( "KeyError: Property \"%s\" was not found in node template \"%s\"", - propertyName,nodeTpl.getName())); + propertyName,nodeTpl.getName()))); } return found; } @@ -167,25 +169,25 @@ public class GetProperty extends Function { if(nodeTemplateName.equals(HOST)) { NodeTemplate node = _findHostContainingProperty(null); if(node == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE171", String.format( "KeyError: Property \"%s\" was not found in capability \"%s\" of node template \"%s\" referenced from node template \"%s\"", - (String)args.get(2),(String)args.get(1),((NodeTemplate)context).getName())); + (String)args.get(2),(String)args.get(1),((NodeTemplate)context).getName()))); return null; } return node; } if(nodeTemplateName.equals(TARGET)) { if(!(((RelationshipTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( - "KeyError: \"TARGET\" keyword can only be used in context to \"Relationships\" target node"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE172", + "KeyError: \"TARGET\" keyword can only be used in context to \"Relationships\" target node")); return null; } return ((RelationshipTemplate)context).getTarget(); } if(nodeTemplateName.equals(SOURCE)) { if(!(((RelationshipTemplate)context).getTypeDefinition() instanceof RelationshipType)) { - ThreadLocalsHolder.getCollector().appendException( - "KeyError: \"SOURCE\" keyword can only be used in context to \"Relationships\" target node"); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE173", + "KeyError: \"SOURCE\" keyword can only be used in context to \"Relationships\" target node")); return null; } return ((RelationshipTemplate)context).getSource(); @@ -198,9 +200,9 @@ public class GetProperty extends Function { return nodeTemplate; } } - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE174", String.format( "KeyError: Node template \"%s\" was not found. Referenced from Node Template \"%s\"", - nodeTemplateName,((NodeTemplate)context).getName())); + nodeTemplateName,((NodeTemplate)context).getName()))); return null; } @@ -212,16 +214,16 @@ public class GetProperty extends Function { return ((ArrayList)value).get(index); } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE175", String.format( "KeyError: Property \"%s\" found in capability \"%s\" referenced from node template \"%s\" must have an element with index %d", - args.get(2),args.get(1),((NodeTemplate)context).getName(),index)); + args.get(2),args.get(1),((NodeTemplate)context).getName(),index))); } } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE176", String.format( "KeyError: Property \"%s\" found in capability \"%s\" referenced from node template \"%s\" must be a list", - args.get(2),args.get(1),((NodeTemplate)context).getName())); + args.get(2),args.get(1),((NodeTemplate)context).getName()))); } return null; } @@ -234,15 +236,15 @@ public class GetProperty extends Function { return ov; } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE177", String.format( "KeyError: Property \"%s\" found in capability \"%s\" referenced from node template \"%s\" must have an attribute named \"%s\"", - args.get(2),args.get(1),((NodeTemplate)context).getName(),attribute)); + args.get(2),args.get(1),((NodeTemplate)context).getName(),attribute))); } } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE178", String.format( "KeyError: Property \"%s\" found in capability \"%s\" referenced from node template \"%s\" must be a dict", - args.get(2),args.get(1),((NodeTemplate)context).getName())); + args.get(2),args.get(1),((NodeTemplate)context).getName()))); } return null; } @@ -379,7 +381,7 @@ Examples: def validate(self): if len(self.args) < 2: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_( 'Expected arguments: "node-template-name", "req-or-cap" ' '(optional), "property name".'))) @@ -446,7 +448,7 @@ def _get_capability_property(self, if props and property_name in props.keys(): property = props[property_name].value if not property: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Property "%(prop)s" was not found in ' 'capability "%(cap)s" of node template ' '"%(ntpl1)s" referenced from node template ' @@ -460,7 +462,7 @@ def _get_capability_property(self, capability_name, self.context.name, node_template.name) - ExceptionCollector.appendException(KeyError(msg)) + ValidationIssueCollector.appendException(KeyError(msg)) def _find_property(self, property_name): node_tpl = self._find_node_template(self.args[0]) @@ -469,7 +471,7 @@ def _find_property(self, property_name): props = node_tpl.get_properties() found = [props[property_name]] if property_name in props else [] if len(found) == 0: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('Property "%(prop)s" was not found in node ' 'template "%(ntpl)s".') % {'prop': property_name, @@ -485,14 +487,14 @@ def _find_node_template(self, node_template_name): return self._find_host_containing_property() if node_template_name == TARGET: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"TARGET" keyword can only be used in context' ' to "Relationships" target node'))) return return self.context.target if node_template_name == SOURCE: if not isinstance(self.context.type_definition, RelationshipType): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_('"SOURCE" keyword can only be used in context' ' to "Relationships" source node'))) return @@ -502,7 +504,7 @@ def _find_node_template(self, node_template_name): for node_template in self.tosca_tpl.nodetemplates: if node_template.name == node_template_name: return node_template - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( 'Node template "{0}" was not found.' ).format(node_template_name))) @@ -512,7 +514,7 @@ def _get_index_value(self, value, index): if index < len(value): return value[index] else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( "Property '{0}' found in capability '{1}'" " referenced from node template {2}" @@ -522,7 +524,7 @@ def _get_index_value(self, value, index): self.context.name, index))) else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( "Property '{0}' found in capability '{1}'" " referenced from node template {2}" @@ -535,7 +537,7 @@ def _get_attribute_value(self, value, attibute): if attibute in value: return value[attibute] else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( "Property '{0}' found in capability '{1}'" " referenced from node template {2}" @@ -545,7 +547,7 @@ def _get_attribute_value(self, value, attibute): self.context.name, attibute))) else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( KeyError(_( "Property '{0}' found in capability '{1}'" " referenced from node template {2}" diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Token.java b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Token.java index 4438908..8f35a80 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Token.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/functions/Token.java @@ -1,11 +1,10 @@ package org.openecomp.sdc.toscaparser.api.functions; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; -import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.NodeTemplate; import org.openecomp.sdc.toscaparser.api.TopologyTemplate; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class Token extends Function { @@ -42,21 +41,21 @@ public class Token extends Function { @Override void validate() { if(args.size() < 3) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE180", "ValueError: Invalid arguments for function \"token\". " + - "Expected at least three arguments"); + "Expected at least three arguments")); } else { if(!(args.get(1) instanceof String) || ((String)args.get(1)).length() != 1) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE181", "ValueError: Invalid arguments for function \"token\". " + - "Expected single char value as second argument"); + "Expected single char value as second argument")); } if(!(args.get(2) instanceof Integer)) { - ThreadLocalsHolder.getCollector().appendException( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE182", "ValueError: Invalid arguments for function \"token\"" + - "Expected integer value as third argument"); + "Expected integer value as third argument")); } } } @@ -91,18 +90,18 @@ Example: def validate(self): if len(self.args) < 3: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Invalid arguments for function "{0}". Expected ' 'at least three arguments.').format(TOKEN))) else: if not isinstance(self.args[1], str) or len(self.args[1]) != 1: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Invalid arguments for function "{0}". ' 'Expected single char value as second ' 'argument.').format(TOKEN))) if not isinstance(self.args[2], int): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Invalid arguments for function "{0}". ' 'Expected integer value as third ' 'argument.').format(TOKEN))) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Input.java b/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Input.java index 28e57d2..15ca6da 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Input.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Input.java @@ -1,11 +1,12 @@ package org.openecomp.sdc.toscaparser.api.parameters; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; import org.openecomp.sdc.toscaparser.api.DataEntity; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.elements.EntityType; import org.openecomp.sdc.toscaparser.api.elements.constraints.Constraint; import org.openecomp.sdc.toscaparser.api.elements.constraints.Schema; @@ -95,9 +96,9 @@ public class Input { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE214", String.format( "UnknownFieldError: Input \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -118,8 +119,8 @@ public class Input { } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: Invalid type \"%s\"",inputType)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE215", String.format( + "ValueError: Invalid type \"%s\"",inputType))); } } @@ -150,7 +151,7 @@ public class Input { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import MissingRequiredFieldError from toscaparser.common.exception import UnknownFieldError from toscaparser.dataentity import DataEntity @@ -207,13 +208,13 @@ class Input(object): def _validate_field(self): for name in self.schema.schema: if name not in self.INPUTFIELD: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Input "%s"' % self.name, field=name)) def validate_type(self, input_type): if input_type not in Schema.PROPERTY_TYPES: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Invalid type "%s".') % type)) # tODO(anyone) Need to test for any built-in datatype not just network diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Output.java b/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Output.java index 34ecf12..381388b 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Output.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/parameters/Output.java @@ -1,8 +1,9 @@ package org.openecomp.sdc.toscaparser.api.parameters; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; public class Output { @@ -34,15 +35,15 @@ public class Output { private void _validateField() { if(!(attrs instanceof LinkedHashMap)) { //TODO wrong error message... - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE216", String.format( "ValidationError: Output \"%s\" has wrong type. Expecting a dict", - name)); + name))); } if(getValue() == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE217", String.format( "MissingRequiredFieldError: Output \"%s\" is missing required \"%s\"", - name,VALUE)); + name,VALUE))); } for(String key: attrs.keySet()) { boolean bFound = false; @@ -53,9 +54,9 @@ public class Output { } } if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE218", String.format( "UnknownFieldError: Output \"%s\" contains unknown field \"%s\"", - name,key)); + name,key))); } } } @@ -94,16 +95,16 @@ class Output(object): def _validate_field(self): if not isinstance(self.attrs, dict): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError(what='Output "%s"' % self.name, required=self.VALUE)) if self.value is None: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( MissingRequiredFieldError(what='Output "%s"' % self.name, required=self.VALUE)) for name in self.attrs: if name not in self.OUTPUTFIELD: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( UnknownFieldError(what='Output "%s"' % self.name, field=name)) */ diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java b/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java index 85b54ee..ef29b53 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java @@ -1,5 +1,7 @@ package org.openecomp.sdc.toscaparser.api.prereq; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; @@ -61,7 +63,7 @@ public class CSAR { if(isFile) { File f = new File(path); if (!f.isFile()) { - ThreadLocalsHolder.getCollector().appendException(String.format("\"%s\" is not a file", path)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE220", String.format("\"%s\" is not a file", path))); return false; } else { @@ -70,7 +72,7 @@ public class CSAR { } else { if(!UrlUtils.validateUrl(path)) { - ThreadLocalsHolder.getCollector().appendException(String.format("ImportError: \"%s\" does not exist",path)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE221", String.format("ImportError: \"%s\" does not exist",path))); return false; } // get it to a local file @@ -82,7 +84,7 @@ public class CSAR { Files.copy(in,ptf,StandardCopyOption.REPLACE_EXISTING); } catch(Exception e) { - ThreadLocalsHolder.getCollector().appendException("ImportError: failed to load CSAR from " + path); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE222", "ImportError: failed to load CSAR from " + path)); return false; } @@ -199,7 +201,7 @@ public class CSAR { //ThreadLocalsHolder.getCollector().appendCriticalException(e.getMessage()); throw e; } catch (Exception e) { - ThreadLocalsHolder.getCollector().appendException("ValidationError: " + e.getMessage()); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE223", "ValidationError: " + e.getMessage())); errorCaught = true; } @@ -281,10 +283,10 @@ public class CSAR { return (LinkedHashMap)data; } catch(Exception e) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE224", String.format( "The file \"%s\" in the CSAR \"%s\" does not " + "contain valid TOSCA YAML content", - mainTemplate,csar)); + mainTemplate,csar))); } } return null; @@ -361,9 +363,9 @@ public class CSAR { } } else { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE225", String.format( "ValueError: Unexpected artifact definition for \"%s\"", - artifactKey)); + artifactKey))); errorCaught = true; } } @@ -429,12 +431,12 @@ public class CSAR { return; } else { - ThreadLocalsHolder.getCollector().appendException(msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE226", msg)); errorCaught = true; } } catch (Exception e) { - ThreadLocalsHolder.getCollector().appendException(msg); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE227", msg)); } } @@ -446,8 +448,8 @@ public class CSAR { } if(raiseExc) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: The resource \"%s\" does not exist",resourceFile)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE228", String.format( + "ValueError: The resource \"%s\" does not exist",resourceFile))); } errorCaught = true; } @@ -511,7 +513,7 @@ public class CSAR { /*python -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import URLException from toscaparser.common.exception import ValidationError from toscaparser.imports import ImportsLoader @@ -543,14 +545,14 @@ class CSAR(object): missing_err_msg = (_('"%s" does not exist.') % self.path) if self.a_file: if not os.path.isfile(self.path): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=missing_err_msg)) return False else: self.csar = self.path else: # a URL if not UrlUtils.validate_url(self.path): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=missing_err_msg)) return False else: @@ -560,7 +562,7 @@ class CSAR(object): # validate that it is a valid zip file if not zipfile.is_zipfile(self.csar): err_msg = (_('"%s" is not a valid zip file.') % self.path) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) return False @@ -571,7 +573,7 @@ class CSAR(object): err_msg = (_('"%s" is not a valid CSAR as it does not contain the ' 'required file "TOSCA.meta" in the folder ' '"TOSCA-Metadata".') % self.path) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) return False @@ -585,11 +587,11 @@ class CSAR(object): if type(meta) is dict: self.metadata = meta else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=invalid_yaml_err_msg)) return False except yaml.YAMLError: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=invalid_yaml_err_msg)) return False @@ -598,7 +600,7 @@ class CSAR(object): '"Entry-Definitions" in ' '"TOSCA-Metadata/TOSCA.meta".') % self.path) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) return False @@ -608,7 +610,7 @@ class CSAR(object): if entry and entry not in filelist: err_msg = (_('The "Entry-Definitions" file defined in the ' 'CSAR "%s" does not exist.') % self.path) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=err_msg)) return False @@ -654,11 +656,11 @@ class CSAR(object): try: tosca_yaml = yaml.load(data) if type(tosca_yaml) is not dict: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=invalid_tosca_yaml_err_msg)) return tosca_yaml except Exception: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValidationError(message=invalid_tosca_yaml_err_msg)) def get_description(self): @@ -718,7 +720,7 @@ class CSAR(object): main_tpl_file, artifact['file']) else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('Unexpected artifact ' 'definition for "%s".') % artifact_key)) @@ -759,11 +761,11 @@ class CSAR(object): if UrlUtils.url_accessible(resource_file): return else: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( URLException(what=msg)) self.error_caught = True except Exception: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( URLException(what=msg)) self.error_caught = True @@ -773,7 +775,7 @@ class CSAR(object): return if raise_exc: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('The resource "%s" does not exist.') % resource_file)) self.error_caught = True diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java.orig b/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java.orig index aa36b9e..b4d2614 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java.orig +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/prereq/CSAR.java.orig @@ -18,7 +18,7 @@ import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import org.openecomp.sdc.toscaparser.api.ImportsLoader; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; import org.openecomp.sdc.toscaparser.api.elements.Metadata; import org.openecomp.sdc.toscaparser.api.utils.UrlUtils; import org.slf4j.Logger; diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/JToscaErrorCodes.java b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/JToscaErrorCodes.java index 354fef0..6fb4606 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/JToscaErrorCodes.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/JToscaErrorCodes.java @@ -2,14 +2,14 @@ package org.openecomp.sdc.toscaparser.api.utils; public enum JToscaErrorCodes { - MISSING_META_FILE("JT1001"), - INVALID_META_YAML_CONTENT("JT1002"), - ENTRY_DEFINITION_NOT_DEFINED("JT1003"), - MISSING_ENTRY_DEFINITION_FILE ("JT1004"), - GENERAL_ERROR("JT1005"), - PATH_NOT_VALID("JT1006"), - CSAR_TOSCA_VALIDATION_ERROR("JT1007"), - INVALID_CSAR_FORMAT("JT1008"); + MISSING_META_FILE("JE1001"), + INVALID_META_YAML_CONTENT("JE1002"), + ENTRY_DEFINITION_NOT_DEFINED("JE1003"), + MISSING_ENTRY_DEFINITION_FILE ("JE1004"), + GENERAL_ERROR("JE1005"), + PATH_NOT_VALID("JE1006"), + CSAR_TOSCA_VALIDATION_ERROR("JE1007"), + INVALID_CSAR_FORMAT("JE1008"); private String value; diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/TOSCAVersionProperty.java b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/TOSCAVersionProperty.java index 6b3c1ce..f749f7b 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/TOSCAVersionProperty.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/TOSCAVersionProperty.java @@ -1,10 +1,10 @@ package org.openecomp.sdc.toscaparser.api.utils; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; - public class TOSCAVersionProperty {// test with functions/test_concat.yaml private String version; @@ -35,10 +35,10 @@ public class TOSCAVersionProperty {// test with functions/test_concat.yaml Pattern pattern = Pattern.compile(versionRe); Matcher matcher = pattern.matcher(version); if(!matcher.find()) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE252", String.format( "InvalidTOSCAVersionPropertyException: " + "Value of TOSCA version property \"%s\" is invalid", - version)); + version))); return; } minorVersion = matcher.group("gMinorVersion"); @@ -77,10 +77,10 @@ public class TOSCAVersionProperty {// test with functions/test_concat.yaml if((fixVersion == null && value != null) || (minorVersion.equals("0") && majorVersion.equals("0") && fixVersion.equals("0") && value != null)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE253", String.format( "InvalidTOSCAVersionPropertyException: " + "Value of TOSCA version property \"%s\" is invalid", - version)); + version))); } return value; } @@ -92,10 +92,10 @@ public class TOSCAVersionProperty {// test with functions/test_concat.yaml // Eg: version = 18.0.0-1 is invalid. if(qualifier == null && value != null) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE254", String.format( "InvalidTOSCAVersionPropertyException: " + "Value of TOSCA version property \"%s\" is invalid", - version)); + version))); } return value; } @@ -120,7 +120,7 @@ class TOSCAVersionProperty(object): self.version = str(version) match = self.VERSION_RE.match(self.version) if not match: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTOSCAVersionPropertyException(what=(self.version))) return ver = match.groupdict() @@ -161,7 +161,7 @@ class TOSCAVersionProperty(object): if (self.fix_version is None and value) or \ (self.minor_version == self.major_version == self.fix_version == '0' and value): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTOSCAVersionPropertyException(what=(self.version))) return value @@ -173,7 +173,7 @@ class TOSCAVersionProperty(object): Eg: version = 18.0.0-1 is invalid. """ if not self.qualifier and value: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( InvalidTOSCAVersionPropertyException(what=(self.version))) return value diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ThreadLocalsHolder.java b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ThreadLocalsHolder.java index 47ba972..0e1531f 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ThreadLocalsHolder.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ThreadLocalsHolder.java @@ -1,20 +1,20 @@ package org.openecomp.sdc.toscaparser.api.utils; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; +import org.openecomp.sdc.toscaparser.api.common.ValidationIssueCollector; public class ThreadLocalsHolder { - private static final ThreadLocal exceptionCollectorThreadLocal = new ThreadLocal<>(); + private static final ThreadLocal exceptionCollectorThreadLocal = new ThreadLocal<>(); private ThreadLocalsHolder(){} - public static ExceptionCollector getCollector() { + public static ValidationIssueCollector getCollector() { return exceptionCollectorThreadLocal.get(); } - public static void setCollector(ExceptionCollector exceptionCollector) { + public static void setCollector(ValidationIssueCollector validationIssueCollector) { cleanup(); - exceptionCollectorThreadLocal.set(exceptionCollector); + exceptionCollectorThreadLocal.set(validationIssueCollector); } public static void cleanup(){ diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/UrlUtils.java b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/UrlUtils.java index 092f827..3383bd7 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/UrlUtils.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/UrlUtils.java @@ -1,12 +1,12 @@ package org.openecomp.sdc.toscaparser.api.utils; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; - public class UrlUtils { public static boolean validateUrl(String sUrl) { @@ -34,16 +34,16 @@ public class UrlUtils { // relative_path: heat-translator // - joined: http://www.githib.com/openstack/heat-translator if(!validateUrl(sUrl)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: The URL \"%s\" is malformed",sUrl)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE255", String.format( + "ValueError: The URL \"%s\" is malformed",sUrl))); } try { URL base = new URL(sUrl); return (new URL(base,relativePath)).toString(); } catch(MalformedURLException e) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: Joining URL \"%s\" and relative path \"%s\" caused an exception",sUrl,relativePath)); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE256", String.format( + "ValueError: Joining URL \"%s\" and relative path \"%s\" caused an exception",sUrl,relativePath))); return sUrl; } } @@ -70,7 +70,7 @@ public class UrlUtils { from six.moves.urllib.parse import urljoin from six.moves.urllib.parse import urlparse -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.utils.gettextutils import _ try: @@ -108,7 +108,7 @@ class UrlUtils(object): - joined: http://www.githib.com/openstack/heat-translator """ if not UrlUtils.validate_url(url): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a valid URL.') % url)) return urljoin(url, relative_path) diff --git a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ValidateUtils.java b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ValidateUtils.java index 9909685..53f5bec 100644 --- a/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ValidateUtils.java +++ b/src/main/java/org/openecomp/sdc/toscaparser/api/utils/ValidateUtils.java @@ -1,11 +1,11 @@ package org.openecomp.sdc.toscaparser.api.utils; +import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue; + import java.util.ArrayList; import java.util.Date; import java.util.LinkedHashMap; -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; - public class ValidateUtils { private static final String RANGE_UNBOUNDED = "UNBOUNDED"; @@ -35,8 +35,8 @@ public class ValidateUtils { public static Object validateNumeric(Object value) { if(value != null) { if (!(value instanceof Number)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a numeric", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE257", String.format( + "ValueError: \"%s\" is not a numeric",value.toString()))); } } return value; @@ -49,8 +49,8 @@ public class ValidateUtils { if (value instanceof Boolean) { return (Boolean) value ? 1 : 0; } - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not an integer", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE258", String.format( + "ValueError: \"%s\" is not an integer",value.toString()))); } } return value; @@ -59,8 +59,8 @@ public class ValidateUtils { public static Object validateFloat(Object value) { if(value != null) { if (!(value instanceof Float || value instanceof Double)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a float", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE259", String.format( + "ValueError: \"%s\" is not a float",value.toString()))); } } return value; @@ -69,8 +69,8 @@ public class ValidateUtils { public static Object validateString(Object value) { if(value != null) { if (!(value instanceof String)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \'%s\' is not a string", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE260", String.format( + "ValueError: \'%s\' is not a string",value.toString()))); } } return value; @@ -79,8 +79,8 @@ public class ValidateUtils { public static Object validateList(Object value) { if(value != null) { if (!(value instanceof ArrayList)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a list", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE261", String.format( + "ValueError: \"%s\" is not a list",value.toString()))); } } return value; @@ -93,8 +93,8 @@ public class ValidateUtils { validateList(range); // validate range list has a min and max if(range instanceof ArrayList && ((ArrayList)range).size() != 2) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE262", String.format( + "ValueError: \"%s\" is not a valid range",range.toString()))); // too dangerous to continue... return range; } @@ -106,8 +106,8 @@ public class ValidateUtils { if(!(r0 instanceof Integer) && !(r0 instanceof Float) || !(r1 instanceof Integer) && !(r1 instanceof Float)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE263", String.format( + "ValueError: \"%s\" is not a valid range",range.toString()))); // too dangerous to continue... return range; } @@ -131,8 +131,8 @@ public class ValidateUtils { if(!minTest && !maxTest) { // Note: min == max is allowed if(min > max) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError:\"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE264", String.format( + "ValueError:\"%s\" is not a valid range",range.toString()))); } } return range; @@ -142,8 +142,8 @@ public class ValidateUtils { public static Object validateValueInRange(Object value,Object range,String propName) { // verify all 3 are numeric and convert to Floats if(!(value instanceof Integer || value instanceof Float)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: validateInRange: \"%s\" is not a number",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE265", String.format( + "ValueError: validateInRange: \"%s\" is not a number",range.toString()))); return value; } Float fval = value instanceof Integer ? ((Integer)value).floatValue() : (Float)value; @@ -154,8 +154,8 @@ public class ValidateUtils { // better safe than sorry... // validate that range list has a min and max if(range instanceof ArrayList && ((ArrayList)range).size() != 2) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE266", String.format( + "ValueError: \"%s\" is not a valid range",range.toString()))); // too dangerous to continue... return value; } @@ -167,8 +167,8 @@ public class ValidateUtils { if(!(r0 instanceof Integer) && !(r0 instanceof Float) || !(r1 instanceof Integer) && !(r1 instanceof Float)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE267", String.format( + "ValueError: \"%s\" is not a valid range",range.toString()))); // too dangerous to continue... return value; } @@ -192,8 +192,8 @@ public class ValidateUtils { if(!minTest && !maxTest) { // Note: min == max is allowed if(min > max) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError:\"%s\" is not a valid range",range.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE268", String.format( + "ValueError:\"%s\" is not a valid range",range.toString()))); } } // finally... @@ -211,9 +211,9 @@ public class ValidateUtils { } } if(bError) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE269", String.format( "RangeValueError: Property \"%s\", \"%s\" not in range [\"%s\" - \"%s\"", - propName,value.toString(),r0.toString(),r1.toString())); + propName,value.toString(),r0.toString(),r1.toString()))); } return value; } @@ -221,8 +221,8 @@ public class ValidateUtils { public static Object validateMap(Object ob) { if(ob != null) { if (!(ob instanceof LinkedHashMap)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError\"%s\" is not a map.", ob.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE270", String.format( + "ValueError\"%s\" is not a map.",ob.toString()))); } } return ob; @@ -239,8 +239,8 @@ public class ValidateUtils { return normalized.equals("true"); } } - ThreadLocalsHolder.getCollector().appendException(String.format( - "ValueError: \"%s\" is not a boolean", value.toString())); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE271", String.format( + "ValueError: \"%s\" is not a boolean",value.toString()))); } return value; } @@ -256,7 +256,7 @@ public class ValidateUtils { except Exception as e: original_err_msg = str(e) log.error(original_err_msg) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%(val)s" is not a valid timestamp. "%(msg)s"') % {'val': value, 'msg': original_err_msg})) */ @@ -264,9 +264,9 @@ public class ValidateUtils { // timestamps are loaded as Date objects by the YAML parser if(value != null) { if (!(value instanceof Date)) { - ThreadLocalsHolder.getCollector().appendException(String.format( + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE272", String.format( "ValueError: \"%s\" is not a valid timestamp", - value.toString())); + value.toString()))); } } @@ -278,7 +278,7 @@ public class ValidateUtils { /*python from toscaparser.elements import constraints -from toscaparser.common.exception import ExceptionCollector +from toscaparser.common.exception import ValidationIssueCollector from toscaparser.common.exception import InvalidTOSCAVersionPropertyException from toscaparser.common.exception import RangeValueError from toscaparser.utils.gettextutils import _ @@ -301,7 +301,7 @@ def str_to_num(value): def validate_numeric(value): if not isinstance(value, numbers.Number): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a numeric.') % value)) return value @@ -311,28 +311,28 @@ def validate_integer(value): try: value = int(value) except Exception: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not an integer.') % value)) return value def validate_float(value): if not isinstance(value, float): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a float.') % value)) return value def validate_string(value): if not isinstance(value, six.string_types): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a string.') % value)) return value def validate_list(value): if not isinstance(value, list): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a list.') % value)) return value @@ -342,7 +342,7 @@ def validate_range(range): validate_list(range) # validate range list has a min and max if len(range) != 2: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a valid range.') % range)) # validate min and max are numerics or the keyword UNBOUNDED min_test = max_test = False @@ -358,7 +358,7 @@ def validate_range(range): if not min_test and not max_test: # Note: min == max is allowed if min > max: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a valid range.') % range)) return range @@ -371,7 +371,7 @@ def validate_value_in_range(value, range, prop_name): # Note: value is valid if equal to min if range[0] != RANGE_UNBOUNDED: if value < range[0]: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( RangeValueError(pname=prop_name, pvalue=value, vmin=range[0], @@ -379,7 +379,7 @@ def validate_value_in_range(value, range, prop_name): # Note: value is valid if equal to max if range[1] != RANGE_UNBOUNDED: if value > range[1]: - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( RangeValueError(pname=prop_name, pvalue=value, vmin=range[0], @@ -389,7 +389,7 @@ def validate_value_in_range(value, range, prop_name): def validate_map(value): if not isinstance(value, collections.Mapping): - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a map.') % value)) return value @@ -403,7 +403,7 @@ def validate_boolean(value): if normalised in ['true', 'false']: return normalised == 'true' - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%s" is not a boolean.') % value)) @@ -417,7 +417,7 @@ def validate_timestamp(value): except Exception as e: original_err_msg = str(e) log.error(original_err_msg) - ExceptionCollector.appendException( + ValidationIssueCollector.appendException( ValueError(_('"%(val)s" is not a valid timestamp. "%(msg)s"') % {'val': value, 'msg': original_err_msg})) return diff --git a/src/test/java/org/openecomp/sdc/toscaparser/api/GetValidationIssues.java b/src/test/java/org/openecomp/sdc/toscaparser/api/GetValidationIssues.java new file mode 100644 index 0000000..7a0eec1 --- /dev/null +++ b/src/test/java/org/openecomp/sdc/toscaparser/api/GetValidationIssues.java @@ -0,0 +1,81 @@ +package org.openecomp.sdc.toscaparser.api; + +import com.opencsv.CSVWriter; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Scanner; +//Generate excel file, include all validation issues errors in jtosca +//the error java code, the line number and file name for each error. +public class GetValidationIssues { + + public static CSVWriter fileWriter = null; + public static List data = new ArrayList<>(); + + public static void main(String[] args) { + System.out.println("GetAllValidationIssues - path to project files Directory is " + Arrays.toString(args)); + File jtoscaFiles = new File(args[0]+ "\\jtosca\\src\\main\\java\\org\\openecomp\\sdc\\toscaparser\\api"); + + try { + printFiles(jtoscaFiles); + fileWriter = new CSVWriter(new FileWriter(args[1]+"\\JToscaValidationIssues_"+System.currentTimeMillis()+".csv"), '\t'); + fileWriter.writeNext(new String[] {"Error Message", "Class Name", "Line No."}, false); + fileWriter.writeAll(data, false); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + fileWriter.flush(); + fileWriter.close(); + } catch (IOException e) { + System.out.println("Error while flushing/closing fileWriter !!!"); + e.printStackTrace(); + } + } + } + + private static void printFiles(File dir) { + if (dir != null && dir.exists()) { + for (File file : dir.listFiles()) { + if (file.isDirectory()) + printFiles(file); + else { + Scanner scanner = null; + try { + scanner = new Scanner(file); + + int lineNum = 0; + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + lineNum++; + if (line.startsWith("/*python")) + break; + + if (!line.trim().startsWith("//") && !line.trim().startsWith("#") && line.contains("ThreadLocalsHolder.getCollector().appendValidationIssue")) { + String errMsg = line.trim(); + if (!errMsg.contains(";")) { + String nextLine = null; + while (scanner.hasNextLine() && (nextLine == null || !nextLine.contains(";"))) { + nextLine = scanner.nextLine(); + errMsg += nextLine.trim(); + } + } + + data.add(new String[]{errMsg, file.getName(), String.valueOf(lineNum)}); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } +} + -- cgit