package alien4cloud.tosca.parser.postprocess;
import static alien4cloud.utils.AlienUtils.safe;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.alien4cloud.tosca.model.types.AbstractInheritableToscaType;
import alien4cloud.tosca.model.ArchiveRoot;
import alien4cloud.tosca.parser.ParsingContextExecution;
/**
* Performs post processing for a TOSCA type:
* - Set it's archive version and name
*/
@Component
public class ToscaTypePostProcessor implements IPostProcessor<AbstractInheritableToscaType> {
@Resource
private PropertyDefinitionPostProcessor propertyDefinitionPostProcessor;
@Override
public void process(AbstractInheritableToscaType instance) {
ArchiveRoot archiveRoot = ParsingContextExecution.getRootObj();
instance.setArchiveName(archiveRoot.getArchive().getName());
instance.setArchiveVersion(archiveRoot.getArchive().getVersion());
// FIXME we had a check for element duplication cross types, is it required, do we still want/need that ?
// FIXME the real thing we may want to check is more on alien side and consider the fact that a type should not be duplicated in multiple archives.
// String previous = globalElementsMap.put(element.getKey(), parsedArchive.getContext().getFileName());
// if (previous != null) {
// parsedArchive.getContext().getParsingErrors().add(new ParsingError(ErrorCode.DUPLICATED_ELEMENT_DECLARATION,
// "Type is defined twice in archive.", null, parsedArchive.getContext().getFileName(), null, previous));
// }
safe(instance.getProperties()).entrySet().stream().forEach(propertyDefinitionPostProcessor);
}
}