public void initComponents()

in taverna-reference-ui/src/main/java/org/apache/taverna/reference/ui/WorkflowLaunchWindow.java [231:423]


	public void initComponents() {
		workflowPart = new JPanel(new GridLayout(3, 1));
		portsPart = new JPanel(new BorderLayout());

		createWorkflowGraphic = createWorkflowGraphic(workflow);
		createWorkflowGraphic.setBorder(new TitledBorder("Diagram"));

		workflowPart.add(new JScrollPane(createWorkflowGraphic));

		workflowDescriptionArea = new DialogTextArea(NO_WORKFLOW_DESCRIPTION, 5, 40);
		workflowDescriptionArea.setBorder(new TitledBorder("Workflow description"));
		workflowDescriptionArea.setEditable(false);
		workflowDescriptionArea.setLineWrap(true);
		workflowDescriptionArea.setWrapStyleWord(true);

		workflowPart.add(new JScrollPane(workflowDescriptionArea));

		workflowAuthorArea = new DialogTextArea(NO_WORKFLOW_AUTHOR, 1, 40);
		workflowAuthorArea.setBorder(new TitledBorder("Workflow author"));
		workflowAuthorArea.setEditable(false);
		workflowAuthorArea.setLineWrap(true);
		workflowAuthorArea.setWrapStyleWord(true);

		workflowPart.add(new JScrollPane(workflowAuthorArea));

		launchAction = new AbstractAction(LAUNCH_WORKFLOW, launchIcon) {
			@Override
			public void actionPerformed(ActionEvent ae) {
				// First of all - is the workflow valid?
				// TODO convert to Scufl2 validation

				// if (!CheckWorkflowStatus.checkWorkflow(dataflowOriginal, workbench, editManager,
				// fileManager, reportManager)) {
				// setVisible(false);
				// return;
				// }

				/*
				 * Check if user had entered input values for all input ports -
				 * otherwise there is no point in attempting to run the workflow
				 */
				for (InputWorkflowPort input : workflow.getInputPorts()) {
					RegistrationPanel registrationPanel = inputPanelMap.get(input.getName());
					Object userInput = registrationPanel.getUserInput();
					if (userInput == null) {
						showMessageDialog(
								WorkflowLaunchWindow.this,
								"You have not provided input values for all workflow inputs",
								"Workflow input value error", ERROR_MESSAGE);
						// exit
						return;
					}
				}
				setState(ICONIFIED);

				try {
					Bundle inputDataBundle = createInputDataBundle();
					handleLaunch(inputDataBundle);
				} catch (IOException e) {
					showMessageDialog(WorkflowLaunchWindow.this,
							"An error occurred while creating input values\n"
									+ e.getMessage(), "Error creating inputs",
							ERROR_MESSAGE);
					return;
				}
			}
		};

		WorkflowBundle workflowBundle = workflow.getParent();

		Model annotations = annotationsForBean(workflowBundle, workflow);
		Resource bean = annotations.getResource(uriTools.uriForBean(workflow)
				.toASCIIString());

		String title = null;
		Property titleProp = annotations
				.createProperty("http://purl.org/dc/terms/title");
		if (bean.hasProperty(titleProp))
			title = bean.getProperty(titleProp).getString();
		setWindowTitle(title);

		Property descProp = annotations
				.createProperty("http://purl.org/dc/terms/description");
		if (bean.hasProperty(descProp))
			setWorkflowDescription(bean.getProperty(descProp).getString());

		Property creatorProp = annotations
				.createProperty("http://purl.org/dc/elements/1.1/creator");
		if (bean.hasProperty(creatorProp))
			setWorkflowAuthor(bean.getProperty(creatorProp).getString());

		Action useExamplesAction = new AbstractAction("Use examples", addTextIcon) {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				List<InputWorkflowPort> inputPorts = new ArrayList<>(
						workflow.getInputPorts());
				/*
				 * Create tabs for input ports (but only for the one that are
				 * connected!)
				 */
				for (InputWorkflowPort inputPort : inputPorts) {
					RegistrationPanel rp = inputPanelMap.get(inputPort
							.getName());
					Object example = rp.getExample();
					if (example != null && inputPort.getDepth() == 0
							&& rp.getValue() == null)
						rp.setValue(example);
				}
			}
		};

		JButton useExamplesButton = new JButton(useExamplesAction);
		useExamplesButton
				.setToolTipText("Use the example value (if any) for ports that you have not set a value for");
		// Construct tool bar
		JToolBar toolBar = new JToolBar();
		toolBar.setFloatable(false);
		toolBar.add(useExamplesButton);
		toolBar.add(new JButton(launchAction));
		toolBar.add(new JButton(new AbstractAction("Cancel", closeIcon) {
			@Override
			public void actionPerformed(ActionEvent e) {
				handleCancel();
			}
		}));

		JToolBar loadButtonsBar = new JToolBar();
		loadButtonsBar.setFloatable(false);
		for (ReferenceActionSPI spi : referenceActionSPIs) {
			ReferenceActionSPI action = (ReferenceActionSPI) spi.getAction();
			action.setInputPanelMap(inputPanelMap);
			JButton loadButton = new JButton((AbstractAction) action);
			loadButtonsBar.add(loadButton);
		}

		JPanel toolBarPanel = new JPanel(new BorderLayout());
		toolBarPanel.add(loadButtonsBar, WEST);
		toolBarPanel.add(toolBar, EAST);
		toolBarPanel.setBorder(new EmptyBorder(5, 10, 5, 20));
		portsPart.add(toolBarPanel, SOUTH);

		/*
		 * Construct tab container - tabs will be populated based on the wf
		 * input ports
		 */
		tabsPane = new JTabbedPane();

		List<InputWorkflowPort> inputPorts = new ArrayList<>(workflow.getInputPorts());
		Set<String> inputNames = new HashSet<>();

		/*
		 * Create tabs for input ports (but only for the one that are
		 * connected!)
		 */
		for (InputWorkflowPort inputPort : inputPorts) {
			// Is this input port connected to anything?
			if (scufl2Tools.datalinksFrom(inputPort).isEmpty())
			    continue;
			String portDescription = "";
			String portExample = "";

			annotations = annotationsForBean(workflowBundle, inputPort);
			bean = annotations.getResource(uriTools.uriForBean(inputPort)
					.toASCIIString());
			if (bean.hasProperty(descProp))
				portDescription = bean.getProperty(descProp).getString();
			Property exDataProp = annotations
					.createProperty("http://biocatalogue.org/attribute/exampleData");
			if (bean.hasProperty(exDataProp))
				portExample = bean.getProperty(exDataProp).getString();

			// add tabs for wf input ports
			String name = inputPort.getName();
			inputNames.add(name);
			addInput(name, inputPort.getDepth(), portDescription, portExample);
		}

		portsPart.add(tabsPane, CENTER);

		workflowPart.setPreferredSize(new Dimension(300, 500));
		portsPart.setPreferredSize(new Dimension(650, 500));

		overallPanel = new JPanel();
		overallPanel.setLayout(new BoxLayout(overallPanel, X_AXIS));

		overallPanel.add(workflowPart);
		overallPanel.add(portsPart);

		setLayout(new BorderLayout());
		getContentPane().add(new JScrollPane(overallPanel), CENTER);

		pack();
	}