protected String bundleString()

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();
	}