package alien4cloud.tosca.parser.impl.advanced;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import alien4cloud.tosca.parser.impl.base.BaseParserFactory;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.nodes.Node;
import org.alien4cloud.tosca.model.definitions.LowerBoundedDefinition;
import org.alien4cloud.tosca.model.definitions.UpperBoundedDefinition;
import alien4cloud.tosca.parser.INodeParser;
import alien4cloud.tosca.parser.ParsingContextExecution;
import alien4cloud.tosca.parser.ParsingError;
import alien4cloud.tosca.parser.impl.ErrorCode;
import alien4cloud.tosca.parser.impl.base.ListParser;
@Component
public class OccurrencesParser implements INodeParser<List<String>> {
@Resource
private BaseParserFactory baseParserFactory;
@Resource
private BoundParser boundParser;
private ListParser<String> listParser;
@PostConstruct
public void init() {
listParser = baseParserFactory.getListParser(boundParser, "string");
}
@Override
public List<String> parse(Node node, ParsingContextExecution context) {
Object parent = context.getParent();
List<String> result = (List<String>) listParser.parse(node, context);
if (result.size() != 2) {
context.getParsingErrors().add(new ParsingError(ErrorCode.SYNTAX_ERROR, null, node.getStartMark(), null, node.getEndMark(), null));
return result;
}
if (parent instanceof LowerBoundedDefinition) {
((LowerBoundedDefinition) parent).setLowerBound(Integer.parseInt(result.get(0)));
}
if (parent instanceof UpperBoundedDefinition) {
((UpperBoundedDefinition) parent).setUpperBound(Integer.parseInt(result.get(1)));
}
return result;
}
}