in taverna-graph-model/src/main/java/org/apache/taverna/workbench/models/graph/GraphController.java [667:822]
private GraphNode generateProcessorNode(Processor processor, String prefix,
int depth) {
// Blatantly ignoring any other activities for now
ProcessorBinding processorBinding = scufl2Tools
.processorBindingForProcessor(processor, profile);
Activity activity = processorBinding.getBoundActivity();
@SuppressWarnings("unused")
URI activityType = activity.getType();
GraphNode node = createGraphNode();
node.setId(prefix + processor.getName());
if (getPortStyle().equals(PortStyle.BLOB)) {
node.setLabel("");
node.setSize(new Dimension((int) (0.3f * 72), (int) (0.3f * 72)));
} else
node.setLabel(processor.getName());
node.setShape(getPortStyle(processor).processorShape());
node.setColor(Color.BLACK);
node.setLineStyle(LineStyle.SOLID);
// if (activityType.equals(URI.create(NonExecutableActivity.URI))) {
// if (activityType.equals(URI.create(DisabledActivity.URI))) {
// node.setFillColor(GraphColorManager
// .getFillColor(((DisabledActivity) activity)
// .getActivity(), colourManager));
// } else {
// node.setFillColor(GraphColorManager
// .getFillColor(activityType, colourManager));
// }
// node.setOpacity(0.3f);
// } else
node.setFillColor(GraphColorManager.getFillColor(activity,
colourManager));
// check whether the nested workflow processors should be clickable or
// not, if top level workflow then should be clickable regardless
if (depth == 0) {
node.setInteractive(true);
node.setWorkflowBean(processor);
}
if (interactive) {
node.setInteractive(true);
node.setWorkflowBean(processor);
}
if (scufl2Tools.containsNestedWorkflow(processor, profile)
&& expandNestedDataflow(activity)) {
Workflow subDataflow = scufl2Tools.nestedWorkflowForProcessor(
processor, profile);
NamedSet<InputWorkflowPort> inputWorkflowPorts = subDataflow
.getInputPorts();
for (InputActivityPort inputActivityPort : activity.getInputPorts()) {
InputWorkflowPort inputWorkflowPort = inputWorkflowPorts
.getByName(inputActivityPort.getName());
InputProcessorPort inputProcessorPort = scufl2Tools
.processorPortBindingForPort(inputActivityPort, profile)
.getBoundProcessorPort();
nestedWorkflowPorts.put(inputProcessorPort, inputWorkflowPort);
workflowPortToProcessorPort.put(inputWorkflowPort,
inputProcessorPort);
processorBinding.getInputPortBindings();
}
NamedSet<OutputWorkflowPort> outputWorkflowPorts = subDataflow
.getOutputPorts();
for (OutputActivityPort outputActivityPort : activity
.getOutputPorts()) {
OutputWorkflowPort outputWorkflowPort = outputWorkflowPorts
.getByName(outputActivityPort.getName());
OutputProcessorPort outputProcessorPort = scufl2Tools
.processorPortBindingForPort(outputActivityPort,
profile).getBoundProcessorPort();
nestedWorkflowPorts
.put(outputProcessorPort, outputWorkflowPort);
workflowPortToProcessorPort.put(outputWorkflowPort,
outputProcessorPort);
}
Graph subGraph = generateGraph(subDataflow, prefix,
processor.getName(), depth + 1);
// TODO why does this depth matter?
if (depth == 0)
subGraph.setWorkflowBean(processor);
if (interactive)
subGraph.setWorkflowBean(processor);
node.setGraph(subGraph);
node.setExpanded(true);
workflowToGraph.put(processor, subGraph);
} else {
graphElementMap.put(node.getId(), node);
workflowToGraph.put(processor, node);
}
NamedSet<InputProcessorPort> inputPorts = processor.getInputPorts();
if (inputPorts.size() == 0) {
GraphNode portNode = createGraphNode();
portNode.setShape(Shape.BOX);
portNode.setColor(Color.BLACK);
portNode.setFillColor(node.getFillColor());
portNode.setLineStyle(LineStyle.SOLID);
node.addSinkNode(portNode);
} else
for (InputPort inputPort : inputPorts) {
GraphNode portNode = createGraphNode();
portNode.setId("i" + inputPort.getName().replaceAll("\\.", ""));
portNode.setLabel(inputPort.getName());
portNode.setShape(Shape.BOX);
portNode.setColor(Color.BLACK);
portNode.setFillColor(node.getFillColor());
portNode.setLineStyle(LineStyle.SOLID);
if (depth == 0)
portNode.setWorkflowBean(inputPort);
if (interactive)
portNode.setWorkflowBean(inputPort);
if (!node.isExpanded())
workflowToGraph.put(inputPort, portNode);
ports.put(inputPort, portNode);
node.addSinkNode(portNode);
graphElementMap.put(portNode.getId(), portNode);
// portToActivity.put(inputPort, activity);
portToProcessor.put(inputPort, processor);
}
NamedSet<OutputProcessorPort> outputPorts = processor.getOutputPorts();
if (outputPorts.size() == 0) {
GraphNode portNode = createGraphNode();
portNode.setShape(Shape.BOX);
portNode.setColor(Color.BLACK);
portNode.setFillColor(node.getFillColor());
portNode.setLineStyle(LineStyle.SOLID);
node.addSourceNode(portNode);
} else
for (OutputPort outputPort : outputPorts) {
GraphNode portNode = createGraphNode();
portNode.setId("o" + outputPort.getName().replaceAll("\\.", ""));
portNode.setLabel(outputPort.getName());
portNode.setShape(Shape.BOX);
portNode.setColor(Color.BLACK);
portNode.setFillColor(node.getFillColor());
portNode.setLineStyle(LineStyle.SOLID);
if (depth == 0)
portNode.setWorkflowBean(outputPort);
if (interactive)
portNode.setWorkflowBean(outputPort);
if (!node.isExpanded())
workflowToGraph.put(outputPort, portNode);
ports.put(outputPort, portNode);
node.addSourceNode(portNode);
graphElementMap.put(portNode.getId(), portNode);
// portToActivity.put(outputPort, activity);
portToProcessor.put(outputPort, processor);
}
return node;
}