private void generateUserPreviewContent()

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


  private void generateUserPreviewContent(User u, JPanel panelToPopulate, EventListener eventHandler) {
	if (u != null) {
	  try {
		// === Render user details in HTML format ===
		StringBuffer content = new StringBuffer();
		content.append("<div class='outer'>");
		content.append("<div class='user'>");

		content.append("<br>");

		content.append("<p class='name'>");
		content.append("User: <a href=preview:" + Resource.USER + ":"
			+ u.getURI() + "'>" + u.getName() + "</a>");
		content.append("</p>");

		content.append("<br>");

		content.append("<p class='info'>");
		String strLocation;
		if (u.getCity().length() == 0 && u.getCountry().length() == 0)
		  strLocation = "<span class='none_text'>Not specified</span>";
		else
		  strLocation = u.getCity()
			  + (u.getCity().length() == 0 || u.getCountry().length() == 0 ? "" : ", ")
			  + u.getCountry();
		content.append("<b>Location:</b> " + strLocation + "<br>");
		content.append("<b>Joined at: </b> " + u.getCreatedAt() + "<br>");
		content.append("<b>Last seen at: </b> " + u.getUpdatedAt() + "<br>");
		content.append("</p>");

		content.append("<br>");

		content.append("<a href='" + u.getAvatarResource() + "'>");
		content.append("<img class='avatar' src='" + u.getAvatarResource()
			+ "'></img>");
		content.append("</a>");

		content.append("<br>");
		content.append("<br>");

		if (!u.getDescription().equals("")) {
		  // HACK: the way JAVA renders html causes styling not to be inherited;
		  // hence need to
		  // remove any nested <p> or <div> tags to get a proper layout
		  content.append("<p class='desc'>"
			  + Util.stripHTML(u.getDescription()) + "<br><br></p>");
		} else {
		  content.append("<span class='none_text'>No description</span>");
		}

		content.append("<p class='contact_details_header'>Contact Details</p>");
		content.append("<p class='contact_details'>");
		content.append("<b>Email: </b>"
			+ (u.getEmail().length() == 0 ? "<span class='none_text'>Not specified</span>" : u.getEmail())
			+ "<br>");
		content.append("<b>Website: </b>"
			+ (u.getWebsite().length() == 0 ? "<span class='none_text'>Not specified</span>" : u.getWebsite()));
		content.append("</p>");

		content.append("</div>");
		content.append("</div>");

		HTMLEditorKit kit = new StyledHTMLEditorKit(pluginMainComponent.getStyleSheet());
		HTMLDocument doc = (HTMLDocument) (kit.createDefaultDocument());
		doc.insertAfterStart(doc.getRootElements()[0].getElement(0), content.toString());

		// === Now render user's items as Swing components ===
		// .. WORKFLOWS ..
		JPanel jpWorkflowsTabContent = new JPanel();
		jpWorkflowsTabContent.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
		jpWorkflowsTabContent.setLayout(new BoxLayout(jpWorkflowsTabContent, BoxLayout.Y_AXIS));

		// iterate through all workflows and add all to the panel
		Iterator<HashMap<String, String>> iWorkflows = u.getWorkflows().iterator();
		while (iWorkflows.hasNext()) {
		  HashMap<String, String> hmCurWF = iWorkflows.next();
		  jpWorkflowsTabContent.add(new JClickableLabel(hmCurWF.get("name"), "preview:"
			  + Resource.WORKFLOW + ":" + hmCurWF.get("uri"), pluginMainComponent.getPreviewBrowser(), this.iconWorkflow));
		}

		// .. FILES ..
		JPanel jpFilesTabContent = new JPanel();
		jpFilesTabContent.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
		jpFilesTabContent.setLayout(new BoxLayout(jpFilesTabContent, BoxLayout.Y_AXIS));

		// iterate through all files and add all to the panel
		Iterator<HashMap<String, String>> iFiles = u.getFiles().iterator();
		while (iFiles.hasNext()) {
		  HashMap<String, String> hmCurFile = iFiles.next();
		  jpFilesTabContent.add(new JClickableLabel(hmCurFile.get("name"), "preview:"
			  + Resource.FILE + ":" + hmCurFile.get("uri"), pluginMainComponent.getPreviewBrowser(), this.iconFile));
		}

		// .. PACKS ..
		JPanel jpPacksTabContent = new JPanel();
		jpPacksTabContent.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
		jpPacksTabContent.setLayout(new BoxLayout(jpPacksTabContent, BoxLayout.Y_AXIS));

		// iterate through all packs and add all to the panel
		Iterator<HashMap<String, String>> iPacks = u.getPacks().iterator();
		while (iPacks.hasNext()) {
		  HashMap<String, String> hmCurPack = iPacks.next();
		  jpPacksTabContent.add(new JClickableLabel(hmCurPack.get("name"), "preview:"
			  + Resource.PACK + ":" + hmCurPack.get("uri"), pluginMainComponent.getPreviewBrowser(), this.iconPack));
		}

		// .. FRIENDS ..
		JPanel jpFriendsTabContent = new JPanel();
		jpFriendsTabContent.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
		jpFriendsTabContent.setLayout(new BoxLayout(jpFriendsTabContent, BoxLayout.Y_AXIS));

		// iterate through all friends and add all to the panel
		Iterator<HashMap<String, String>> iFriends = u.getFriends().iterator();
		while (iFriends.hasNext()) {
		  HashMap<String, String> hmCurFriend = iFriends.next();
		  jpFriendsTabContent.add(new JClickableLabel(hmCurFriend.get("name"), "preview:"
			  + Resource.USER + ":" + hmCurFriend.get("uri"), pluginMainComponent.getPreviewBrowser(), this.iconUser));
		}

		// .. GROUPS ..
		JPanel jpGroupsTabContent = new JPanel();
		jpGroupsTabContent.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10));
		jpGroupsTabContent.setLayout(new BoxLayout(jpGroupsTabContent, BoxLayout.Y_AXIS));

		// iterate through all groups and add all to the panel
		Iterator<HashMap<String, String>> iGroups = u.getGroups().iterator();
		while (iGroups.hasNext()) {
		  HashMap<String, String> hmCurGroup = iGroups.next();
		  jpGroupsTabContent.add(new JClickableLabel(hmCurGroup.get("name"), "preview:"
			  + Resource.GROUP + ":" + hmCurGroup.get("uri"), pluginMainComponent.getPreviewBrowser(), this.iconGroup));
		}

		// .. WRAP EVERY TAB content into it's own scroll pane ..
		Dimension dPreferredTabSize = new Dimension(ResourcePreviewBrowser.PREFERRED_WIDTH - 50, PREFERRED_LOWER_TABBED_PANE_HEIGHT);

		JScrollPane spWorkflowsTab = new JScrollPane(jpWorkflowsTabContent);
		spWorkflowsTab.setBorder(BorderFactory.createEmptyBorder());
		spWorkflowsTab.setPreferredSize(dPreferredTabSize);
		spWorkflowsTab.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL);

		JScrollPane spFilesTab = new JScrollPane(jpFilesTabContent);
		spFilesTab.setBorder(BorderFactory.createEmptyBorder());
		spFilesTab.setPreferredSize(dPreferredTabSize);
		spFilesTab.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL);

		JScrollPane spPacksTab = new JScrollPane(jpPacksTabContent);
		spPacksTab.setBorder(BorderFactory.createEmptyBorder());
		spPacksTab.setPreferredSize(dPreferredTabSize);
		spPacksTab.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL);

		JScrollPane spFriendsTab = new JScrollPane(jpFriendsTabContent);
		spFriendsTab.setBorder(BorderFactory.createEmptyBorder());
		spFriendsTab.setPreferredSize(dPreferredTabSize);
		spFriendsTab.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL);

		JScrollPane spGroupsTab = new JScrollPane(jpGroupsTabContent);
		spGroupsTab.setBorder(BorderFactory.createEmptyBorder());
		spGroupsTab.setPreferredSize(dPreferredTabSize);
		spGroupsTab.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL);

		// .. ASSEMBLE ALL TABS together
		JTabbedPane tpTabbedItems = new JTabbedPane();
		tpTabbedItems.addTab("Workflows (" + u.getWorkflows().size() + ")", spWorkflowsTab);
		tpTabbedItems.addTab("Files (" + u.getFiles().size() + ")", spFilesTab);
		tpTabbedItems.addTab("Packs (" + u.getPacks().size() + ")", spPacksTab);
		tpTabbedItems.addTab("Friends (" + u.getFriends().size() + ")", spFriendsTab);
		tpTabbedItems.addTab("Groups (" + u.getGroups().size() + ")", spGroupsTab);

		// === PUT EVERYTHING TOGETHER ===
		JTextPane tpUserPreview = new JTextPane();
		tpUserPreview.setEditable(false);
		tpUserPreview.setEditorKit(kit);
		tpUserPreview.setDocument(doc);
		tpUserPreview.addHyperlinkListener((HyperlinkListener) eventHandler);

		JPanel jpFullUserPreview = new JPanel();
		jpFullUserPreview.setBackground(Color.WHITE); // white background for
		// the whole user preview
		// panel
		jpFullUserPreview.setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();

		c.gridx = GridBagConstraints.REMAINDER;
		c.gridy = 0;
		c.weighty = 0; // will not change size when the window is resized
		jpFullUserPreview.add(tpUserPreview, c);

		c.gridx = GridBagConstraints.REMAINDER;
		c.gridy = 1;
		c.weighty = 1; // will grow in size when the window is resized..
		c.fill = GridBagConstraints.VERTICAL; // ..and fill all available space
		// vertically
		c.insets = new Insets(20, 0, 5, 0); // a bit of margin at the top &
		// bottom
		jpFullUserPreview.add(tpTabbedItems, c);

		// POPULATE THE GIVEN PANEL
		panelToPopulate.setLayout(new BorderLayout());
		panelToPopulate.add(jpFullUserPreview, BorderLayout.CENTER);

		// this.statusLabel.setText("User information found. Last fetched: " +
		// new Date().toString());

		// this.clearButton.setEnabled(true);
		// this.refreshButton.setEnabled(true);
		// this.loadButton.setEnabled(true);
		// this.importButton.setEnabled(true);
	  } catch (Exception e) {
		logger.error("Failed to populate Workflow Preview pane", e);
	  }
	} else {
	  // statusLabel.setText("Could not find information for workflow ID: " +
	  // currentWorkflowId);
	  // clearContentTextPane();
	  // disableButtons();
	}
  }