/* *------------------------------------------------------------------------------ * Copyright (C) 2006-2014 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.agents.dataBrowser.view; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.SwingUtilities; import javax.swing.filechooser.FileFilter; //Third-party libraries //Application-internal dependencies import org.openmicroscopy.shoola.agents.dataBrowser.DataBrowserAgent; import org.openmicroscopy.shoola.agents.dataBrowser.IconManager; import org.openmicroscopy.shoola.agents.dataBrowser.util.FilteringDialog; import org.openmicroscopy.shoola.agents.dataBrowser.util.QuickFiltering; import org.openmicroscopy.shoola.agents.util.SelectionWizard; import org.openmicroscopy.shoola.agents.util.ui.EditorDialog; import org.openmicroscopy.shoola.env.config.Registry; import org.openmicroscopy.shoola.env.data.util.FilterContext; import org.openmicroscopy.shoola.util.filter.file.ExcelFilter; import org.openmicroscopy.shoola.util.ui.RatingComponent; import org.openmicroscopy.shoola.util.ui.UIUtilities; import org.openmicroscopy.shoola.util.ui.filechooser.FileChooser; import org.openmicroscopy.shoola.util.ui.search.SearchObject; import org.openmicroscopy.shoola.util.ui.search.SearchUtil; import omero.gateway.model.DatasetData; import omero.gateway.model.TagAnnotationData; import omero.gateway.model.TextualAnnotationData; /** * The tool bar of {@link DataBrowser}. * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @author Donald MacDonald      * <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a> * @version 3.0 * @since OME3.0 */ class DataBrowserToolBar extends JPanel implements ActionListener, PropertyChangeListener { /** The text of the menu. */ private static final String ITEMS_PER_ROW_TEXT = "Set the number of " + "elements per row."; /** The text of the menu. */ private static final String FILTER_BY = "Filter by: "; /** ID to bring up the add thumbnail view to the node.. */ private static final int ROLL_OVER = 10; /** ID to create a new dataset. */ private static final int NEW_OBJECT = 11; /** ID to bring a slide show view with the displayed images. */ private static final int SLIDE_SHOW_IMAGES = 12; /** ID to bring a slide show view with the selected images. */ private static final int SLIDE_SHOW_SELECTION = 13 ; /** ID to bring up the metadata browser. */ private static final int ITEMS_PER_ROW = 14; /** ID to bring up the metadata browser. */ private static final int REPORT = 15; /** ID to select an existing dataset. */ private static final int EXISTING_OBJECT = 16; /** ID to load the tags to filter by. */ private static final int TAG_FILTER = 17; /** Reference to the control. */ private DataBrowserControl controller; /** Reference to the view. */ private DataBrowserUI view; /** Reference to the Model. */ private DataBrowserModel model; /** Reference to the quick search. */ private QuickFiltering search; /** Button to bring up the filtering dialog. */ private JButton filterButton; /** Button to bring up menu. */ private JButton filterByMenuButton; /** The filtering dialog. */ private FilteringDialog filteringDialog; /** Button to select the thumbnails view. */ private JToggleButton thumbView; /** Button to select the table view. */ private JToggleButton columnsView; /** Button to order alphabetically. */ private JToggleButton orderByName; /** Button to order by imported date. */ private JToggleButton orderByDate; /** Button to select the slide show view. */ private JButton slideShowView; /** Button to add the metadata. */ private JButton managementButton; /** Button to refresh the display. */ private JButton refreshButton; /** Button to refresh the display. */ private JButton saveButton; /** Menu displaying the annotated options. */ private JPopupMenu slideViewMenu; /** Menu displaying the annotated options. */ private JPopupMenu manageMenu; /** The item used to select the roll over mode. */ private JCheckBoxMenuItem rollOverItem; /** * Button to display a magnified thumbnail if selected when * the user mouses over a node. */ private JToggleButton rollOverButton; /** Button to create a dataset. */ private JButton createDatasetButton; /** TextField hosting the number of items per row. */ private JTextField itemsPerRow; /** The component hosting the {@link #itemsPerRow}.*/ private JPanel itemsPerRowPane; /** Indicates how many images are shown. */ private JLabel status; /** Indicates how many images are shown. */ private JLabel filteringLabel; /** Button to create an image Tags report. */ private JButton reportButton; /** The menu displaying options to create objects. */ private JPopupMenu createMenu; /** The menu displaying options to filter by. */ private JPopupMenu filterByMenu; /** * Flag indicating that the loading of the tags was done via the code * completion or not. */ private boolean codeCompletion; /** * Displays the available tags and allows the users to select them. * * @param existingTags The tags already saved. */ private void showTagsWizard(Collection existingTags) { if (existingTags == null) return; IconManager icons = IconManager.getInstance(); String title = "Filter By Tags"; String text = "Select the Tags to filter by."; Collection selected = new ArrayList<TagAnnotationData>(); Iterator i = existingTags.iterator(); TagAnnotationData tag; List<String> l = SearchUtil.splitTerms(search.getSearchValue(), SearchUtil.COMMA_SEPARATOR); Collection available = new ArrayList<TagAnnotationData>(); while (i.hasNext()) { tag = (TagAnnotationData) i.next(); if (l.contains(tag.getTagValue())) selected.add(tag); else available.add(tag); } SelectionWizard wizard = new SelectionWizard( DataBrowserAgent.getRegistry().getTaskBar().getFrame(), available, selected, TagAnnotationData.class, false, DataBrowserAgent.getUserDetails()); wizard.setTitle(title, text, icons.getIcon(IconManager.TAG_FILTER_48)); wizard.addPropertyChangeListener(this); UIUtilities.centerAndShow(wizard); } /** * Creates the menu displaying the options to load existing objects. * * @return See above. */ private JPopupMenu createFilterByMenu() { if (filterByMenu != null) return filterByMenu; filterByMenu = new JPopupMenu(); IconManager icons = IconManager.getInstance(); JMenuItem menuItem = new JMenuItem("Load Tags to filter by..."); menuItem.setToolTipText("Load the existing Tags to filter by."); menuItem.setIcon(icons.getIcon(IconManager.TAG_FILTER)); menuItem.addActionListener(this); menuItem.setActionCommand(""+TAG_FILTER); filterByMenu.add(menuItem); return filterByMenu; } /** * Creates the menu displaying various create options. * * @return See above. */ private JPopupMenu createNewObjectMenu() { if (createMenu != null) return createMenu; IconManager icons = IconManager.getInstance(); createMenu = new JPopupMenu(); JMenuItem menuItem = new JMenuItem("New Dataset"); menuItem.setToolTipText("Create a Dataset."); menuItem.setIcon(icons.getIcon(IconManager.CREATE)); menuItem.addActionListener(this); menuItem.setActionCommand(""+NEW_OBJECT); menuItem.setEnabled(model.canLinkParent()); createMenu.add(menuItem); menuItem = new JMenuItem("Existing Dataset"); menuItem.setToolTipText("Select a dataset to add the images to."); menuItem.setIcon(icons.getIcon(IconManager.DATASET)); menuItem.addActionListener(this); menuItem.setActionCommand(""+EXISTING_OBJECT); createMenu.add(menuItem); menuItem.setEnabled(model.canLinkParent()); return createMenu; } /** * Creates the menu displaying various management options. * * @return See above. */ private JPopupMenu createManageMenu() { if (manageMenu != null) return manageMenu; IconManager icons = IconManager.getInstance(); manageMenu = new JPopupMenu(); JMenuItem menuItem = new JMenuItem("New Dataset"); menuItem.setToolTipText("Create a Dataset."); menuItem.setIcon(icons.getIcon(IconManager.CREATE)); menuItem.addActionListener(this); menuItem.setActionCommand(""+NEW_OBJECT); menuItem.setEnabled(model.canLinkParent()); manageMenu.add(menuItem); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); JLabel l = new JLabel(icons.getIcon(IconManager.TRANSPARENT)); l.setText(ITEMS_PER_ROW_TEXT); panel.add(Box.createHorizontalStrut(5)); panel.add(l); itemsPerRow = new JTextField(3); itemsPerRow.addActionListener(this); itemsPerRow.setActionCommand(""+ITEMS_PER_ROW); panel.add(itemsPerRow); manageMenu.add(panel); //manageMenu.add(itemsPerRow); rollOverItem = new JCheckBoxMenuItem(); rollOverItem.setIcon(icons.getIcon(IconManager.ROLL_OVER)); rollOverItem.setText("Mouse over and Magnify"); rollOverItem.addActionListener(this); rollOverItem.setActionCommand(""+ROLL_OVER); manageMenu.add(rollOverItem); return manageMenu; } /** * Creates the menu displaying the annotation options. * * @return See above. */ private JPopupMenu createSlideViewMenu() { if (slideViewMenu != null) return slideViewMenu; slideViewMenu = new JPopupMenu(); JMenuItem item = new JMenuItem("View Selected Images"); item.addActionListener(this); item.setActionCommand(""+SLIDE_SHOW_SELECTION); slideViewMenu.add(item); item = new JMenuItem("View Displayed Images"); item.addActionListener(this); item.setActionCommand(""+SLIDE_SHOW_IMAGES); slideViewMenu.add(item); return slideViewMenu; } /** Sets the value of the filtering dialog. */ private void setFilteringValue() { SearchObject filter = search.getSelectedNode(); if (filter == null || filter.getIndex()==QuickSearch.NONE) return; filteringDialog.unselectAll(); switch (filter.getIndex()) { case QuickSearch.UNTAGGED: filteringDialog.setTagsText(""); break; case QuickSearch.TAGS: filteringDialog.setTagsText(search.getSearchValue()); break; case QuickSearch.UNCOMMENTED: filteringDialog.setCommentsText(""); break; case QuickSearch.COMMENTS: filteringDialog.setCommentsText(search.getSearchValue()); break; case QuickSearch.RATED_ONE_OR_BETTER: filteringDialog.setRatingLevel(DataBrowser.RATE_ONE); break; case QuickSearch.RATED_TWO_OR_BETTER: filteringDialog.setRatingLevel(DataBrowser.RATE_TWO); break; case QuickSearch.RATED_THREE_OR_BETTER: filteringDialog.setRatingLevel(DataBrowser.RATE_THREE); break; case QuickSearch.RATED_FOUR_OR_BETTER: filteringDialog.setRatingLevel(DataBrowser.RATE_FOUR); break; case QuickSearch.RATED_FIVE: filteringDialog.setRatingLevel(DataBrowser.RATE_FIVE); break; case QuickSearch.UNRATED: filteringDialog.setRatingLevel(RatingComponent.MIN_VALUE); break; case QuickSearch.HAS_ROIS: filteringDialog.setHasROIs(); break; case QuickSearch.NO_ROIS: filteringDialog.setNoROIs(); break; } } /** * Brings up the filtering dialog. * * @param location The location of the mouse pressed. */ private void showFilteringDialog(Point location) { if (filteringDialog == null) { Registry reg = DataBrowserAgent.getRegistry(); filteringDialog = new FilteringDialog(reg.getTaskBar().getFrame()); filteringDialog.addPropertyChangeListener(controller); filteringDialog.setTags(view.getExistingTags(), false); } setFilteringValue(); SwingUtilities.convertPointToScreen(location, filterButton); filteringDialog.setLocation(location); filteringDialog.setVisible(true); } /** Initializes the components. */ private void initComponents() { filteringLabel = new JLabel(); filteringLabel.setFont(filteringLabel.getFont().deriveFont(Font.BOLD)); status = new JLabel(); status.setFont(status.getFont().deriveFont(Font.BOLD)); IconManager icons = IconManager.getInstance(); String text = null; if (model.getType() == DataBrowserModel.GROUP) text = "users"; search = new QuickFiltering(text); search.setDefaultText(text); search.addPropertyChangeListener(controller); filterButton = new JButton(icons.getIcon(IconManager.FILTERING)); filterButton.setToolTipText("Filter elements displayed in " + "the Workspace."); filterButton.addMouseListener(new MouseAdapter() { /** * Brings up the filtering dialog. * @see MouseAdapter#mouseReleased(MouseEvent) */ public void mouseReleased(MouseEvent e) { showFilteringDialog(e.getPoint()); } }); filterButton.addPropertyChangeListener(controller); UIUtilities.unifiedButtonLookAndFeel(filterButton); filterByMenuButton = new JButton(icons.getIcon( IconManager.FILTER_BY_MENU)); filterByMenuButton.addMouseListener(new MouseAdapter() { /** * Brings up the filtering dialog. * @see MouseAdapter#mouseReleased(MouseEvent) */ public void mouseReleased(MouseEvent e) { createFilterByMenu(); Point p = e.getPoint(); filterByMenu.show(filterByMenuButton, p.x, p.y); } }); UIUtilities.unifiedButtonLookAndFeel(filterByMenuButton); ButtonGroup group = new ButtonGroup(); int index = view.getSelectedView(); thumbView = new JToggleButton( icons.getIcon(IconManager.THUMBNAIL_VIEW)); thumbView.setToolTipText("View as Thumbnails."); thumbView.addActionListener(this); thumbView.setActionCommand(""+DataBrowserUI.THUMB_VIEW); thumbView.setSelected(index == DataBrowserUI.THUMB_VIEW); group.add(thumbView); columnsView = new JToggleButton( icons.getIcon(IconManager.COLUMN_VIEW)); columnsView.setToolTipText("View as List."); columnsView.addActionListener(this); columnsView.setActionCommand(""+DataBrowserUI.COLUMNS_VIEW); columnsView.setSelected(index == DataBrowserUI.COLUMNS_VIEW); group.add(columnsView); slideShowView = new JButton( icons.getIcon(IconManager.SLIDE_SHOW_VIEW)); slideShowView.setToolTipText("Show slideshow."); UIUtilities.unifiedButtonLookAndFeel(slideShowView); slideShowView.addActionListener(this); slideShowView.setActionCommand(""+SLIDE_SHOW_IMAGES); /* slideShowView.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { createSlideViewMenu().show(slideShowView, e.getX(), e.getY()); } }); */ //group.add(slideShowView); managementButton = new JButton(icons.getIcon(IconManager.MANAGER)); UIUtilities.unifiedButtonLookAndFeel(managementButton); managementButton.setToolTipText("Manage elements."); managementButton.addMouseListener(new MouseAdapter() { /** * Brings up the filtering dialog. * @see MouseAdapter#mouseReleased(MouseEvent) */ public void mouseReleased(MouseEvent e) { createManageMenu().show(managementButton, e.getX(), e.getY()); } }); group = new ButtonGroup(); orderByName = new JToggleButton( icons.getIcon(IconManager.SORT_BY_NAME)); orderByName.setToolTipText("Order elements by name."); orderByName.addActionListener(this); orderByName.setActionCommand(""+DataBrowserUI.SORT_BY_NAME); orderByName.setSelected(true); group.add(orderByName); orderByDate = new JToggleButton( icons.getIcon(IconManager.SORT_BY_DATE)); if (model.getType() != DataBrowserModel.GROUP) { orderByDate.setToolTipText("Order images by acquisition date."); } else orderByDate.setToolTipText("Order users by creation date."); orderByDate.addActionListener(this); orderByDate.setActionCommand(""+DataBrowserUI.SORT_BY_DATE); group.add(orderByDate); refreshButton = new JButton(controller.getAction( DataBrowserControl.REFRESH)); UIUtilities.unifiedButtonLookAndFeel(refreshButton); // rollOverButton = new JToggleButton(); rollOverButton.setIcon(icons.getIcon(IconManager.ROLL_OVER)); rollOverButton.setToolTipText("Turn on/off the magnification " + "of a thumbnail while mousing over it."); rollOverButton.addActionListener(this); rollOverButton.setActionCommand(""+ROLL_OVER); createDatasetButton = new JButton(); createDatasetButton.setToolTipText("Create a new dataset containing " + "the displayed images."); UIUtilities.unifiedButtonLookAndFeel(createDatasetButton); createDatasetButton.setIcon(icons.getIcon(IconManager.DATASET)); createDatasetButton.setEnabled(model.canLinkParent()); createDatasetButton.addMouseListener(new MouseAdapter() { /** * Brings up the create menu. * @see MouseAdapter#mouseReleased(MouseEvent) */ public void mouseReleased(MouseEvent e) { createNewObjectMenu().show(createDatasetButton, e.getX(), e.getY()); } }); itemsPerRow = new JTextField(3); itemsPerRow.setToolTipText(ITEMS_PER_ROW_TEXT); itemsPerRow.addActionListener(this); itemsPerRow.setActionCommand(""+ITEMS_PER_ROW); saveButton = new JButton( controller.getAction(DataBrowserControl.SAVE_AS)); UIUtilities.unifiedButtonLookAndFeel(saveButton); reportButton = new JButton(); reportButton.setToolTipText("Create a report."); reportButton.setIcon(icons.getIcon(IconManager.REPORT)); reportButton.addActionListener(this); reportButton.setActionCommand(""+REPORT); reportButton.setEnabled(model.canLinkParent()); UIUtilities.unifiedButtonLookAndFeel(reportButton); addPropertyChangeListener(controller); codeCompletion = true; } /** * Builds the tool bar with the various control for the view. * * @return See above. */ private JToolBar buildViewsBar() { JToolBar bar = new JToolBar(); bar.setFloatable(false); bar.setBorder(null); bar.setRollover(true); bar.add(thumbView); bar.add(columnsView); bar.add(refreshButton); bar.add(Box.createHorizontalStrut(2)); bar.add(new JSeparator(JSeparator.VERTICAL)); bar.add(Box.createHorizontalStrut(2)); bar.add(orderByName); bar.add(orderByDate); bar.add(Box.createHorizontalStrut(2)); bar.add(new JSeparator(JSeparator.VERTICAL)); bar.add(Box.createHorizontalStrut(2)); bar.add(rollOverButton); if (model.getType() != DataBrowserModel.GROUP) { bar.add(reportButton); bar.add(saveButton); bar.add(new JSeparator(JSeparator.VERTICAL)); } itemsPerRowPane = new JPanel(); itemsPerRowPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)); itemsPerRowPane.add(new JLabel("# per row:")); itemsPerRowPane.add(itemsPerRow); itemsPerRowPane.setToolTipText(itemsPerRow.getToolTipText()); bar.add(itemsPerRowPane); return bar; } /** Builds and lays out the UI. */ private void buildGUI() { JPanel content = new JPanel(); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); JPanel p = new JPanel(); JToolBar bar = new JToolBar(); bar.setFloatable(false); bar.setBorder(null); bar.setRollover(true); bar.add(filterButton); bar.add(filterByMenuButton); p.add(bar); p.add(search); p.add(buildViewsBar()); content.add(p); JPanel text = new JPanel(); text.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); JPanel labelPane = new JPanel(); labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.X_AXIS)); labelPane.add(status); labelPane.add(Box.createHorizontalStrut(10)); labelPane.add(filteringLabel); text.add(labelPane); content.add(text); setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); add(content); } /** Creates a report. */ private void report() { List<FileFilter> filterList = new ArrayList<FileFilter>(); FileFilter filter = new ExcelFilter(); filterList.add(filter); JFrame frame = DataBrowserAgent.getRegistry().getTaskBar().getFrame(); FileChooser chooser = new FileChooser(frame, FileChooser.SAVE, "Create a report", "Create a tag report", filterList); IconManager icons = IconManager.getInstance(); chooser.setTitleIcon(icons.getIcon(IconManager.REPORT_48)); try { File f = UIUtilities.getDefaultFolder(); if (f != null) chooser.setCurrentDirectory(f); } catch (Exception ex) {} int option = chooser.centerDialog(); if (option != JFileChooser.APPROVE_OPTION) return; File file = chooser.getFormattedSelectedFile(); controller.createReport(file.getAbsolutePath()); } /** * Creates a new instance. * * @param model Reference to the Model. Mustn't be <code>null</code>. * @param view Reference to the view. Mustn't be <code>null</code>. * @param controller Reference to the control. * Mustn't be <code>null</code>. */ DataBrowserToolBar(DataBrowserModel model, DataBrowserUI view, DataBrowserControl controller) { if (controller == null) throw new IllegalArgumentException("No control."); if (view == null) throw new IllegalArgumentException("No view."); if (model == null) throw new IllegalArgumentException("No model."); this.model = model; this.controller = controller; this.view = view; initComponents(); buildGUI(); } /** * Returns the number of items per row. * * @return See above. */ int getItemsPerRow() { int row = -1; try { row = Integer.parseInt(itemsPerRow.getText()); } catch(NumberFormatException nfe) {} if (row < 0) row = 0;//LayoutUtils.DEFAULT_PER_ROW; return row; } /** * Sets the selected view index. * * @param index The value to set. */ void setSelectedViewIndex(int index) { thumbView.removeActionListener(this); columnsView.removeActionListener(this); thumbView.setSelected(index == DataBrowserUI.THUMB_VIEW); columnsView.setSelected(index == DataBrowserUI.COLUMNS_VIEW); itemsPerRowPane.setVisible(index == DataBrowserUI.THUMB_VIEW); thumbView.addActionListener(this); columnsView.addActionListener(this); } /** * Sets the enable flag of the {@link #slideShowView}. * * @param enable The value to set. */ void enableSlideShow(boolean enable) { slideShowView.setEnabled(enable); } /** * Returns the selected object in order to filter the node. * * @return See above. */ SearchObject getSelectedFilter() { return search.getSelectedNode(); } /** * Sets the collection of tags. * * @param tags */ void setTags(Collection tags) { search.setTags(tags); if (filteringDialog != null && filteringDialog.isVisible()) filteringDialog.setTags(tags, true); else { if (!codeCompletion) { codeCompletion = false; showTagsWizard(tags); } } } /** Invokes when the parent has been set. */ void onExperimenterSet() { createDatasetButton.setEnabled(model.canLinkParent()); } /** * Sets the number of images. * * @param value The number of images displayed. * @param total The total number of images. */ void setNumberOfImages(int value, int total) { String s = "Workspace: "+value+" of "+total; if (model.getType() == DataBrowserModel.GROUP) s += " user"; else s += " image"; if (total > 1) s += "s"; status.setText(s); status.repaint(); } /** * Sets the text of the filtered label. * * @param value The value to set. */ void setFilterLabel(String value) { if (value != null && value.length() > 0) filteringLabel.setText(FILTER_BY+value); else filteringLabel.setText(""); } /** * Sets the filtering status. * * @param busy Pass <code>true</code> if filtering, <code>false</code> * otherwise. */ void setFilterStatus(boolean busy) { search.setFilteringStatus(busy); } /** * Sets the filtering context. * * @param context The context to handle. */ void filterByContext(FilterContext context) { if (context == null) return; List<String> terms; search.setSearchEnabled(true); switch (context.getContext()) { case FilterContext.MULTI: List<Integer> c = context.getContextList(); String text = ""; if (c.contains(FilterContext.RATE)) text += SearchComponent.NAME_RATE; if (c.contains(FilterContext.TAG)) { if (text.length() != 0) text += ", "; text += SearchComponent.NAME_TAGS; } if (c.contains(FilterContext.COMMENT)) { if (text.length() != 0) text += ", "; text += SearchComponent.NAME_COMMENTS; } if (c.contains(FilterContext.NAME)) { if (text.length() != 0) text += ", "; text += SearchComponent.NAME_TEXT; } if (c.contains(FilterContext.ROI)) { if (text.length() != 0) text += ", "; text += SearchComponent.NAME_ROIS; } setFilterLabel(text); search.setSearchContext(QuickSearch.NONE); break; case FilterContext.NONE: search.setSearchContext(QuickSearch.SHOW_ALL); setFilterLabel(""); search.setSearchEnabled(false); search.setFilteringStatus(false); break; case FilterContext.RATE: search.setSearchEnabled(false); setFilterLabel(SearchComponent.NAME_RATE); if (context.getRateIndex() != FilterContext.LOWER_EQUAL) { switch (context.getRate()) { case 0: setFilterLabel(SearchComponent.UNRATED); search.setSearchContext(QuickSearch.UNRATED); break; case 1: search.setSearchContext( QuickSearch.RATED_ONE_OR_BETTER); break; case 2: search.setSearchContext( QuickSearch.RATED_TWO_OR_BETTER); break; case 3: search.setSearchContext( QuickSearch.RATED_THREE_OR_BETTER); break; case 4: search.setSearchContext( QuickSearch.RATED_FOUR_OR_BETTER); break; case 5: search.setSearchContext(QuickSearch.RATED_FIVE); break; } } break; case FilterContext.TAG: setFilterLabel(SearchComponent.NAME_TAGS); search.setSearchContext(QuickSearch.TAGS); terms = context.getAnnotation(TagAnnotationData.class); if (terms != null) { search.setSearchValue(terms, codeCompletion); //reset codeCompletion = true; } break; case FilterContext.COMMENT: setFilterLabel(SearchComponent.NAME_COMMENTS); search.setSearchContext(QuickSearch.COMMENTS); terms = context.getAnnotation(TextualAnnotationData.class); if (terms != null) search.setSearchValue(terms, true); break; case FilterContext.NAME: setFilterLabel(SearchComponent.NAME_TEXT); search.setSearchContext(QuickSearch.FULL_TEXT); //terms = context.getAnnotation(TextualAnnotationData.class); //if (terms != null) search.setSearchValue(terms); break; case FilterContext.ROI: if(context.getRoiIndex()==FilterContext.GREATER_EQUAL && context.getROIs()==1) { search.setSearchContext(QuickSearch.HAS_ROIS); setFilterLabel(SearchComponent.HAS_ROIS_TEXT); } else if(context.getRoiIndex()==FilterContext.EQUAL && context.getROIs()==0) { search.setSearchContext(QuickSearch.NO_ROIS); setFilterLabel(SearchComponent.NO_ROIS_TEXT); } else { search.setSearchContext(QuickSearch.NONE); } break; } } /** * Sets the specified view. * @see ActionListener#actionPerformed(ActionEvent) */ public void actionPerformed(ActionEvent e) { int index = Integer.parseInt(e.getActionCommand()); switch (index) { case DataBrowserUI.THUMB_VIEW: case DataBrowserUI.COLUMNS_VIEW: view.setSelectedView(index); if (index == DataBrowserUI.THUMB_VIEW && !model.hasThumbnailsBeenLoaded()) model.loadData(false, null); break; case ROLL_OVER: //view.setRollOver(rollOverItem.isSelected()); view.setRollOver(rollOverButton.isSelected()); break; case NEW_OBJECT: Registry reg = DataBrowserAgent.getRegistry(); DatasetData d = new DatasetData(); EditorDialog dialog = new EditorDialog( reg.getTaskBar().getFrame(), d, false); dialog.addPropertyChangeListener(controller); UIUtilities.centerAndShow(dialog); break; case ITEMS_PER_ROW: view.setItemsPerRow(getItemsPerRow()); break; case SLIDE_SHOW_IMAGES: case SLIDE_SHOW_SELECTION: view.slideShowView(true); break; //view.slideShowView(true, false); case DataBrowserUI.SORT_BY_NAME: case DataBrowserUI.SORT_BY_DATE: view.sortBy(index); break; case REPORT: report(); break; case EXISTING_OBJECT: controller.loadExistingDatasets(); break; case TAG_FILTER: codeCompletion = false; if (search.getTags() == null) { firePropertyChange(QuickFiltering.TAG_LOADING_PROPERTY, Boolean.valueOf(false), Boolean.valueOf(true)); } else showTagsWizard(search.getTags()); } } /** * Listens to properties this component listened to. * @see PropertyChangeListener#propertyChange(PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); if (SelectionWizard.SELECTED_ITEMS_PROPERTY.equals(name)) { Map m = (Map) evt.getNewValue(); if (m == null || m.size() != 1) return; Set set = m.entrySet(); Entry entry; Iterator i = set.iterator(); Class type; codeCompletion = false; search.setSearchContext(QuickFiltering.TAGS); while (i.hasNext()) { entry = (Entry) i.next(); type = (Class) entry.getKey(); search.setSelectedTags((Collection) entry.getValue()); } } else if (SelectionWizard.CANCEL_SELECTION_PROPERTY.equals(name)) { codeCompletion = false; search.setFilteringStatus(false); } } }