package alien4cloud.tosca.parser.postprocess;
import javax.annotation.Resource;
import org.alien4cloud.tosca.model.definitions.RequirementDefinition;
import org.alien4cloud.tosca.model.types.NodeType;
import org.alien4cloud.tosca.model.types.RelationshipType;
import org.springframework.stereotype.Component;
import alien4cloud.tosca.parser.ParsingContextExecution;
/**
* Performs validation of a requirement definition.
*/
@Component
public class RequirementDefinitionPostProcessor implements IPostProcessor<RequirementDefinition> {
@Resource
private ReferencePostProcessor referencePostProcessor;
@Resource
private CapabilityOrNodeReferencePostProcessor capabilityOrNodeReferencePostProcessor;
@Resource
private CapabilityReferencePostProcessor capabilityReferencePostProcessor;
@Override
public void process(RequirementDefinition instance) {
String definitionVersion = ParsingContextExecution.getDefinitionVersion();
switch (definitionVersion) {
case "tosca_simple_yaml_1_0_0_wd03":
case "alien_dsl_1_1_0":
case "alien_dsl_1_2_0":
capabilityOrNodeReferencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getType()));
break;
default:
// In latest versions we process the capability only.
capabilityReferencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getType()));
break;
}
if(instance.getNodeType() != null) {
referencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getNodeType(), NodeType.class));
}
if (instance.getRelationshipType() != null) {
referencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getRelationshipType(), RelationshipType.class));
}
}
}