http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/HistoryBrowserTabContentPanel.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/HistoryBrowserTabContentPanel.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/HistoryBrowserTabContentPanel.java deleted file mode 100644 index 3dfd2db..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/HistoryBrowserTabContentPanel.java +++ /dev/null @@ -1,541 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.BoxLayout; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.ScrollPaneConstants; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.border.Border; - -import net.sf.taverna.t2.lang.ui.ShadedLabel; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Base64; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.MyExperimentClient; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Resource; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Tag; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Util; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.SearchEngine.QuerySearchInstance; -import net.sf.taverna.t2.workbench.icons.WorkbenchIcons; - -import org.apache.log4j.Logger; - -/** - * @author Sergejs Aleksejevs, Emmanuel Tagarira - */ -public class HistoryBrowserTabContentPanel extends JPanel implements ActionListener { - // CONSTANTS - public static final int DOWNLOADED_ITEMS_HISTORY_LENGTH = 50; - public static final int OPENED_ITEMS_HISTORY_LENGTH = 50; - public static final int UPLOADED_ITEMS_HISTORY_LENGTH = 50; - public static final int COMMENTED_ON_ITEMS_HISTORY_LENGTH = 50; - - public static final int PREVIEWED_ITEMS_HISTORY = 0; - public static final int DOWNLOADED_ITEMS_HISTORY = 1; - public static final int OPENED_ITEMS_HISTORY = 2; - public static final int UPLOADED_ITEMS_HISTORY = 4; - public static final int COMMENTED_ON_ITEMS_HISTORY = 3; - - private final MainComponent pluginMainComponent; - private final MyExperimentClient myExperimentClient; - private final Logger logger; - - // STORAGE - private ArrayList<Resource> lDownloadedItems; - private ArrayList<Resource> lOpenedItems; - private ArrayList<Resource> lUploadedItems; - private ArrayList<Resource> lCommentedOnItems; - - // COMPONENTS - private JPanel jpPreviewHistory; - private JPanel jpSearchHistory; - private JPanel jpTagSearchHistory; - private JPanel jpDownloadedItemsHistory; - private JPanel jpOpenedItemsHistory; - private JPanel jpUploadedItemsHistory; - private JPanel jpCommentedOnHistory; - private JSplitPane spMain; - private JClickableLabel jclPreviewHistory; - private JClickableLabel jclSearchHistory; - private JClickableLabel jclTagSearchHistory; - private JClickableLabel jclDownloadedItemsHistory; - private JClickableLabel jclOpenedItemsHistory; - private JClickableLabel jclUploadedItemsHistory; - private JClickableLabel jclCommentedOnHistory; - private JPanel jpPreviewHistoryBox; - private JPanel jpSearchHistoryBox; - private JPanel jpTagSearchHistoryBox; - private JPanel jpDownloadedItemsHistoryBox; - private JPanel jpOpenedItemsHistoryBox; - private JPanel jpUploadedItemsHistoryBox; - private JPanel jpCommentedOnHistoryBox; - - @SuppressWarnings("unchecked") - public HistoryBrowserTabContentPanel(MainComponent component, MyExperimentClient client, Logger logger) { - super(); - - // set main variables to ensure access to myExperiment, logger and the parent component - this.pluginMainComponent = component; - this.myExperimentClient = client; - this.logger = logger; - - // initialise downloaded items history - String strDownloadedItemsHistory = (String) myExperimentClient.getSettings().get(MyExperimentClient.INI_DOWNLOADED_ITEMS_HISTORY); - if (strDownloadedItemsHistory != null) { - Object oDownloadedItemsHistory = Base64.decodeToObject(strDownloadedItemsHistory); - this.lDownloadedItems = (ArrayList<Resource>) oDownloadedItemsHistory; - } else { - this.lDownloadedItems = new ArrayList<Resource>(); - } - - // initialise opened items history - String strOpenedItemsHistory = (String) myExperimentClient.getSettings().get(MyExperimentClient.INI_OPENED_ITEMS_HISTORY); - if (strOpenedItemsHistory != null) { - Object oOpenedItemsHistory = Base64.decodeToObject(strOpenedItemsHistory); - this.lOpenedItems = (ArrayList<Resource>) oOpenedItemsHistory; - } else { - this.lOpenedItems = new ArrayList<Resource>(); - } - - // initialise uploaded items history - String strUploadedItemsHistory = (String) myExperimentClient.getSettings().get(MyExperimentClient.INI_UPLOADED_ITEMS_HISTORY); - if (strUploadedItemsHistory != null) { - Object oUploadedItemsHistory = Base64.decodeToObject(strUploadedItemsHistory); - this.lUploadedItems = (ArrayList<Resource>) oUploadedItemsHistory; - } else { - this.lUploadedItems = new ArrayList<Resource>(); - } - - // initialise history of the items that were commented on - String strCommentedItemsHistory = (String) myExperimentClient.getSettings().get(MyExperimentClient.INI_COMMENTED_ITEMS_HISTORY); - if (strCommentedItemsHistory != null) { - Object oCommentedItemsHistory = Base64.decodeToObject(strCommentedItemsHistory); - this.lCommentedOnItems = (ArrayList<Resource>) oCommentedItemsHistory; - } else { - this.lCommentedOnItems = new ArrayList<Resource>(); - } - - this.initialiseUI(); - this.refreshAllData(); - } - - private void confirmHistoryDelete(final int id, String strBoxTitle) { - if (JOptionPane.showConfirmDialog(null, "This will the " - + strBoxTitle.toLowerCase() + " list.\nDo you want to proceed?", "myExperiment Plugin - Confirmation Required", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - switch (id) { - case 1: - pluginMainComponent.getPreviewBrowser().clearPreviewHistory(); - break; - case 2: - pluginMainComponent.getSearchTab().getSearchHistory().clear(); - pluginMainComponent.getSearchTab().updateSearchHistory(); - break; - case 3: - pluginMainComponent.getTagBrowserTab().getTagSearchHistory().clear(); - break; - case 4: - clearDownloadedItemsHistory(); - break; - case 5: - clearOpenedItemsHistory(); - break; - case 6: - clearCommentedOnItemsHistory(); - break; - case 7: - clearUploadedItemsHistory(); - break; - } - refreshAllData(); - } - } - - private JPanel addSpecifiedPanel(final int id, final String strBoxTitle, JPanel jPanel) { - JPanel jpTemp = new JPanel(); - jpTemp.setLayout(new BorderLayout()); - jpTemp.add(generateContentBox(strBoxTitle, jPanel), BorderLayout.CENTER); - JButton bClear = new JButton("Clear " + strBoxTitle, WorkbenchIcons.deleteIcon); - bClear.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - confirmHistoryDelete(id, strBoxTitle); - } - }); - - jpTemp.add(bClear, BorderLayout.SOUTH); - jpTemp.setMinimumSize(new Dimension(500, 0)); - return jpTemp; - } - - private void initialiseUI() { - // create helper text - ShadedLabel lHelper = new ShadedLabel("All history sections are local to myExperiment plugin usage." - + " Detailed history of your actions on myExperiment is available in your profile on myExperiment.", ShadedLabel.BLUE); - - // create all individual content holder panels - this.jpPreviewHistory = new JPanel(); - this.jpTagSearchHistory = new JPanel(); - this.jpSearchHistory = new JPanel(); - this.jpDownloadedItemsHistory = new JPanel(); - this.jpOpenedItemsHistory = new JPanel(); - this.jpUploadedItemsHistory = new JPanel(); - this.jpCommentedOnHistory = new JPanel(); - - // create sidebar - JPanel jpSidebar = new JPanel(); - jpSidebar.setLayout(new BoxLayout(jpSidebar, BoxLayout.Y_AXIS)); - Border border = BorderFactory.createEmptyBorder(5, 3, 10, 3); - jclPreviewHistory = new JClickableLabel("Previewed Items", "preview_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclPreviewHistory.setBorder(border); - jpSidebar.add(jclPreviewHistory); - - jclSearchHistory = new JClickableLabel("Search History", "search_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclSearchHistory.setBorder(border); - jpSidebar.add(jclSearchHistory); - - jclTagSearchHistory = new JClickableLabel("Tag Searches Made", "tag_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclTagSearchHistory.setBorder(border); - jpSidebar.add(jclTagSearchHistory); - - jclDownloadedItemsHistory = new JClickableLabel("Downloaded Items", "downloads_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclDownloadedItemsHistory.setBorder(border); - jpSidebar.add(jclDownloadedItemsHistory); - - jclOpenedItemsHistory = new JClickableLabel("Opened Items", "opened_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclOpenedItemsHistory.setBorder(border); - jpSidebar.add(jclOpenedItemsHistory); - - jclUploadedItemsHistory = new JClickableLabel("Updated Items", "uploaded_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclUploadedItemsHistory.setBorder(border); - jpSidebar.add(jclUploadedItemsHistory); - - jclCommentedOnHistory = new JClickableLabel("Items Commented On", "comments_history", this, WorkbenchIcons.editIcon, SwingConstants.LEFT, "tooltip"); - jclCommentedOnHistory.setBorder(border); - jpSidebar.add(jclCommentedOnHistory); - - JPanel jpSidebarContainer = new JPanel(); - jpSidebarContainer.add(jpSidebar, BorderLayout.NORTH); - JScrollPane spSidebar = new JScrollPane(jpSidebarContainer); - spSidebar.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL); - spSidebar.setMinimumSize(new Dimension(245, 0)); - spSidebar.setMaximumSize(new Dimension(300, 0)); - - // create standard boxes for each content holder panels - // only one of these will hold the right hand side of spMain at any given time - // arg 1: is the ID, which will be used by confirmHistoryDelete() to decide - // how to delete the history item - jpPreviewHistoryBox = addSpecifiedPanel(1, "Items you have previewed", jpPreviewHistory); - jpSearchHistoryBox = addSpecifiedPanel(2, "Terms you have searched for", jpSearchHistory); - jpTagSearchHistoryBox = addSpecifiedPanel(3, "Tags searches you have made", jpTagSearchHistory); - jpDownloadedItemsHistoryBox = addSpecifiedPanel(4, "Items you have downloaded", jpDownloadedItemsHistory); - jpOpenedItemsHistoryBox = addSpecifiedPanel(5, "Workflows you have opened in Taverna", jpOpenedItemsHistory); - jpCommentedOnHistoryBox = addSpecifiedPanel(6, "Items you have commented on in myExperiment", jpCommentedOnHistory); - jpUploadedItemsHistoryBox = addSpecifiedPanel(7, "Items you have updated on myExperiment", jpUploadedItemsHistory); - - // put everything together - spMain = new JSplitPane(); - spMain.setLeftComponent(spSidebar); - spMain.setRightComponent(jpPreviewHistoryBox); - - spMain.setOneTouchExpandable(true); - spMain.setDividerLocation(247); - spMain.setDoubleBuffered(true); - - // spMyStuff will be the only component in the Panel - this.setLayout(new BorderLayout()); - this.add(spMain); - this.add(lHelper, BorderLayout.NORTH); - - } - - public ArrayList<Resource> getDownloadedItemsHistoryList() { - return (this.lDownloadedItems); - } - - public void clearDownloadedItemsHistory() { - this.lDownloadedItems.clear(); - } - - public ArrayList<Resource> getOpenedItemsHistoryList() { - return (this.lOpenedItems); - } - - public ArrayList<Resource> getUploadedItemsHistoryList() { - return (this.lUploadedItems); - } - - public void clearOpenedItemsHistory() { - this.lOpenedItems.clear(); - } - - public void clearUploadedItemsHistory() { - this.lUploadedItems.clear(); - } - - public ArrayList<Resource> getCommentedOnItemsHistoryList() { - return (this.lCommentedOnItems); - } - - public void clearCommentedOnItemsHistory() { - this.lCommentedOnItems.clear(); - } - - /** - * Used to refresh all boxes at a time (for example at launch time). - */ - private void refreshAllData() { - this.refreshHistoryBox(PREVIEWED_ITEMS_HISTORY); - this.refreshHistoryBox(DOWNLOADED_ITEMS_HISTORY); - this.refreshHistoryBox(OPENED_ITEMS_HISTORY); - this.refreshHistoryBox(UPLOADED_ITEMS_HISTORY); - this.refreshHistoryBox(COMMENTED_ON_ITEMS_HISTORY); - this.refreshSearchHistory(); - this.refreshTagSearchHistory(); - } - - /** - * This helper can be called externally to refresh the following history - * boxes: previewed items history, downloaded items history, opened items - * history and the history of items that were commented on. - * - * Is used inside ResourcePreviewBrowser and MainComponent every time a - * relevant action occurs. Also useful, when an option to 'clear preview - * history' is used in the Preferences window for. a particular history type. - */ - public void refreshHistoryBox(int historyType) { - switch (historyType) { - case PREVIEWED_ITEMS_HISTORY: - this.jpPreviewHistory.removeAll(); - populateHistoryBox(this.pluginMainComponent.getPreviewBrowser().getPreviewHistory(), this.jpPreviewHistory, "No items were previewed yet"); - break; - case DOWNLOADED_ITEMS_HISTORY: - this.jpDownloadedItemsHistory.removeAll(); - populateHistoryBox(this.lDownloadedItems, this.jpDownloadedItemsHistory, "No items were downloaded"); - break; - case OPENED_ITEMS_HISTORY: - this.jpOpenedItemsHistory.removeAll(); - populateHistoryBox(this.lOpenedItems, this.jpOpenedItemsHistory, "No items were opened"); - break; - case UPLOADED_ITEMS_HISTORY: - this.jpUploadedItemsHistory.removeAll(); - populateHistoryBox(this.lUploadedItems, this.jpUploadedItemsHistory, "No items were updated"); - break; - case COMMENTED_ON_ITEMS_HISTORY: - this.jpCommentedOnHistory.removeAll(); - populateHistoryBox(this.lCommentedOnItems, this.jpCommentedOnHistory, "You didn't comment on any items"); - break; - } - } - - /** - * Retrieves history data from a relevant list and populates the specified - * panel with it. All listed items will be resources that can be opened by - * Preview Browser. - */ - private void populateHistoryBox(List<Resource> lHistory, JPanel jpPanelToPopulate, String strLabelIfNoItems) { - if (lHistory.size() > 0) { - for (int i = lHistory.size() - 1; i >= 0; i--) { - Resource r = lHistory.get(i); - if (r != null) { - JClickableLabel lResource = Util.generateClickableLabelFor(r, this.pluginMainComponent.getPreviewBrowser()); - jpPanelToPopulate.add(lResource); - } - } - } else { - jpPanelToPopulate.add(Util.generateNoneTextLabel(strLabelIfNoItems)); - } - - // make sure that the component is updated after population - jpPanelToPopulate.revalidate(); - jpPanelToPopulate.repaint(); - } - - /** - * This helper can be called externally to refresh the search history. Is used - * inside SearchTabContentPanel every time a new item is added to search - * history. - */ - public void refreshSearchHistory() { - this.jpSearchHistory.removeAll(); - populateSearchHistory(); - } - - /** - * Retrieves search history data from SearchTabContentPanel and populates the - * relevant panel. - */ - private void populateSearchHistory() { - List<QuerySearchInstance> lSearchHistory = this.pluginMainComponent.getSearchTab().getSearchHistory(); - - // prepare layout - this.jpSearchHistory.setLayout(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); - c.anchor = GridBagConstraints.NORTHWEST; - - if (lSearchHistory.size() > 0) { - for (int i = lSearchHistory.size() - 1; i >= 0; i--) { - QuerySearchInstance qsiCurrent = lSearchHistory.get(i); - JClickableLabel jclCurrentEntryLabel = new JClickableLabel(qsiCurrent.getSearchQuery(), SearchTabContentPanel.SEARCH_FROM_HISTORY - + ":" + i, this, WorkbenchIcons.findIcon, SwingUtilities.LEFT, qsiCurrent.toString()); - JLabel jlCurrentEntrySettings = new JLabel(qsiCurrent.detailsAsString()); - jlCurrentEntrySettings.setBorder(BorderFactory.createEmptyBorder(3, 5, 0, 0)); - - JPanel jpCurrentSearchHistoryEntry = new JPanel(); - jpCurrentSearchHistoryEntry.setLayout(new GridBagLayout()); - c.gridx = 0; - c.gridy = 0; - c.weightx = 0; - jpCurrentSearchHistoryEntry.add(jclCurrentEntryLabel, c); - c.gridx = 1; - c.gridy = 0; - c.weightx = 1.0; - jpCurrentSearchHistoryEntry.add(jlCurrentEntrySettings, c); - - c.gridy = lSearchHistory.size() - 1 - i; - if (i == 0) - c.weighty = 1.0; - this.jpSearchHistory.add(jpCurrentSearchHistoryEntry, c); - } - } else { - c.weightx = 1.0; - c.weighty = 1.0; - this.jpSearchHistory.add(Util.generateNoneTextLabel(SearchResultsPanel.NO_SEARCHES_STATUS), c); - } - - // make sure that the component is updated after population - this.jpSearchHistory.revalidate(); - this.jpSearchHistory.repaint(); - } - - /** - * This helper can be called externally to refresh the tag search history. Is - * used inside TagBrowserTabContentPanel every time a new tag is searched for. - */ - public void refreshTagSearchHistory() { - this.jpTagSearchHistory.removeAll(); - populateTagSearchHistory(); - } - - /** - * Retrieves tag search history data from Tag Browser and populates the - * relevant panel. - */ - private void populateTagSearchHistory() { - List<Tag> lTagSearchHistory = this.pluginMainComponent.getTagBrowserTab().getTagSearchHistory(); - - if (lTagSearchHistory.size() > 0) { - for (int i = lTagSearchHistory.size() - 1; i >= 0; i--) { - Tag t = lTagSearchHistory.get(i); - JClickableLabel lTag = new JClickableLabel(t.getTagName(), "tag:" - + t.getTagName(), this, new ImageIcon(MyExperimentPerspective.getLocalIconURL(Resource.TAG)), // HACK: after deserialization t.getItemType() return "Unknown" type - SwingConstants.LEFT, "Tag: " + t.getTagName()); - this.jpTagSearchHistory.add(lTag); - } - } else { - this.jpTagSearchHistory.add(Util.generateNoneTextLabel("No searches by tags have been made yet")); - } - - // make sure that the component is updated after population - this.jpTagSearchHistory.revalidate(); - this.jpTagSearchHistory.repaint(); - } - - /** - * @param strBoxTitle - * Title of the content box. - * @param jpContentPanel - * JPanel which will be populated with history listing. - * @return Prepared JPanel with a border, title and jpContentPanel wrapped - * into a scroll pane. - */ - private static JPanel generateContentBox(String strBoxTitle, JPanel jpContentPanel) { - // set layout for the content panel - jpContentPanel.setLayout(new BoxLayout(jpContentPanel, BoxLayout.Y_AXIS)); - - // wrap content panel into a standard scroll pane - JScrollPane spContent = new JScrollPane(jpContentPanel); - spContent.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5)); - spContent.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - spContent.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL); - - // create the actual box stub with a border which will contain the scroll pane - JPanel jpBox = new JPanel(); - jpBox.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), " " - + strBoxTitle + " "))); - - jpBox.setLayout(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); - c.anchor = GridBagConstraints.NORTHWEST; - c.fill = GridBagConstraints.BOTH; - c.weightx = 1.0; - c.weighty = 1.0; - jpBox.add(spContent, c); - - return (jpBox); - } - - // *** Callback for ActionListener interface *** - public void actionPerformed(ActionEvent e) { - if (e.getSource() instanceof JClickableLabel) { - if (e.getActionCommand().startsWith(SearchTabContentPanel.SEARCH_FROM_HISTORY)) { - // open search tab and start the chosen search - this.pluginMainComponent.getSearchTab().actionPerformed(e); - this.pluginMainComponent.getMainTabs().setSelectedComponent(this.pluginMainComponent.getSearchTab()); - } else if (e.getActionCommand().startsWith("tag:")) { - // open tag browser tab and start the chosen tag search - this.pluginMainComponent.getTagBrowserTab().actionPerformed(e); - this.pluginMainComponent.getMainTabs().setSelectedComponent(this.pluginMainComponent.getTagBrowserTab()); - } else if (e.getActionCommand().contains("history")) { - if (e.getActionCommand() == "preview_history") - spMain.setRightComponent(jpPreviewHistoryBox); - else if (e.getActionCommand() == "search_history") - spMain.setRightComponent(jpSearchHistoryBox); - else if (e.getActionCommand() == "tag_history") - spMain.setRightComponent(jpTagSearchHistoryBox); - else if (e.getActionCommand() == "downloads_history") - spMain.setRightComponent(jpDownloadedItemsHistoryBox); - else if (e.getActionCommand() == "opened_history") - spMain.setRightComponent(jpOpenedItemsHistoryBox); - else if (e.getActionCommand() == "uploaded_history") - spMain.setRightComponent(jpUploadedItemsHistoryBox); - else if (e.getActionCommand() == "comments_history") - spMain.setRightComponent(jpCommentedOnHistoryBox); - } - } - - } - -}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/JClickableLabel.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/JClickableLabel.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/JClickableLabel.java deleted file mode 100644 index 53f901f..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/JClickableLabel.java +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.EventListener; - -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.JLabel; -import javax.swing.SwingUtilities; - -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Util; - -/** - * @author Sergejs Aleksejevs, Jiten Bhagat - */ - -public class JClickableLabel extends JLabel implements MouseListener -{ - // This will hold the data which is relevant to processing the 'click' event on this label - private String strData; - - // This will hold a reference to ResourcePreviewBrowser instance that is supposed to process the clicks - // on JClickableLabels - private ActionListener clickHandler; - - - public JClickableLabel(String strLabel, String strDataForAction, EventListener eventHandler) - { - this(strLabel, strDataForAction, eventHandler, null); - } - - public JClickableLabel(String strLabel, String strDataForAction, EventListener eventHandler, Icon icon) - { - this(strLabel, strDataForAction, eventHandler, icon, SwingUtilities.LEFT); - } - - public JClickableLabel(String strLabel, String strDataForAction, EventListener eventHandler, Icon icon, int horizontalAlignment) - { - this(strLabel, strDataForAction, eventHandler, icon, horizontalAlignment, null); - } - - /** - * - * @param strLabel Textual label that will be visible in the UI. - * @param strDataForAction Data that will be passed to eventHandler when click on the label is made. - * @param eventHandler ActionListener that will process clicks on this label. - * @param icon Icon to display in the label. - * @param horizontalAlignment This is one of SwingConstants: LEFT, CENTER, RIGHT, LEADING or TRAILING - * @param strTooltip Tooltip to show over the label - if none is provided (e.g. null value), the strLabel will be used as a tooltip. - */ - public JClickableLabel(String strLabel, String strDataForAction, EventListener eventHandler, Icon icon, int horizontalAlignment, String strTooltip) - { - super(strLabel, icon, horizontalAlignment); - - this.strData = strDataForAction; - this.clickHandler = (ActionListener)eventHandler; - - // empty border at the top and bottom will simulate "line-spacing" - // (this is only needed when an icon is displayed) - if (icon != null) { - this.setBorder(BorderFactory.createEmptyBorder(3, 0, 3, 0)); - } - - // the tooltip for now only shows the full label text - this.setToolTipText(strTooltip == null ? strLabel : strTooltip); - this.setForeground(Color.BLUE); - this.addMouseListener(this); - } - - - /* This class extends JLabel, so it can't extend MouseAdapter; - * therefore, empty methods will be added for not useful callbacks - * from the MouseListener interface. - */ - public void mouseClicked(MouseEvent e) - { - // call 'actionPerfermed' method on the clickHandler instance that was supplied - // on creation of the JClickableLabel instance - this.clickHandler.actionPerformed(new ActionEvent(this, e.getID(), this.strData)); - } - - public void mouseEntered(MouseEvent e) - { - this.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ) ; - } - - public void mouseExited(MouseEvent e) - { - this.setCursor( Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ) ) ; - } - - public void mousePressed(MouseEvent e) - { - // do nothing - } - - public void mouseReleased(MouseEvent e) - { - // do nothing - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponent.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponent.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponent.java deleted file mode 100644 index f4b6ace..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponent.java +++ /dev/null @@ -1,645 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -/** - * - */ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.io.ByteArrayInputStream; -import java.awt.Desktop; -import java.net.URI; - -import javax.swing.AbstractAction; -import javax.swing.ImageIcon; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.text.html.HTMLEditorKit; -import javax.swing.text.html.StyleSheet; - -import net.sf.taverna.t2.lang.ui.ShadedLabel; -import net.sf.taverna.t2.ui.perspectives.PerspectiveRegistry; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.MyExperimentClient; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Resource; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Util; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Workflow; -import net.sf.taverna.t2.workbench.edits.EditManager; -import net.sf.taverna.t2.workbench.file.FileManager; -import net.sf.taverna.t2.workbench.file.FileType; -import net.sf.taverna.t2.workbench.file.exceptions.OpenException; -import net.sf.taverna.t2.workbench.file.importworkflow.gui.ImportWorkflowWizard; -import net.sf.taverna.t2.workbench.icons.WorkbenchIcons; -import net.sf.taverna.t2.workbench.ui.zaria.PerspectiveSPI; -import net.sf.taverna.t2.workbench.ui.zaria.UIComponentSPI; -import net.sf.taverna.t2.workflowmodel.Dataflow; -import net.sf.taverna.t2.workflowmodel.serialization.xml.impl.XMLSerializationConstants; - -import org.apache.log4j.Logger; - -/** - * @author Sergejs Aleksejevs, Emmanuel Tagarira, Jiten Bhagat - */ -public final class MainComponent extends JPanel implements UIComponentSPI, ChangeListener { - // myExperiment client, logger and the stylesheet will be made available - // throughout the whole perspective - private MyExperimentClient myExperimentClient; - private final Logger logger = Logger.getLogger(MainComponent.class); - private final StyleSheet css; - private final ResourcePreviewFactory previewFactory; - private final ResourcePreviewBrowser previewBrowser; - - // components of the perspective - private JTabbedPane tpMainTabs; - private MyStuffTabContentPanel pMyStuffContainer; - private ExampleWorkflowsPanel pExampleWorkflows; - private TagBrowserTabContentPanel pTagBrowser; - private SearchTabContentPanel pSearchTab; - private HistoryBrowserTabContentPanel pHistoryBrowserTab; - private PluginStatusBar pStatusBar; - private PluginPreferencesDialog jdPreferences; - - public static MainComponent MAIN_COMPONENT; - public static MyExperimentClient MY_EXPERIMENT_CLIENT; - public static Logger LOGGER; - private final EditManager editManager; - private final FileManager fileManager; - - public MainComponent(EditManager editManager, FileManager fileManager) { - super(); - this.editManager = editManager; - this.fileManager = fileManager; - - // create and initialise myExperiment client - try { - this.myExperimentClient = new MyExperimentClient(logger); - } catch (Exception e) { - this.logger.error("Couldn't initialise myExperiment client"); - } - - // x, y, z ARE NOT USED ANYWHERE ELSE - // HACK TO BE ABLE TO GET THE REFS FROM TAVERNA'S PREFERENCE PANEL - // TODO: refactor code for all the other classes to utilise the class - // vars - MainComponent x = this; - MAIN_COMPONENT = x; - - MyExperimentClient y = this.myExperimentClient; - MY_EXPERIMENT_CLIENT = y; - - Logger z = this.logger; - LOGGER = z; - - // components to generate and display previews - previewFactory = new ResourcePreviewFactory(this, myExperimentClient, logger); - previewBrowser = new ResourcePreviewBrowser(this, myExperimentClient, logger, fileManager); - - this.css = new StyleSheet(); - this.css.importStyleSheet(MyExperimentPerspective.getLocalResourceURL("css_stylesheet")); - logger.debug("Stylesheet loaded: \n" + this.css.toString()); - - // check if values for default tabs are set, if not - set defaults; - // NB! This has to be done before initialising UI - if (myExperimentClient.getSettings().getProperty( - MyExperimentClient.INI_DEFAULT_ANONYMOUS_TAB) == null) - myExperimentClient.getSettings().put(MyExperimentClient.INI_DEFAULT_ANONYMOUS_TAB, "3"); // SEARCH - if (myExperimentClient.getSettings().getProperty( - MyExperimentClient.INI_DEFAULT_LOGGED_IN_TAB) == null) - myExperimentClient.getSettings().put(MyExperimentClient.INI_DEFAULT_LOGGED_IN_TAB, "0"); // STUFF - - initialisePerspectiveUI(); - - // HACK for a weird stylesheet bug (where the first thing to use the - // stylesheet doesn't actually get the styles) - // NB! This has to be located after all ShadedLabels were initialized to - // prevent bad layout in them - HTMLEditorKit kit = new StyledHTMLEditorKit(this.css); - - // determine which shutdown operations to use - if (Util.isRunningInTaverna()) { - // register the current instance of main component with the - // myExperiment - // perspective; this will be used later on when shutdown operation - // needs - // to be performed - e.g. this aids ShutdownSPI to find the running - // instance of the plugin - for (PerspectiveSPI perspective : PerspectiveRegistry.getInstance().getPerspectives()) { - if (perspective.getText().equals(MyExperimentPerspective.PERSPECTIVE_NAME)) { - ((MyExperimentPerspective) perspective).setMainComponent(this); - break; - } - } - } - - // Do the rest in a separate thread to avoid hanging the GUI. - // Remember to use SwingUtilities.invokeLater to update the GUI - // directly. - new Thread("Data initialisation for Taverna 2 - myExperiment plugin") { - @Override - public void run() { - // load the data into the plugin - initialiseData(); - } - }.start(); - - } - - public ImageIcon getIcon() { - return WorkbenchIcons.databaseIcon; - } - - @Override - public String getName() { - return "myExperiment Perspective Main Component"; - } - - public void onDisplay() { - } - - public void onDispose() { - } - - public MyExperimentClient getMyExperimentClient() { - return this.myExperimentClient; - } - - public Logger getLogger() { - return this.logger; - } - - public StyleSheet getStyleSheet() { - return this.css; - } - - public PluginStatusBar getStatusBar() { - return this.pStatusBar; - } - - public PluginPreferencesDialog getPreferencesDialog() { - return this.jdPreferences; - } - - public ResourcePreviewFactory getPreviewFactory() { - return this.previewFactory; - } - - public ResourcePreviewBrowser getPreviewBrowser() { - return this.previewBrowser; - } - - public HistoryBrowserTabContentPanel getHistoryBrowser() { - return this.pHistoryBrowserTab; - } - - public JTabbedPane getMainTabs() { - return (this.tpMainTabs); - } - - public MyStuffTabContentPanel getMyStuffTab() { - return (this.pMyStuffContainer); - } - - public ExampleWorkflowsPanel getExampleWorkflowsTab() { - return (this.pExampleWorkflows); - } - - public TagBrowserTabContentPanel getTagBrowserTab() { - return (this.pTagBrowser); - } - - public SearchTabContentPanel getSearchTab() { - return (this.pSearchTab); - } - - private void initialisePerspectiveUI() { - // HACK: this is required to prevent some labels from having white - // non-transparent background - ShadedLabel testLabel = new ShadedLabel("test", ShadedLabel.BLUE); - - // create instances of individual components - // (NB! Status bar needs to be initialised first, so that it is - // available to - // other components immediately!) - this.pStatusBar = new PluginStatusBar(this, myExperimentClient, logger); - this.pMyStuffContainer = new MyStuffTabContentPanel(this, myExperimentClient, logger, fileManager); - this.pExampleWorkflows = new ExampleWorkflowsPanel(this, myExperimentClient, logger); - this.pTagBrowser = new TagBrowserTabContentPanel(this, myExperimentClient, logger); - this.pSearchTab = new SearchTabContentPanel(this, myExperimentClient, logger); - this.pHistoryBrowserTab = new HistoryBrowserTabContentPanel(this, myExperimentClient, - logger); - - // add the required ones into the main tabs - this.tpMainTabs = new JTabbedPane(); - this.tpMainTabs.add("My Stuff", this.pMyStuffContainer); - // TODO: implement the starter pack - this.tpMainTabs.add("Starter Pack", this.pExampleWorkflows); - this.tpMainTabs.add("Tag Browser", this.pTagBrowser); - this.tpMainTabs.add("Search", this.pSearchTab); - this.tpMainTabs.add("Local History", this.pHistoryBrowserTab); - - // add main tabs and the status bar into the perspective - this.setLayout(new BorderLayout()); - this.add(this.tpMainTabs, BorderLayout.CENTER); - this.add(this.pStatusBar, BorderLayout.SOUTH); - - // add listener to TabbedPane, so that the app "knows" when some tab was - // opened - this.tpMainTabs.addChangeListener(this); - - // initialise the preferences dialog - /* - * NB! this has to be done after all tabs were created (Preview Browser - * is used as an owner of the preferences dialog because Preview Browser - * is the only JFrame in the application - in Java 1.5 it is only - * possible to set an icon to a JFrame and all 'children' dialog of it - * get the same icon - so essentially, this is only to set the - * myExperiment logo as an icon of preferences dialog.) - */ - this.jdPreferences = new PluginPreferencesDialog(this.getPreviewBrowser(), this, - myExperimentClient, logger); - } - - private void initialiseData() { - this.logger.debug("Initialising myExperiment Perspective data"); - - // check if 'auto-login' is required (NB! This requires the BASE_URL to - // be - // set correctly!) - Object oAutoLogin = this.myExperimentClient.getSettings().get( - MyExperimentClient.INI_AUTO_LOGIN); - if (oAutoLogin != null && oAutoLogin.equals("true")) { - this.getStatusBar().setStatus(this.getMyStuffTab().getClass().getName(), - "Performing autologin"); - this.myExperimentClient.doLoginFromStoredCredentials(); - this.getStatusBar().setStatus(this.getMyStuffTab().getClass().getName(), - "Autologin finished. Fetching user data"); - } - - // NB! This should only be done if the user is logged in - - // otherwise this component simply doesn't exist - // this.pMyStuffContainer.spMyStuff.setDividerLocation(0.3); - - // load data into all tabs - this.pMyStuffContainer.createAndInitialiseInnerComponents(); - if (this.myExperimentClient.isLoggedIn()) { - // set the default tab for logged in user (e.g. as a consequence of - // auto-login) - tpMainTabs.setSelectedIndex(Integer.parseInt(myExperimentClient.getSettings() - .getProperty(MyExperimentClient.INI_DEFAULT_LOGGED_IN_TAB))); - - // auto-login was successful - can display user tags - // (no need to refresh this cloud on its own, because the whole tab - // is refreshed immediately after) - this.pTagBrowser.setMyTagsShown(true); - } else { - // set the default tab for anonymous user (auto-login failed or - // wasn't - // chosen) - tpMainTabs.setSelectedIndex(Integer.parseInt(myExperimentClient.getSettings() - .getProperty(MyExperimentClient.INI_DEFAULT_ANONYMOUS_TAB))); - } - - this.pExampleWorkflows.refresh(); - this.pTagBrowser.refresh(); - } - - public void stateChanged(ChangeEvent e) { - // invoked when a tab is opened - if (e.getSource().equals(this.tpMainTabs)) { - this.getStatusBar().displayStatus( - this.getMainTabs().getSelectedComponent().getClass().getName()); - } - } - - // ************** ACTIONS *************** - public class PreviewResourceAction extends AbstractAction { - private int iResourceType = Resource.UNKNOWN; - private String strResourceURI = ""; - - public PreviewResourceAction(int iResourceType, String strResourceURI) { - putValue(SMALL_ICON, WorkbenchIcons.zoomIcon); - putValue(NAME, "Preview"); - putValue(SHORT_DESCRIPTION, - "Preview this " + Resource.getResourceTypeName(iResourceType).toLowerCase() - + " in the Preview Browser window"); - - this.iResourceType = iResourceType; - this.strResourceURI = strResourceURI; - } - - public void actionPerformed(ActionEvent actionEvent) { - getPreviewBrowser() - .preview("preview:" + this.iResourceType + ":" + this.strResourceURI); - } - } - - public class DownloadResourceAction extends AbstractAction { - private Resource resource = null; - - public DownloadResourceAction(Resource resource) { - this(resource, true); - } - - public DownloadResourceAction(Resource resource, boolean bShowButtonLabel) { - this.resource = resource; - String strResourceType = resource.getItemTypeName().toLowerCase(); - - // in either case the icon is the same; label might be displayed - - // based - // on the parameter - putValue(SMALL_ICON, WorkbenchIcons.saveIcon); - if (bShowButtonLabel) - putValue(NAME, "Download"); - - String strTooltip = "Downloading " + strResourceType + "s is currently not possible"; - boolean bDownloadAllowed = false; - if (resource.isDownloadable()) { - if (resource.isDownloadAllowed()) { - strTooltip = "Download this " + strResourceType + " and store it locally"; - bDownloadAllowed = true; - } else { - strTooltip = "You don't have permissions to download this " + strResourceType; - } - } - - setEnabled(bDownloadAllowed); - putValue(SHORT_DESCRIPTION, strTooltip); - } - - public void actionPerformed(ActionEvent actionEvent) { - try { - Desktop.getDesktop().browse(new URI(resource.getResource() + "/download")); - - // update downloaded items history making sure that: - // - there's only one occurrence of this item in the history; - // - if this item was in the history before, it is moved to the - // 'top' - // now; - // - predefined history size is not exceeded - getHistoryBrowser().getDownloadedItemsHistoryList().remove(resource); - getHistoryBrowser().getDownloadedItemsHistoryList().add(resource); - if (getHistoryBrowser().getDownloadedItemsHistoryList().size() > HistoryBrowserTabContentPanel.DOWNLOADED_ITEMS_HISTORY_LENGTH) { - getHistoryBrowser().getDownloadedItemsHistoryList().remove(0); - } - - // now update the downloaded items history panel in 'History' - // tab - if (getHistoryBrowser() != null) { - getHistoryBrowser().refreshHistoryBox( - HistoryBrowserTabContentPanel.DOWNLOADED_ITEMS_HISTORY); - } - } catch (Exception ex) { - logger.error("Failed while trying to open download URL in a standard browser; URL was: " - + resource.getURI() + "\nException was: " + ex); - } - } - } - - public class LoadResourceInTavernaAction extends AbstractAction { - private final Resource resource; - - public LoadResourceInTavernaAction(Resource resource) { - this(resource, true); - } - - public LoadResourceInTavernaAction(Resource resource, boolean bShowButtonLabel) { - this.resource = resource; - String strResourceType = resource.getItemTypeName().toLowerCase(); - - putValue(SMALL_ICON, WorkbenchIcons.openIcon); - if (bShowButtonLabel) - putValue(NAME, "Open"); - - boolean bLoadingAllowed = false; - String strTooltip = "Loading " + strResourceType - + "s into Taverna Workbench is currently not possible"; - if (resource.getItemType() == Resource.WORKFLOW) { - if (((Workflow) resource).isTavernaWorkflow()) { - if (resource.isDownloadAllowed()) { - // Taverna workflow and download allowed - can load in - // Taverna - bLoadingAllowed = true; - strTooltip = "Download and load this workflow in Design mode of Taverna Workbench"; - } else { - strTooltip = "You don't have permissions to download this workflow, and thus to load into Taverna Workbench"; - } - } else { - strTooltip = "Loading workflow of unsupported type into Taverna Workbench is not possible."; - } - } - - setEnabled(bLoadingAllowed); - putValue(SHORT_DESCRIPTION, strTooltip); - - } - - public void actionPerformed(ActionEvent actionEvent) { - // if the preview browser window is opened, hide it beneath the main - // window - if (getPreviewBrowser().isActive()) - getPreviewBrowser().toBack(); - - final String strCallerTabClassName = getMainTabs().getSelectedComponent().getClass() - .getName(); - getStatusBar().setStatus(strCallerTabClassName, "Downloading and opening workflow..."); - logger.debug("Downloading and opening workflow from URI: " + resource.getURI()); - - new Thread("Download and open workflow") { - @Override - public void run() { - try { - Workflow w = myExperimentClient.fetchWorkflowBinary(resource.getURI()); - ByteArrayInputStream workflowDataInputStream = new ByteArrayInputStream( - w.getContent()); - - FileType fileTypeType = (w.isTaverna1Workflow() ? new ScuflFileType() - : new T2FlowFileType()); - Dataflow openDataflow = fileManager.openDataflow(fileTypeType, - workflowDataInputStream); - } catch (Exception e) { - javax.swing.JOptionPane.showMessageDialog(null, - "An error has occurred while trying to load a workflow from myExperiment.\n\n" - + e, "Error", JOptionPane.ERROR_MESSAGE); - logger.error( - "Failed to open connection to URL to download and open workflow, from myExperiment.", - e); - } - - getStatusBar().setStatus(strCallerTabClassName, null); - - // update opened items history making sure that: - // - there's only one occurrence of this item in the - // history; - // - if this item was in the history before, it is moved to - // the 'top' - // now; - // - predefined history size is not exceeded - getHistoryBrowser().getOpenedItemsHistoryList().remove(resource); - getHistoryBrowser().getOpenedItemsHistoryList().add(resource); - if (getHistoryBrowser().getOpenedItemsHistoryList().size() > HistoryBrowserTabContentPanel.OPENED_ITEMS_HISTORY_LENGTH) { - getHistoryBrowser().getOpenedItemsHistoryList().remove(0); - } - - // now update the opened items history panel in 'History' - // tab - if (getHistoryBrowser() != null) { - getHistoryBrowser().refreshHistoryBox( - HistoryBrowserTabContentPanel.OPENED_ITEMS_HISTORY); - } - } - }.start(); - } - } - - public class ImportIntoTavernaAction extends AbstractAction { - private final Resource resource; - private boolean importAsNesting; - - public ImportIntoTavernaAction(Resource r) { - this.resource = r; - - String strResourceType = resource.getItemTypeName().toLowerCase(); - - putValue(SMALL_ICON, WorkbenchIcons.importIcon); - putValue(NAME, "Import"); - - boolean bLoadingAllowed = false; - String strTooltip = "Loading " + strResourceType - + "s into Taverna Workbench is currently not possible"; - if (resource.getItemType() == Resource.WORKFLOW) { - if (((Workflow) resource).isTavernaWorkflow()) { - if (resource.isDownloadAllowed()) { - // Taverna workflow and download allowed - can load in - // Taverna - bLoadingAllowed = true; - strTooltip = "Import this workflow into one that is currently open in the Design mode of Taverna Workbench"; - } else { - strTooltip = "You don't have permissions to download this workflow, and thus to load into Taverna Workbench"; - } - } else { - strTooltip = "Loading workflow of unsupported type into Taverna Workbench is not possible."; - } - } - - setEnabled(bLoadingAllowed); - putValue(SHORT_DESCRIPTION, strTooltip); - } - - public void actionPerformed(ActionEvent actionEvent) { - // if the preview browser window is opened, hide it beneath the main - // window - if (getPreviewBrowser().isActive()) - getPreviewBrowser().toBack(); - - ImportWorkflowWizard importWorkflowDialog = new ImportWorkflowWizard( - getPreviewBrowser(), editManager, fileManager); - - Workflow w; - try { - w = MY_EXPERIMENT_CLIENT.fetchWorkflowBinary(resource.getURI()); - } catch (Exception e) { - JOptionPane.showMessageDialog(null, "An error has occurred " - + "while trying to load a " + "workflow from myExperiment.\n\n" + e, - "Error", JOptionPane.ERROR_MESSAGE); - LOGGER.error("Failed to open connection to URL to " - + "download and open workflow, from myExperiment.", e); - return; - } - ByteArrayInputStream workflowDataInputStream = new ByteArrayInputStream(w.getContent()); - FileType fileTypeType = (w.isTaverna1Workflow() ? new MainComponent.ScuflFileType() - : new MainComponent.T2FlowFileType()); - Dataflow toBeImported; - try { - toBeImported = fileManager.openDataflowSilently(fileTypeType, - workflowDataInputStream).getDataflow(); - } catch (OpenException e) { - JOptionPane.showMessageDialog(null, "An error has occurred" - + " while trying to load a " + "workflow from myExperiment.\n\n" + e, - "Error", JOptionPane.ERROR_MESSAGE); - LOGGER.error("Failed to" + " open connection to URL " - + "to download and open workflow, from myExperiment.", e); - return; - } - importWorkflowDialog.setCustomSourceDataflow(toBeImported, "From myExperiment: " - + resource.getTitle()); - importWorkflowDialog.setSourceEnabled(false); - importWorkflowDialog.setVisible(true); - - // update opened items history making sure that: - // - there's only one occurrence of this item in the history; - // - if this item was in the history before, it is moved to the - // 'top' now; - // - predefined history size is not exceeded - getHistoryBrowser().getOpenedItemsHistoryList().remove(resource); - getHistoryBrowser().getOpenedItemsHistoryList().add(resource); - if (getHistoryBrowser().getOpenedItemsHistoryList().size() > HistoryBrowserTabContentPanel.OPENED_ITEMS_HISTORY_LENGTH) { - getHistoryBrowser().getOpenedItemsHistoryList().remove(0); - } - - // now update the opened items history panel in 'History' tab - if (getHistoryBrowser() != null) - getHistoryBrowser().refreshHistoryBox( - HistoryBrowserTabContentPanel.OPENED_ITEMS_HISTORY); - } - - } - - // *** FileTypes for opening workflows inside Taverna - - public static class ScuflFileType extends FileType { - - @Override - public String getDescription() { - return "Taverna 1 SCUFL workflow"; - } - - @Override - public String getExtension() { - return "xml"; - } - - @Override - public String getMimeType() { - return "application/vnd.taverna.scufl+xml"; - } - } - - public static class T2FlowFileType extends FileType { - @Override - public String getDescription() { - return "Taverna 2 workflow"; - } - - @Override - public String getExtension() { - return "t2flow"; - } - - @Override - public String getMimeType() { - // "application/vnd.taverna.t2flow+xml"; - return XMLSerializationConstants.WORKFLOW_DOCUMENT_MIMETYPE; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentFactory.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentFactory.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentFactory.java deleted file mode 100644 index 65f8875..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentFactory.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their - * respective authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -/** - * @author Sergejs Aleksejevs, Jiten Bhagat - */ - -import javax.swing.ImageIcon; - -import net.sf.taverna.t2.workbench.edits.EditManager; -import net.sf.taverna.t2.workbench.file.FileManager; -import net.sf.taverna.t2.workbench.icons.WorkbenchIcons; -import net.sf.taverna.t2.workbench.ui.zaria.UIComponentFactorySPI; -import net.sf.taverna.t2.workbench.ui.zaria.UIComponentSPI; - -public class MainComponentFactory implements UIComponentFactorySPI { - - private EditManager editManager; - private FileManager fileManager; - - public UIComponentSPI getComponent() { - return new MainComponent(editManager, fileManager); - } - - public ImageIcon getIcon() { - return WorkbenchIcons.databaseIcon; - } - - public String getName() { - return "myExperiment Main Component Factory"; - } - - public void setEditManager(EditManager editManager) { - this.editManager = editManager; - } - - public void setFileManager(FileManager fileManager) { - this.fileManager = fileManager; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentShutdownHook.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentShutdownHook.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentShutdownHook.java deleted file mode 100644 index 2214d5e..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MainComponentShutdownHook.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import net.sf.taverna.t2.ui.perspectives.PerspectiveRegistry; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.MyExperimentClient; -import net.sf.taverna.t2.workbench.ShutdownSPI; -import net.sf.taverna.t2.workbench.ui.zaria.PerspectiveSPI; - -import org.apache.log4j.Logger; - -/** - * @author Sergejs Aleksejevs, Jiten Bhagat - */ - -public class MainComponentShutdownHook implements ShutdownSPI { - private MainComponent pluginMainComponent; - private MyExperimentClient myExperimentClient; - private Logger logger; - - public int positionHint() { - // all custom plugins are suggested to return a value of > 100; - // this affects when in the termination process will this plugin - // be shutdown; - return 100; - } - - public boolean shutdown() { - // find instance of main component of the running myExperiment perspective - MainComponent mainComponent = null; - for (PerspectiveSPI perspective : PerspectiveRegistry.getInstance().getPerspectives()) { - if (perspective instanceof MyExperimentPerspective) { - mainComponent = ((MyExperimentPerspective) perspective).getMainComponent(); - break; - } - } - - // if myExperiment perspective wasn't initialised, no shutdown operations are required / possible - if (mainComponent != null) { - this.setLinks(mainComponent, mainComponent.getMyExperimentClient(), mainComponent.getLogger()); - logger.debug("Starting shutdown operations for myExperiment plugin"); - - try { - myExperimentClient.storeHistoryAndSettings(); - } catch (Exception e) { - logger.error("Failed while serializing myExperiment plugin settings:\n" - + e); - } - - logger.debug("myExperiment plugin shutdown is completed; terminated..."); - } - - // "true" means that shutdown operations are complete and Taverna can terminate - return true; - } - - /** - * Sets up links of this class with the rest of the plugin. - */ - public void setLinks(MainComponent component, MyExperimentClient client, Logger logger) { - this.pluginMainComponent = component; - this.myExperimentClient = client; - this.logger = logger; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyExperimentPerspective.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyExperimentPerspective.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyExperimentPerspective.java deleted file mode 100644 index 1982b75..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyExperimentPerspective.java +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ - -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import java.io.InputStream; -import java.net.URL; - -import javax.swing.ImageIcon; - -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Resource; -import net.sf.taverna.t2.workbench.ui.zaria.PerspectiveSPI; - -import org.jdom.Element; - -/** - * @author Sergejs Aleksejevs, Jiten Bhagat - */ -public class MyExperimentPerspective implements PerspectiveSPI { - // CONSTANTS - // this is where all icons, stylesheet, etc are located - private static final String BASE_RESOURCE_PATH = "/net/sf/taverna/t2/ui/perspectives/myexperiment/"; - public static final String PERSPECTIVE_NAME = "myExperiment"; - public static final String PLUGIN_VERSION = "0.2beta"; - - // COMPONENTS - private MainComponent perspectiveMainComponent; - private boolean visible = true; - - public ImageIcon getButtonIcon() { - URL iconURL = MyExperimentPerspective.getLocalResourceURL("myexp_icon16x16"); - if (iconURL == null) { - return null; - } else { - return new ImageIcon(iconURL); - } - } - - public InputStream getLayoutInputStream() { - return getClass().getResourceAsStream("myexperiment-perspective.xml"); - } - - public String getText() { - return PERSPECTIVE_NAME; - } - - public boolean isVisible() { - return visible; - } - - public int positionHint() { - // this determines position of myExperiment perspective in the - // bar with perspective buttons (currently makes it the last in the - // list) - return 30; - } - - public void setVisible(boolean visible) { - this.visible = visible; - - } - - public void update(Element layoutElement) { - // Not sure what to do here - } - - public void setMainComponent(MainComponent component) { - this.perspectiveMainComponent = component; - } - - /** - * Returns the instance of the main component of this perspective. - */ - public MainComponent getMainComponent() { - return this.perspectiveMainComponent; - } - - // a single point in the plugin where all resources are referenced - public static URL getLocalResourceURL(String strResourceName) { - String strResourcePath = MyExperimentPerspective.BASE_RESOURCE_PATH; - - if (strResourceName.equals("not_authorized_icon")) - strResourcePath += "denied.png"; - if (strResourceName.equals("failure_icon")) - strResourcePath += "denied.png"; - else if (strResourceName.equals("success_icon")) - strResourcePath += "tick.png"; - else if (strResourceName.equals("spinner")) - strResourcePath += "ajax-loader.gif"; - else if (strResourceName.equals("spinner_stopped")) - strResourcePath += "ajax-loader-still.gif"; - else if (strResourceName.equals("external_link_small_icon")) - strResourcePath += "external_link_listing_small.png"; - else if (strResourceName.equals("back_icon")) - strResourcePath += "arrow_left.png"; - else if (strResourceName.equals("forward_icon")) - strResourcePath += "arrow_right.png"; - else if (strResourceName.equals("refresh_icon")) - strResourcePath += "arrow_refresh.png"; - else if (strResourceName.equals("favourite_icon")) - strResourcePath += "star.png"; - else if (strResourceName.equals("add_favourite_icon")) - strResourcePath += "favourite_add.png"; - else if (strResourceName.equals("delete_favourite_icon")) - strResourcePath += "favourite_delete.png"; - else if (strResourceName.equals("destroy_icon")) - strResourcePath += "cross.png"; - else if (strResourceName.equals("add_comment_icon")) - strResourcePath += "comment_add.png"; - else if (strResourceName.equals("myexp_icon")) - strResourcePath += "myexp_icon.png"; - else if (strResourceName.equals("myexp_icon16x16")) - strResourcePath += "myexp_icon16x16.png"; - else if (strResourceName.equals("open_in_my_experiment_icon")) - strResourcePath += "open_in_myExperiment.png"; - else if (strResourceName.equals("login_icon")) - strResourcePath += "login.png"; - else if (strResourceName.equals("logout_icon")) - strResourcePath += "logout.png"; - else if (strResourceName.equals("css_stylesheet")) - strResourcePath += "styles.css"; - else { - throw new java.lang.IllegalArgumentException( - "Unknown myExperiment plugin resource requested; requested resource name was: " - + strResourceName); - } - - // no exception was thrown, therefore the supplied resource name was - // recognised; - // return the local URL of that resource - return (MyExperimentPerspective.class.getResource(strResourcePath)); - } - - // a single point in the plugin where all resources' icons are referenced - public static URL getLocalIconURL(int iResourceType) { - String strResourcePath = MyExperimentPerspective.BASE_RESOURCE_PATH; - - switch (iResourceType) { - case Resource.WORKFLOW: - strResourcePath += "workflow.png"; - break; - case Resource.FILE: - strResourcePath += "file.png"; - break; - case Resource.PACK: - strResourcePath += "pack.png"; - break; - case Resource.PACK_EXTERNAL_ITEM: - strResourcePath += "remote_resource.png"; - break; - case Resource.USER: - strResourcePath += "user.png"; - break; - case Resource.GROUP: - strResourcePath += "group.png"; - break; - case Resource.TAG: - strResourcePath += "tag_blue.png"; - break; - default: - throw new java.lang.IllegalArgumentException( - "Unknown myExperiment plugin resource requested; requested resource name was: " - + Resource.getResourceTypeName(iResourceType)); - } - - // no exception was thrown, therefore the supplied resource name was - // recognised; - // return the local URL of that resource - return (MyExperimentPerspective.class.getResource(strResourcePath)); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyStuffContributionsPanel.java ---------------------------------------------------------------------- diff --git a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyStuffContributionsPanel.java b/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyStuffContributionsPanel.java deleted file mode 100644 index e7ef972..0000000 --- a/taverna-workbench-perspective-myexperiment/src/main/java/net/sf/taverna/t2/ui/perspectives/myexperiment/MyStuffContributionsPanel.java +++ /dev/null @@ -1,370 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2009 The University of Manchester - * - * Modifications to the initial code base are copyright of their respective - * authors, or their employers as appropriate. - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 - ******************************************************************************/ -package net.sf.taverna.t2.ui.perspectives.myexperiment; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.BorderFactory; -import javax.swing.ImageIcon; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; - -import net.sf.taverna.t2.lang.ui.ShadedLabel; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.File; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.MyExperimentClient; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Pack; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Resource; -import net.sf.taverna.t2.ui.perspectives.myexperiment.model.Workflow; - -import org.apache.log4j.Logger; -import org.jdom.Document; -import org.jdom.Element; - - -/** - * @author Sergejs Aleksejevs, Emmanuel Tagarira, Jiten Bhagat - */ -public class MyStuffContributionsPanel extends JPanel implements ActionListener { - // CONSTANTS - private static final int SHADED_LABEL_HEIGHT = 20; - private static final int SECTION_VSPACING = 5; - private static final int SCROLL_PANE_PADDING = 3; - private static final int TOTAL_SECTION_VSPACING = SHADED_LABEL_HEIGHT - + SECTION_VSPACING + SCROLL_PANE_PADDING + 5; // the last literal is to cover all paddings / margins / etc - - private MainComponent pluginMainComponent; - private MyExperimentClient myExperimentClient; - private Logger logger; - - // MAIN COMPONENTS of the view - JPanel jpMyWorkflows; - JPanel jpMyFiles; - JPanel jpMyPacks; - - // HELPER COMPONENTS - // these are the individual content listings for 'my workfows', 'my files' and 'my packs' .. - ResourceListPanel jpMyWorkflowsContent = null; - ResourceListPanel jpMyFilesContent = null; - ResourceListPanel jpMyPacksContent = null; - - // .. these will be wrapped into individual scroll panes to ensure correct sizes - JScrollPane spMyWorkflowsContent = null; - JScrollPane spMyFilesContent = null; - JScrollPane spMyPacksContent = null; - - // STORAGE - private ArrayList<JPanel> alVisiblePanels; - private ArrayList<JComponent[]> alVisiblePanelsWithHelperElements; - - public MyStuffContributionsPanel(MainComponent component, MyExperimentClient client, Logger logger) { - super(); - - // set main variables to ensure access to myExperiment, logger and the parent component - this.pluginMainComponent = component; - this.myExperimentClient = client; - this.logger = logger; - - alVisiblePanels = new ArrayList<JPanel>(); - alVisiblePanelsWithHelperElements = new ArrayList<JComponent[]>(); - - // check that settings for this panel were set correctly in the INI file - // (if any record is missing - assume that this section is visible) - // (this will ensure that these values can be used with no further validity checks - // across the plugin; this is because this method will be executed at start of the plugin) - if (myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_WORKFLOWS) == null) { - myExperimentClient.getSettings().put(MyExperimentClient.INI_MY_STUFF_WORKFLOWS, new Boolean(true).toString()); - } - if (myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_FILES) == null) { - myExperimentClient.getSettings().put(MyExperimentClient.INI_MY_STUFF_FILES, new Boolean(true).toString()); - } - if (myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_PACKS) == null) { - myExperimentClient.getSettings().put(MyExperimentClient.INI_MY_STUFF_PACKS, new Boolean(true).toString()); - } - - // create and initialise the UI of MyStuff tab - initialiseUI(); - initialiseData(); - } - - private void initialiseUI() { - JPanel jpMyWorkflowsContainer = new JPanel(); - jpMyWorkflowsContainer.setBorder(BorderFactory.createEmptyBorder()); - if (Boolean.parseBoolean(myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_WORKFLOWS))) { - // "My Workflows" panel - jpMyWorkflowsContainer.setBorder(BorderFactory.createEtchedBorder()); - jpMyWorkflowsContainer.setLayout(new BorderLayout()); - - ShadedLabel l0 = new ShadedLabel("My Workflows", ShadedLabel.BLUE); - jpMyWorkflowsContainer.add(l0, BorderLayout.NORTH); - - jpMyWorkflows = new JPanel(); - jpMyWorkflows.setLayout(new BorderLayout()); - jpMyWorkflows.setBackground(Color.WHITE); - jpMyWorkflows.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); - jpMyWorkflows.add(new JLabel("Loading...", new ImageIcon(MyExperimentPerspective.getLocalResourceURL("spinner")), SwingConstants.CENTER)); - - jpMyWorkflowsContainer.add(jpMyWorkflows, BorderLayout.CENTER); - alVisiblePanels.add(jpMyWorkflows); - } - - JPanel jpMyFilesContainer = new JPanel(); - if (Boolean.parseBoolean(myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_FILES))) { - // "My Files" panel - jpMyFilesContainer.setBorder(BorderFactory.createEtchedBorder()); - jpMyFilesContainer.setLayout(new BorderLayout()); - - ShadedLabel l1 = new ShadedLabel("My Files", ShadedLabel.BLUE); - jpMyFilesContainer.add(l1, BorderLayout.NORTH); - - jpMyFiles = new JPanel(); - jpMyFiles.setLayout(new BorderLayout()); - jpMyFiles.setBackground(Color.WHITE); - jpMyFiles.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); - jpMyFiles.add(new JLabel("Loading...", new ImageIcon(MyExperimentPerspective.getLocalResourceURL("spinner")), SwingConstants.CENTER)); - - jpMyFilesContainer.add(jpMyFiles, BorderLayout.CENTER); - alVisiblePanels.add(jpMyFiles); - } - - JPanel jpMyPacksContainer = new JPanel(); - if (Boolean.parseBoolean(myExperimentClient.getSettings().getProperty(MyExperimentClient.INI_MY_STUFF_PACKS))) { - // "My Packs" panel - jpMyPacksContainer.setBorder(BorderFactory.createEtchedBorder()); - jpMyPacksContainer.setLayout(new BorderLayout()); - - ShadedLabel l2 = new ShadedLabel("My Packs", ShadedLabel.BLUE); - jpMyPacksContainer.add(l2, BorderLayout.NORTH); - - jpMyPacks = new JPanel(); - jpMyPacks.setLayout(new BorderLayout()); - jpMyPacks.setBackground(Color.WHITE); - jpMyPacks.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); - jpMyPacks.add(new JLabel("Loading...", new ImageIcon(MyExperimentPerspective.getLocalResourceURL("spinner")), SwingConstants.CENTER)); - - jpMyPacksContainer.add(jpMyPacks, BorderLayout.CENTER); - alVisiblePanels.add(jpMyPacks); - } - - // ..putting everything together - JPanel jpEverything = new JPanel(); - jpEverything.setLayout(new GridBagLayout()); - - GridBagConstraints gbConstraints = new GridBagConstraints(); - gbConstraints.anchor = GridBagConstraints.NORTHWEST; - gbConstraints.fill = GridBagConstraints.BOTH; - gbConstraints.gridx = 0; - gbConstraints.weightx = 1; - gbConstraints.weighty = 1; - int index = 0; - - gbConstraints.gridy = index++; - jpEverything.add(jpMyWorkflowsContainer, gbConstraints); - - gbConstraints.gridy = index++; - jpEverything.add(jpMyFilesContainer, gbConstraints); - - gbConstraints.gridy = index++; - jpEverything.add(jpMyPacksContainer, gbConstraints); - - this.setLayout(new BorderLayout()); - this.add(jpEverything, BorderLayout.NORTH); - } - - private void initialiseData() { - // Make call to myExperiment API in a different thread - // (then use SwingUtilities.invokeLater to update the UI when ready). - new Thread("Loading data about contributions of current user.") { - @SuppressWarnings("unchecked") - public void run() { - logger.debug("Loading contributions data for current user"); - - try { - final ArrayList<Workflow> alWorkflowInstances = new ArrayList<Workflow>(); - if (alVisiblePanels.contains(jpMyWorkflows)) { - boolean anyMore = true; - for (int page = 1; anyMore; page++) { - // fetch all user workflows - Document doc = myExperimentClient.getUserContributions(myExperimentClient.getCurrentUser(), Resource.WORKFLOW, Resource.REQUEST_SHORT_LISTING, page); - if (doc != null) { - List<Element> foundElements = doc.getRootElement().getChildren(); - anyMore = !foundElements.isEmpty(); - for (Element e : foundElements) { - Workflow wfCurrent = Workflow.buildFromXML(e, logger); - alWorkflowInstances.add(wfCurrent); - } - } - } - } - - final ArrayList<File> alFileInstances = new ArrayList<File>(); - if (alVisiblePanels.contains(jpMyFiles)) { - boolean anyMore = true; - for (int page = 1; anyMore; page++) { - // fetch all user files - Document doc = myExperimentClient.getUserContributions(myExperimentClient.getCurrentUser(), Resource.FILE, Resource.REQUEST_SHORT_LISTING, page); - if (doc != null) { - List<Element> foundElements = doc.getRootElement().getChildren(); - anyMore = !foundElements.isEmpty(); - for (Element e : foundElements) { - File fCurrent = File.buildFromXML(e, logger); - alFileInstances.add(fCurrent); - } - } - } - } - - final ArrayList<Pack> alPackInstances = new ArrayList<Pack>(); - if (alVisiblePanels.contains(jpMyPacks)) { - boolean anyMore = true; - for (int page = 1; anyMore; page++) { - // fetch all user packs - Document doc = myExperimentClient.getUserContributions(myExperimentClient.getCurrentUser(), Resource.PACK, Resource.REQUEST_SHORT_LISTING, page); - if (doc != null) { - List<Element> foundElements = doc.getRootElement().getChildren(); - anyMore = !foundElements.isEmpty(); - for (Element e : foundElements) { - Pack pCurrent = Pack.buildFromXML(e, myExperimentClient, logger); - alPackInstances.add(pCurrent); - } - } - } - } - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - // now create views for all user contributions - if (alVisiblePanels.contains(jpMyWorkflows)) { - // .. workflows .. - jpMyWorkflowsContent = new ResourceListPanel(pluginMainComponent, myExperimentClient, logger); - jpMyWorkflowsContent.setFullSizeItemsList(false); - jpMyWorkflowsContent.setListItems(new ArrayList<Resource>(alWorkflowInstances)); - - spMyWorkflowsContent = new JScrollPane(jpMyWorkflowsContent); - spMyWorkflowsContent.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL); - - jpMyWorkflows.removeAll(); - jpMyWorkflows.setBackground(null); // return background to default colour - jpMyWorkflows.setBorder(BorderFactory.createEmptyBorder()); // remove border that was added prior to loading - jpMyWorkflows.add(spMyWorkflowsContent); - - alVisiblePanelsWithHelperElements.add(new JComponent[] { jpMyWorkflows, spMyWorkflowsContent, jpMyWorkflowsContent }); - } - - if (alVisiblePanels.contains(jpMyFiles)) { - // .. files .. - jpMyFilesContent = new ResourceListPanel(pluginMainComponent, myExperimentClient, logger); - jpMyFilesContent.setFullSizeItemsList(false); - jpMyFilesContent.setListItems(new ArrayList<Resource>(alFileInstances)); - - spMyFilesContent = new JScrollPane(jpMyFilesContent); - spMyFilesContent.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL); - - jpMyFiles.removeAll(); - jpMyFiles.setBackground(null); // return background to default colour - jpMyFiles.setBorder(BorderFactory.createEmptyBorder()); // remove border that was added prior to loading - jpMyFiles.add(spMyFilesContent); - - alVisiblePanelsWithHelperElements.add(new JComponent[] { jpMyFiles, spMyFilesContent, jpMyFilesContent }); - } - - if (alVisiblePanels.contains(jpMyPacks)) { - // .. packs .. - jpMyPacksContent = new ResourceListPanel(pluginMainComponent, myExperimentClient, logger); - jpMyPacksContent.setFullSizeItemsList(false); - jpMyPacksContent.setListItems(new ArrayList<Resource>(alPackInstances)); - - spMyPacksContent = new JScrollPane(jpMyPacksContent); - spMyPacksContent.getVerticalScrollBar().setUnitIncrement(ResourcePreviewBrowser.PREFERRED_SCROLL); - - jpMyPacks.removeAll(); - jpMyPacks.setBackground(null); // return background to default colour - jpMyPacks.setBorder(BorderFactory.createEmptyBorder()); // remove border that was added prior to loading - jpMyPacks.add(spMyPacksContent); - - alVisiblePanelsWithHelperElements.add(new JComponent[] { jpMyPacks, spMyPacksContent, jpMyPacksContent }); - } - - // now work out correct sizes for each section - the goal is to maximize the usage of the space on the page - - int iFullAvailableHeight = getSize().height; - ArrayList<Integer> alIndexesToScale = new ArrayList<Integer>(); - for (int i = 0; i < alVisiblePanelsWithHelperElements.size(); i++) { - JScrollPane spContent = (JScrollPane) alVisiblePanelsWithHelperElements.get(i)[1]; - JPanel jpContent = (JPanel) alVisiblePanelsWithHelperElements.get(i)[2]; - - if ((jpContent.getPreferredSize().height + TOTAL_SECTION_VSPACING) < (iFullAvailableHeight / alVisiblePanels.size())) { - Dimension d = jpContent.getPreferredSize(); - d.height += SCROLL_PANE_PADDING; - spContent.setPreferredSize(d); - - iFullAvailableHeight -= (jpContent.getPreferredSize().height) - + TOTAL_SECTION_VSPACING; - } else - alIndexesToScale.add(i); - } - - if (alIndexesToScale.size() > 0) { - Dimension d = new Dimension(); - - for (Integer i : alIndexesToScale) { - d.height = (iFullAvailableHeight / alIndexesToScale.size()) - - TOTAL_SECTION_VSPACING; - if (d.height > ((JPanel) alVisiblePanelsWithHelperElements.get(i)[2]).getPreferredSize().height - + SCROLL_PANE_PADDING) - d.height = ((JPanel) alVisiblePanelsWithHelperElements.get(i)[2]).getPreferredSize().height - + SCROLL_PANE_PADDING; - - JScrollPane spCurrent = (JScrollPane) alVisiblePanelsWithHelperElements.get(i)[1]; - spCurrent.setPreferredSize(d); - } - } - - // report that this component has been loaded - pluginMainComponent.getMyStuffTab().cdlComponentLoadingDone.countDown(); - - validate(); - repaint(); - } - }); - } catch (Exception ex) { - logger.error("Failed to populate some panel in My Stuff tab (User's files, workflows or packs)", ex); - } - } - }.start(); - } - - public void actionPerformed(ActionEvent arg0) { - javax.swing.JOptionPane.showMessageDialog(null, "button clicked"); - } - -}
