package alien4cloud.tosca.parser.impl.advanced;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.nodes.MappingNode;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.SequenceNode;
import alien4cloud.exception.InvalidArgumentException;
import org.alien4cloud.tosca.model.definitions.AbstractPropertyValue;
import org.alien4cloud.tosca.model.definitions.ComplexPropertyValue;
import org.alien4cloud.tosca.model.definitions.ListPropertyValue;
import alien4cloud.tosca.parser.INodeParser;
import alien4cloud.tosca.parser.ParserUtils;
import alien4cloud.tosca.parser.ParsingContextExecution;
@Component
public class ComplexPropertyValueParser implements INodeParser<AbstractPropertyValue> {
@Override
public AbstractPropertyValue parse(Node node, ParsingContextExecution context) {
if (node instanceof MappingNode) {
return new ComplexPropertyValue(ParserUtils.parseMap((MappingNode) node));
} else if (node instanceof SequenceNode) {
return new ListPropertyValue(ParserUtils.parseSequence((SequenceNode) node));
} else {
throw new InvalidArgumentException("Do not expect other node than MappingNode or SequenceNode here " + node.getClass().getName());
}
}
}