package de.uniba.dsg.bpmnspector.common.importer; import org.jdom2.Document; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class BPMNProcess { private final Document processAsDoc; private final String baseURI; private final String namespace; private final String generatedPrefix; private final BPMNProcess parent; private final List<BPMNProcess> children = new ArrayList<>(); private final List<Document> wsdls = new ArrayList<>(); private final List<Document> xsds = new ArrayList<>(); public BPMNProcess(Document processAsDoc, String baseURI, String namespace) { this(processAsDoc, baseURI, namespace, null); } public BPMNProcess(Document processAsDoc, String baseURI, String namespace, BPMNProcess parent) { this.processAsDoc = processAsDoc; this.baseURI = baseURI; this.namespace = namespace; this.parent = parent; this.generatedPrefix = createPrefixForProcess(); } public List<BPMNProcess> getChildren() { return children; } public Document getProcessAsDoc() { return processAsDoc; } public String getBaseURI() { return baseURI; } public String getNamespace() { return namespace; } public String getGeneratedPrefix() { return generatedPrefix; } public BPMNProcess getParent() { return parent; } public List<Document> getWsdls() { return wsdls; } public List<Document> getXsds() { return xsds; } public void getAllProcessesRecursively(List<BPMNProcess> processList) { if(!processList.contains(this)) { processList.add(this); for(BPMNProcess child : this.getChildren()) { child.getAllProcessesRecursively(processList); } } } public List<BPMNProcess> findProcessByNamespace(String namespace) { List<BPMNProcess> allProcesses = new ArrayList<>(); getAllProcessesRecursively(allProcesses); return allProcesses.stream().filter( process -> process.getNamespace().equals(namespace)).collect( Collectors.toList()); } public Optional<BPMNProcess> findProcessByGeneratedPrefix(String prefix) { List<BPMNProcess> allProcesses = new ArrayList<>(); getAllProcessesRecursively(allProcesses); return allProcesses.stream().filter( process -> process.getGeneratedPrefix().equals(prefix)).findFirst(); } private String createPrefixForProcess() { return "ns"+(this.namespace+this.baseURI).hashCode(); } }