private GraphNode generateProcessorNode()

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