package alien4cloud.tosca.parser.mapping.generator; import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.nodes.MappingNode; import org.yaml.snakeyaml.nodes.NodeTuple; import com.google.common.collect.Maps; import alien4cloud.tosca.parser.MappingTarget; import alien4cloud.tosca.parser.ParserUtils; import alien4cloud.tosca.parser.ParsingContextExecution; import alien4cloud.tosca.parser.impl.base.BaseParserFactory; /** * Mapping of a type reference. */ @Component public class ReferenceMappingBuilder implements IMappingBuilder { private static final String REFERENCE_KEY = "reference"; private static final String TYPE = "type"; @Resource private BaseParserFactory baseParserFactory; @Override public String getKey() { return REFERENCE_KEY; } @Override public MappingTarget buildMapping(MappingNode mappingNode, ParsingContextExecution context) { Map<String, String> map = Maps.newHashMap(); for (NodeTuple tuple : mappingNode.getValue()) { String key = ParserUtils.getScalar(tuple.getKeyNode(), context); String value = ParserUtils.getScalar(tuple.getValueNode(), context); map.put(key, value); } return new MappingTarget(map.get(REFERENCE_KEY), baseParserFactory.getReferencedParser(map.get(TYPE))); } }