diff options
Diffstat (limited to 'jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java')
-rw-r--r-- | jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java | 520 |
1 files changed, 0 insertions, 520 deletions
diff --git a/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java b/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java deleted file mode 100644 index b9c2238..0000000 --- a/jtosca/src/main/java/org/openecomp/sdc/toscaparser/api/SubstitutionMappings.java +++ /dev/null @@ -1,520 +0,0 @@ -package org.openecomp.sdc.toscaparser.api; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedHashMap; - -import org.openecomp.sdc.toscaparser.api.common.ExceptionCollector; -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; - - -public class SubstitutionMappings { - // SubstitutionMappings class declaration - - // SubstitutionMappings exports the topology template as an - // implementation of a Node type. - - private static final String NODE_TYPE = "node_type"; - private static final String REQUIREMENTS = "requirements"; - private static final String CAPABILITIES = "capabilities"; - - private static final String SECTIONS[] = {NODE_TYPE, REQUIREMENTS, CAPABILITIES}; - - private static final String OPTIONAL_OUTPUTS[] = {"tosca_id", "tosca_name", "state"}; - - private LinkedHashMap<String,Object> subMappingDef; - private ArrayList<NodeTemplate> nodetemplates; - private ArrayList<Input> inputs; - private ArrayList<Output> outputs; - private ArrayList<Group> groups; - private NodeTemplate subMappedNodeTemplate; - private LinkedHashMap<String,Object> customDefs; - private LinkedHashMap<String,Object> _capabilities; - private LinkedHashMap<String,Object> _requirements; - - public SubstitutionMappings(LinkedHashMap<String,Object> smsubMappingDef, - ArrayList<NodeTemplate> smnodetemplates, - ArrayList<Input> sminputs, - ArrayList<Output> smoutputs, - ArrayList<Group> smgroups, - NodeTemplate smsubMappedNodeTemplate, - LinkedHashMap<String,Object> smcustomDefs) { - - subMappingDef = smsubMappingDef; - nodetemplates = smnodetemplates; - inputs = sminputs != null ? sminputs : new ArrayList<Input>(); - outputs = smoutputs != null ? smoutputs : new ArrayList<Output>(); - groups = smgroups != null ? smgroups : new ArrayList<Group>(); - subMappedNodeTemplate = smsubMappedNodeTemplate; - customDefs = smcustomDefs != null ? smcustomDefs : new LinkedHashMap<String,Object>(); - _validate(); - - _capabilities = null; - _requirements = null; - } - - public String getType() { - if(subMappingDef != null) { - return (String)subMappingDef.get(NODE_TYPE); - } - return null; - } - - public ArrayList<NodeTemplate> getNodeTemplates() { - return nodetemplates; - } - - /* - @classmethod - def get_node_type(cls, sub_mapping_def): - if isinstance(sub_mapping_def, dict): - return sub_mapping_def.get(cls.NODE_TYPE) - */ - - public static String stGetNodeType(LinkedHashMap<String,Object> _subMappingDef) { - if(_subMappingDef instanceof LinkedHashMap) { - return (String)_subMappingDef.get(NODE_TYPE); - } - return null; - } - - public String getNodeType() { - return (String)subMappingDef.get(NODE_TYPE); - } - - public ArrayList<Input> getInputs() { - return inputs; - } - - public ArrayList<Group> getGroups() { - return groups; - } - - public LinkedHashMap<String,Object> getCapabilities() { - return (LinkedHashMap<String,Object>)subMappingDef.get(CAPABILITIES); - } - - public LinkedHashMap<String,Object> getRequirements() { - return (LinkedHashMap<String,Object>)subMappingDef.get(REQUIREMENTS); - } - - public NodeType getNodeDefinition() { - return new NodeType(getNodeType(), customDefs); - } - - private void _validate() { - // Basic validation - _validateKeys(); - _validateType(); - - // SubstitutionMapping class syntax validation - _validateInputs(); - _validateCapabilities(); - _validateRequirements(); - _validateOutputs(); - } - - private void _validateKeys() { - // validate the keys of substitution mappings - for(String key: subMappingDef.keySet()) { - boolean bFound = false; - for(String s: SECTIONS) { - if(s.equals(key)) { - bFound = true; - break; - } - } - if(!bFound) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownFieldError: SubstitutionMappings contain unknown field \"%s\"", - key)); - } - } - } - - private void _validateType() { - // validate the node_type of substitution mappings - String nodeType = (String)subMappingDef.get(NODE_TYPE); - if(nodeType == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredFieldError: SubstitutionMappings used in topology_template is missing required field \"%s\"", - NODE_TYPE)); - } - Object nodeTypeDef = customDefs.get(nodeType); - if(nodeTypeDef == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "InvalidNodeTypeError: \"%s\" is invalid",nodeType)); - } - } - - private void _validateInputs() { - // validate the inputs of substitution mappings. - - // The inputs defined by the topology template have to match the - // properties of the node type or the substituted node. If there are - // more inputs than the substituted node has properties, default values - //must be defined for those inputs. - - HashSet<String> allInputs = new HashSet<>(); - for(Input inp: inputs) { - allInputs.add(inp.getName()); - } - HashSet<String> requiredProperties = new HashSet<>(); - for(PropertyDef pd: getNodeDefinition().getPropertiesDefObjects()) { - if(pd.isRequired() && pd.getDefault() == null) { - requiredProperties.add(pd.getName()); - } - } - // Must provide inputs for required properties of node type. - for(String property: requiredProperties) { - // Check property which is 'required' and has no 'default' value - if(!allInputs.contains(property)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing required input \"%s\"", - getNodeType(),property)); - } - } - // If the optional properties of node type need to be customized by - // substituted node, it also is necessary to define inputs for them, - // otherwise they are not mandatory to be defined. - HashSet<String> customizedParameters = new HashSet<>(); - if(subMappedNodeTemplate != null) { - customizedParameters.addAll(subMappedNodeTemplate.getProperties().keySet()); - } - HashSet<String> allProperties = new HashSet<String>( - getNodeDefinition().getPropertiesDef().keySet()); - HashSet<String> diffset = customizedParameters; - diffset.removeAll(allInputs); - for(String parameter: diffset) { - if(allProperties.contains(parameter)) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing required input \"%s\"", - getNodeType(),parameter)); - } - } - // Additional inputs are not in the properties of node type must - // provide default values. Currently the scenario may not happen - // because of parameters validation in nodetemplate, here is a - // guarantee. - for(Input inp: inputs) { - diffset = allInputs; - diffset.removeAll(allProperties); - if(diffset.contains(inp.getName()) && inp.getDefault() == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "MissingRequiredInputError: SubstitutionMappings with node_type \"%s\" is missing rquired input \"%s\"", - getNodeType(),inp.getName())); - } - } - } - - private void _validateCapabilities() { - // validate the capabilities of substitution mappings - - // The capabilities must be in node template which be mapped. - LinkedHashMap<String,Object> tplsCapabilities = - (LinkedHashMap<String,Object>)subMappingDef.get(CAPABILITIES); - LinkedHashMap<String,Capability> nodeCapabilities = null; - if(subMappedNodeTemplate != null) { - nodeCapabilities = subMappedNodeTemplate.getCapabilities(); - } - if(nodeCapabilities != null) { - for(String cap: nodeCapabilities.keySet()) { - if(tplsCapabilities != null && tplsCapabilities.get(cap) == null) { - ; //pass - // ExceptionCollector.appendException( - // UnknownFieldError(what='SubstitutionMappings', - // field=cap)) - } - } - } - } - - private void _validateRequirements() { - // validate the requirements of substitution mappings - //***************************************************** - //TO-DO - Different from Python code!! one is a bug... - //***************************************************** - // The requirements must be in node template which be mapped. - LinkedHashMap<String,Object> tplsRequirements = - (LinkedHashMap<String,Object>)subMappingDef.get(REQUIREMENTS); - ArrayList<Object> nodeRequirements = null; - if(subMappedNodeTemplate != null) { - nodeRequirements = subMappedNodeTemplate.getRequirements(); - } - if(nodeRequirements != null) { - for(Object ro: nodeRequirements) { - ArrayList<String> al = new ArrayList<String>( - ((LinkedHashMap<String,Object>)ro).keySet()); - String cap = al.get(0); - if(tplsRequirements != null && tplsRequirements.get(cap) == null) { - ; //pass - // ExceptionCollector.appendException( - // UnknownFieldError(what='SubstitutionMappings', - // field=cap)) - } - } - } - } - - private void _validateOutputs() { - // validate the outputs of substitution mappings. - - // The outputs defined by the topology template have to match the - // attributes of the node type or the substituted node template, - // and the observable attributes of the substituted node template - // have to be defined as attributes of the node type or outputs in - // the topology template. - - // The outputs defined by the topology template have to match the - // attributes of the node type according to the specification, but - // it's reasonable that there are more inputs than the node type - // has properties, the specification will be amended? - - for(Output output: outputs) { - Object ado = getNodeDefinition().getAttributesDef(); - if(ado != null && ((LinkedHashMap<String,Object>)ado).get(output.getName()) == null) { - ThreadLocalsHolder.getCollector().appendException(String.format( - "UnknownOutputError: Unknown output \"%s\" in SubstitutionMappings with node_type \"%s\"", - output.getName(),getNodeType())); - } - } - } - - @Override - public String toString() { - return "SubstitutionMappings{" + -// "subMappingDef=" + subMappingDef + -// ", nodetemplates=" + nodetemplates + -// ", inputs=" + inputs + -// ", outputs=" + outputs + -// ", groups=" + groups + - ", subMappedNodeTemplate=" + (subMappedNodeTemplate==null?"":subMappedNodeTemplate.getName()) + -// ", customDefs=" + customDefs + -// ", _capabilities=" + _capabilities + -// ", _requirements=" + _requirements + - '}'; - } - - @Deprecated - public String toLimitedString() { - return "SubstitutionMappings{" + - "subMappingDef=" + subMappingDef + - ", nodetemplates=" + nodetemplates + - ", inputs=" + inputs + - ", outputs=" + outputs + - ", groups=" + groups + - ", subMappedNodeTemplate=" + (subMappedNodeTemplate==null?"":subMappedNodeTemplate.getName()) + - ", customDefs=" + customDefs + - ", _capabilities=" + _capabilities + - ", _requirements=" + _requirements + - '}'; - } -} - - -/*python - -from toscaparser.common.exception import ExceptionCollector -from toscaparser.common.exception import InvalidNodeTypeError -from toscaparser.common.exception import MissingDefaultValueError -from toscaparser.common.exception import MissingRequiredFieldError -from toscaparser.common.exception import MissingRequiredInputError -from toscaparser.common.exception import UnknownFieldError -from toscaparser.common.exception import UnknownOutputError -from toscaparser.elements.nodetype import NodeType -from toscaparser.utils.gettextutils import _ - -log = logging.getLogger('tosca') - - -class SubstitutionMappings(object): - '''SubstitutionMappings class declaration - - SubstitutionMappings exports the topology template as an - implementation of a Node type. - ''' - - SECTIONS = (NODE_TYPE, REQUIREMENTS, CAPABILITIES) = \ - ('node_type', 'requirements', 'capabilities') - - OPTIONAL_OUTPUTS = ['tosca_id', 'tosca_name', 'state'] - - def __init__(self, sub_mapping_def, nodetemplates, inputs, outputs, - sub_mapped_node_template, custom_defs): - self.nodetemplates = nodetemplates - self.sub_mapping_def = sub_mapping_def - self.inputs = inputs or [] - self.outputs = outputs or [] - self.sub_mapped_node_template = sub_mapped_node_template - self.custom_defs = custom_defs or {} - self._validate() - - self._capabilities = None - self._requirements = None - - @property - def type(self): - if self.sub_mapping_def: - return self.sub_mapping_def.get(self.NODE_TYPE) - - @classmethod - def get_node_type(cls, sub_mapping_def): - if isinstance(sub_mapping_def, dict): - return sub_mapping_def.get(cls.NODE_TYPE) - - @property - def node_type(self): - return self.sub_mapping_def.get(self.NODE_TYPE) - - @property - def capabilities(self): - return self.sub_mapping_def.get(self.CAPABILITIES) - - @property - def requirements(self): - return self.sub_mapping_def.get(self.REQUIREMENTS) - - @property - def node_definition(self): - return NodeType(self.node_type, self.custom_defs) - - def _validate(self): - # Basic validation - self._validate_keys() - self._validate_type() - - # SubstitutionMapping class syntax validation - self._validate_inputs() - self._validate_capabilities() - self._validate_requirements() - self._validate_outputs() - - def _validate_keys(self): - """validate the keys of substitution mappings.""" - for key in self.sub_mapping_def.keys(): - if key not in self.SECTIONS: - ExceptionCollector.appendException( - UnknownFieldError(what=_('SubstitutionMappings'), - field=key)) - - def _validate_type(self): - """validate the node_type of substitution mappings.""" - node_type = self.sub_mapping_def.get(self.NODE_TYPE) - if not node_type: - ExceptionCollector.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( - InvalidNodeTypeError(what=node_type)) - - def _validate_inputs(self): - """validate the inputs of substitution mappings. - - The inputs defined by the topology template have to match the - properties of the node type or the substituted node. If there are - more inputs than the substituted node has properties, default values - must be defined for those inputs. - """ - - all_inputs = set([input.name for input in self.inputs]) - required_properties = set([p.name for p in - self.node_definition. - get_properties_def_objects() - if p.required and p.default is None]) - # Must provide inputs for required properties of node type. - for property in required_properties: - # Check property which is 'required' and has no 'default' value - if property not in all_inputs: - ExceptionCollector.appendException( - MissingRequiredInputError( - what=_('SubstitutionMappings with node_type ') - + self.node_type, - input_name=property)) - - # If the optional properties of node type need to be customized by - # substituted node, it also is necessary to define inputs for them, - # otherwise they are not mandatory to be defined. - customized_parameters = set(self.sub_mapped_node_template - .get_properties().keys() - if self.sub_mapped_node_template else []) - all_properties = set(self.node_definition.get_properties_def()) - for parameter in customized_parameters - all_inputs: - if parameter in all_properties: - ExceptionCollector.appendException( - MissingRequiredInputError( - what=_('SubstitutionMappings with node_type ') - + self.node_type, - input_name=parameter)) - - # Additional inputs are not in the properties of node type must - # provide default values. Currently the scenario may not happen - # because of parameters validation in nodetemplate, here is a - # guarantee. - for input in self.inputs: - if input.name in all_inputs - all_properties \ - and input.default is None: - ExceptionCollector.appendException( - MissingDefaultValueError( - what=_('SubstitutionMappings with node_type ') - + self.node_type, - input_name=input.name)) - - def _validate_capabilities(self): - """validate the capabilities of substitution mappings.""" - - # The capabilites must be in node template wchich be mapped. - tpls_capabilities = self.sub_mapping_def.get(self.CAPABILITIES) - node_capabiliteys = self.sub_mapped_node_template.get_capabilities() \ - if self.sub_mapped_node_template else None - for cap in node_capabiliteys.keys() if node_capabiliteys else []: - if (tpls_capabilities and - cap not in list(tpls_capabilities.keys())): - pass - # ExceptionCollector.appendException( - # UnknownFieldError(what='SubstitutionMappings', - # field=cap)) - - def _validate_requirements(self): - """validate the requirements of substitution mappings.""" - - # The requirements must be in node template wchich be mapped. - tpls_requirements = self.sub_mapping_def.get(self.REQUIREMENTS) - node_requirements = self.sub_mapped_node_template.requirements \ - if self.sub_mapped_node_template else None - for req in node_requirements if node_requirements else []: - if (tpls_requirements and - req not in list(tpls_requirements.keys())): - pass - # ExceptionCollector.appendException( - # UnknownFieldError(what='SubstitutionMappings', - # field=req)) - - def _validate_outputs(self): - """validate the outputs of substitution mappings. - - The outputs defined by the topology template have to match the - attributes of the node type or the substituted node template, - and the observable attributes of the substituted node template - have to be defined as attributes of the node type or outputs in - the topology template. - """ - - # The outputs defined by the topology template have to match the - # attributes of the node type according to the specification, but - # it's reasonable that there are more inputs than the node type - # 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( - UnknownOutputError( - where=_('SubstitutionMappings with node_type ') - + self.node_type, - output_name=output.name))*/
\ No newline at end of file |