private JScrollPane createWorkflowComponentPreviewTab()

in taverna-perspective-myexperiment/src/main/java/org/apache/taverna/ui/perspectives/myexperiment/ResourcePreviewFactory.java [895:1073]


  private JScrollPane createWorkflowComponentPreviewTab(Workflow w) {
	final JPanel jpWorkflowComponentsTabContent = createStandardTabContentPanel();

	if (!w.isTavernaWorkflow()) {
	  // can only display components for Taverna 1 workflows at the moment
	  JLabel lNotSupported = new JLabel("<html>This is a "
		  + w.getVisibleType()
		  + " workflow;<br>myExperiment can only display Taverna workflow components at the moment.</html>");
	  lNotSupported.setFont(lNotSupported.getFont().deriveFont(Font.ITALIC));
	  lNotSupported.setForeground(Color.GRAY);
	  jpWorkflowComponentsTabContent.add(lNotSupported);
	} else if (!w.isDownloadAllowed()) {
	  // can display components for workflow of this type, but current user is
	  // not
	  // allowed to download this workflow - and, hence, to view its components
	  JLabel lNotAuthorized = new JLabel("You are not authorised to download this workflow, "
		  + "and hence component preview is not available.");
	  lNotAuthorized.setFont(lNotAuthorized.getFont().deriveFont(Font.ITALIC));
	  lNotAuthorized.setForeground(Color.GRAY);
	  jpWorkflowComponentsTabContent.add(lNotAuthorized);
	} else {
	  // can display the components

	  // storage for table column names
	  Vector<String> vColumnNames = new Vector<String>();

	  // ** inputs **
	  vColumnNames.clear();
	  vColumnNames.addAll(Arrays.asList(new String[] { "Name", "Description" }));

	  Vector<Vector<String>> vInputsData = new Vector<Vector<String>>();
	  ArrayList<HashMap<String, String>> inputs = w.getComponents().get("inputs");
	  if (inputs != null) {
		for (HashMap<String, String> curInput : inputs) {
		  Vector<String> vCurData = new Vector<String>();
		  vCurData.add(curInput.get("name"));
		  vCurData.add(curInput.get("description"));

		  vInputsData.add(vCurData);
		}
	  }

	  JTable jtInputs = new JTable(vInputsData, vColumnNames);
	  jtInputs.getColumnModel().getColumn(0).setPreferredWidth(100);
	  jtInputs.getTableHeader().setFont(jtInputs.getTableHeader().getFont().deriveFont(Font.BOLD));
	  JPanel jpInputs = new JPanel();
	  jpInputs.setLayout(new BorderLayout());
	  jpInputs.add(jtInputs.getTableHeader(), BorderLayout.NORTH);
	  jpInputs.add(jtInputs, BorderLayout.CENTER);

	  JPanel jpInputsWithTitle = new JPanel();
	  jpInputsWithTitle.setBorder(BorderFactory.createEtchedBorder());
	  jpInputsWithTitle.setLayout(new BorderLayout());
	  jpInputsWithTitle.add(new ShadedLabel("Workflow input ports ("
		  + vInputsData.size() + ")", ShadedLabel.BLUE, true), BorderLayout.NORTH);
	  if (vInputsData.size() > 0) {
		jpInputsWithTitle.add(jpInputs, BorderLayout.CENTER);
	  }

	  // ** processors **
	  vColumnNames.clear();
	  vColumnNames.addAll(Arrays.asList(new String[] { "Name", "Type", "Description" }));

	  Vector<Vector<String>> vProcessorsData = new Vector<Vector<String>>();
	  ArrayList<HashMap<String, String>> processors = w.getComponents().get("processors");
	  if (processors != null) {
		for (HashMap<String, String> curProcessor : processors) {
		  Vector<String> vCurData = new Vector<String>();
		  vCurData.add(curProcessor.get("name"));
		  vCurData.add(curProcessor.get("type"));
		  vCurData.add(curProcessor.get("description"));

		  vProcessorsData.add(vCurData);
		}
	  }

	  JTable jtProcessors = new JTable(vProcessorsData, vColumnNames);
	  jtProcessors.getTableHeader().setFont(jtProcessors.getTableHeader().getFont().deriveFont(Font.BOLD));
	  JPanel jpProcessors = new JPanel();
	  jpProcessors.setLayout(new BorderLayout());
	  jpProcessors.add(jtProcessors.getTableHeader(), BorderLayout.NORTH);
	  jpProcessors.add(jtProcessors, BorderLayout.CENTER);

	  JPanel jpProcessorsWithTitle = new JPanel();
	  jpProcessorsWithTitle.setBorder(BorderFactory.createEtchedBorder());
	  jpProcessorsWithTitle.setLayout(new BorderLayout());
	  jpProcessorsWithTitle.add(new ShadedLabel("Services ("
		  + vProcessorsData.size() + ")", ShadedLabel.BLUE, true), BorderLayout.NORTH);
	  if (vProcessorsData.size() > 0) {
		jpProcessorsWithTitle.add(jpProcessors, BorderLayout.CENTER);
	  }

	  // ** links **
	  vColumnNames.clear();
	  vColumnNames.addAll(Arrays.asList(new String[] { "Source", "Sink" }));

	  Vector<Vector<String>> vLinksData = new Vector<Vector<String>>();
	  ArrayList<HashMap<String, String>> links = w.getComponents().get("links");
	  if (links != null) {
		for (HashMap<String, String> curLink : links) {
		  Vector<String> vCurData = new Vector<String>();
		  vCurData.add(curLink.get("source"));
		  vCurData.add(curLink.get("sink"));

		  vLinksData.add(vCurData);
		}
	  }

	  JTable jtLinks = new JTable(vLinksData, vColumnNames);
	  jtLinks.getColumnModel().getColumn(0).setPreferredWidth(100);
	  jtLinks.getTableHeader().setFont(jtLinks.getTableHeader().getFont().deriveFont(Font.BOLD));
	  JPanel jpLinks = new JPanel();
	  jpLinks.setLayout(new BorderLayout());
	  jpLinks.add(jtLinks.getTableHeader(), BorderLayout.NORTH);
	  jpLinks.add(jtLinks, BorderLayout.CENTER);

	  JPanel jpLinksWithTitle = new JPanel();
	  jpLinksWithTitle.setBorder(BorderFactory.createEtchedBorder());
	  jpLinksWithTitle.setLayout(new BorderLayout());
	  jpLinksWithTitle.add(new ShadedLabel("Links (" + vLinksData.size() + ")", ShadedLabel.BLUE, true), BorderLayout.NORTH);
	  if (vLinksData.size() > 0) {
		jpLinksWithTitle.add(jpLinks, BorderLayout.CENTER);
	  }

	  // ** outputs **
	  vColumnNames.clear();
	  vColumnNames.addAll(Arrays.asList(new String[] { "Name", "Description" }));

	  Vector<Vector<String>> vOutputsData = new Vector<Vector<String>>();
	  ArrayList<HashMap<String, String>> outputs = w.getComponents().get("outputs");
	  if (outputs != null) {
		for (HashMap<String, String> curOutput : outputs) {
		  Vector<String> vCurData = new Vector<String>();
		  vCurData.add(curOutput.get("name"));
		  vCurData.add(curOutput.get("description"));

		  vOutputsData.add(vCurData);
		}
	  }

	  JTable jtOutputs = new JTable(vOutputsData, vColumnNames);
	  jtOutputs.getColumnModel().getColumn(0).setPreferredWidth(100);
	  jtOutputs.getTableHeader().setFont(jtOutputs.getTableHeader().getFont().deriveFont(Font.BOLD));
	  JPanel jpOutputs = new JPanel();
	  jpOutputs.setLayout(new BorderLayout());
	  jpOutputs.add(jtOutputs.getTableHeader(), BorderLayout.NORTH);
	  jpOutputs.add(jtOutputs, BorderLayout.CENTER);

	  JPanel jpOutputsWithTitle = new JPanel();
	  jpOutputsWithTitle.setBorder(BorderFactory.createEtchedBorder());
	  jpOutputsWithTitle.setLayout(new BorderLayout());
	  jpOutputsWithTitle.add(new ShadedLabel("Workflow output ports ("
		  + vOutputsData.size() + ")", ShadedLabel.BLUE, true), BorderLayout.NORTH);
	  if (vOutputsData.size() > 0) {
		jpOutputsWithTitle.add(jpOutputs, BorderLayout.CENTER);
	  }

	  // PUT EVERYTHING TOGETHER
	  jpWorkflowComponentsTabContent.setLayout(new GridBagLayout());
	  GridBagConstraints c = new GridBagConstraints();

	  c.gridx = 0;
	  c.gridy = GridBagConstraints.RELATIVE;
	  c.weightx = 1.0;
	  c.fill = GridBagConstraints.HORIZONTAL;
	  c.anchor = GridBagConstraints.NORTH;
	  jpWorkflowComponentsTabContent.add(jpInputsWithTitle, c);

	  c.insets = new Insets(10, 0, 0, 0);
	  jpWorkflowComponentsTabContent.add(jpProcessorsWithTitle, c);

	  jpWorkflowComponentsTabContent.add(jpLinksWithTitle, c);

	  c.weighty = 1.0; // ONLY FOR THE LAST ELEMENT
	  jpWorkflowComponentsTabContent.add(jpOutputsWithTitle, c);
	}

	return (wrapPreviewTabContentIntoScrollPane(jpWorkflowComponentsTabContent));
  }