package alien4cloud.topology.validation;
import static alien4cloud.utils.AlienUtils.safe;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.alien4cloud.tosca.model.types.AbstractInheritableToscaType;
import org.alien4cloud.tosca.model.templates.AbstractTemplate;
import org.alien4cloud.tosca.model.templates.Topology;
import alien4cloud.topology.task.ArtifactTask;
import alien4cloud.topology.task.ArtifactTaskCode;
/**
* This validate all artifacts references are available for all nodes in the topology.
*/
@Service
public class TopologyArtifactsValidationService {
private <T extends AbstractTemplate, U extends AbstractInheritableToscaType> Stream<ArtifactTask> validateTemplate(String name, T template) {
return safe(template.getArtifacts()).entrySet().stream().filter(artifactEntry -> StringUtils.isBlank(artifactEntry.getValue().getArtifactRef()))
.map(artifactEntry -> new ArtifactTask(name, artifactEntry.getKey(), ArtifactTaskCode.MISSING));
}
public List<ArtifactTask> validate(Topology topology) {
// First validate all artifact for all node template then validate artifact for all relationships
return Stream.concat(
safe(topology.getNodeTemplates()).values().stream().flatMap(nodeTemplate -> validateTemplate(nodeTemplate.getName(), nodeTemplate)),
safe(topology.getNodeTemplates()).values().stream().flatMap(nodeTemplate -> safe(nodeTemplate.getRelationships()).entrySet().stream())
.flatMap(relationshipTemplateEntry -> validateTemplate(relationshipTemplateEntry.getKey(), relationshipTemplateEntry.getValue())))
.collect(Collectors.toList());
}
}