in taverna-scufl2-api/src/main/java/org/apache/taverna/scufl2/api/io/structure/StructureWriter.java [102:251]
protected String bundleString(WorkflowBundle wb) {
sb = new StringBuilder();
append("WorkflowBundle");
append(wb);
if (wb.getMainWorkflow() != null) {
newLine(1);
append("MainWorkflow");
append(wb.getMainWorkflow());
}
for (Workflow wf : sorted(wb.getWorkflows())) {
newLine(1);
append("Workflow");
append(wf);
appendPorts(2, wf);
for (Processor p : sorted(wf.getProcessors())) {
newLine(2);
append("Processor");
append(p);
appendPorts(3, p);
}
// LINKS
// We'll need to sort them afterwards
List<String> links = new ArrayList<>();
for (DataLink dl : wf.getDataLinks())
links.add(datalink(dl.getReceivesFrom()) + " -> " + datalink(dl.getSendsTo()));
Collections.sort(links);
if (!links.isEmpty()) {
newLine(2);
append("Links");
}
for (String link : links) {
newLine(3);
append(link);
}
if (!wf.getControlLinks().isEmpty()) {
newLine(2);
append("Controls");
List<ControlLink> controlLinks = new ArrayList<>(wf.getControlLinks());
Collections.sort(controlLinks);
for (ControlLink controlLink : controlLinks) {
if (!(controlLink instanceof BlockingControlLink))
// TODO
continue;
BlockingControlLink blockingControlLink = (BlockingControlLink) controlLink;
newLine(3);
append("block");
append(blockingControlLink.getBlock());
append(" until");
append(blockingControlLink.getUntilFinished());
append(" finish");
}
}
}
if (wb.getMainProfile() != null) {
newLine(1);
append("MainProfile");
append(wb.getMainProfile());
}
for (Profile p : sorted(wb.getProfiles())) {
newLine(1);
append("Profile");
append(p);
for (Activity a : sorted(p.getActivities())) {
newLine(2);
append("Activity");
append(a);
newLine(3);
append("Type");
append(a.getType());
appendPorts(3, a);
}
for (ProcessorBinding pb : p.getProcessorBindings()) {
newLine(2);
append("ProcessorBinding");
append(pb);
newLine(3);
append("Activity");
append(pb.getBoundActivity());
newLine(3);
append("Processor");
String name = " '" + escapeName(pb.getBoundProcessor().getParent().getName());
name = name + ":" + escapeName(pb.getBoundProcessor().getName()) + "'";
append(name);
List<String> links = new ArrayList<String>();
for (ProcessorInputPortBinding ip : pb.getInputPortBindings())
links.add("'" + escapeName(ip.getBoundProcessorPort().getName()) + "' -> '"
+ escapeName(ip.getBoundActivityPort().getName()) + "'");
Collections.sort(links);
if (!links.isEmpty()) {
newLine(3);
append("InputPortBindings");
}
for (String link : links) {
newLine(4);
append(link);
}
links.clear();
for (ProcessorOutputPortBinding ip : pb.getOutputPortBindings())
// Note: opposite direction as for ProcessorInputPortBinding
links.add("'" + escapeName(ip.getBoundActivityPort().getName()) + "' -> '"
+ escapeName(ip.getBoundProcessorPort().getName()) + "'");
Collections.sort(links);
if (!links.isEmpty()) {
newLine(3);
append("OutputPortBindings");
}
for (String link : links) {
newLine(4);
append(link);
}
}
for (Configuration config : p.getConfigurations()) {
newLine(2);
append("Configuration");
append(config);
newLine(3);
if (config.getType() != null) {
append("Type");
append(config.getType());
}
newLine(3);
append("Configures");
if (config.getConfigures() instanceof Named) {
Named c = (Named) config.getConfigures();
String cName = "'" + escapeName(c.getClass().getSimpleName().toLowerCase());
cName = cName + "/" + escapeName(c.getName()) + "'";
append(" " + cName);
} else {
URI configuredURI = uriTools.relativeUriForBean(config.getConfigures(), p);
append(" '" + configuredURI.toASCIIString() + "'");
}
newLine(4);
append(config.getJson().toString());
}
}
append("\n");
//System.out.println(sb);
return sb.toString();
}