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