/* *------------------------------------------------------------------------------ * Copyright (C) 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.BorderLayout; import java.awt.Component; import java.awt.Point; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import org.openmicroscopy.shoola.agents.dataBrowser.browser.ImageDisplay; import org.openmicroscopy.shoola.agents.dataBrowser.browser.ImageNode; import org.openmicroscopy.shoola.agents.dataBrowser.browser.ImageSet; import org.openmicroscopy.shoola.agents.treeviewer.TreeViewerAgent; import org.openmicroscopy.shoola.agents.treeviewer.view.SearchSelectionEvent; import org.openmicroscopy.shoola.util.ui.UIUtilities; import omero.gateway.model.DataObject; import omero.gateway.model.DatasetData; import omero.gateway.model.ImageData; import omero.gateway.model.PlateData; import omero.gateway.model.ProjectData; import omero.gateway.model.ScreenData; /** * A View for displaying a {@link SearchResultCollection} * * @author Dominik Lindner      <a * href="mailto:d.lindner@dundee.ac.uk">d.lindner@dundee.ac.uk</a> * * @since 5.0 */ class SearchResultView extends JPanel { /** Property for showing the context menu */ public static final String CONTEXT_MENU_PROPERTY = "showPopup"; /** Property indicating a selection event */ public static final String SELECTION_PROPERTY = "selected"; /** The DataObjects to be shown */ private List<DataObject> objs = new ArrayList<DataObject>(); /** Reference to the DataBrowserModel */ private AdvancedResultSearchModel browserModel = null; /** Reference to the table displaying the nodes. */ private SearchResultTable objsTable; /** Reference to the 'content' panel, either the table showing the results or the panel indicating that there are no results */ private Component contentPanel; /** * Initializes the components composing the display. * * @param root * The root node of the tree. */ private void initComponents(ImageDisplay root) { Collection<ImageDisplay> nodes = root.getChildrenDisplay(); for (ImageDisplay node : nodes) { DataObject obj = (DataObject) node.getHierarchyObject(); objs.add(obj); } if(objs.isEmpty()) { contentPanel = new JPanel(); ((JPanel)contentPanel).add(new JLabel("No results found")); } else { objsTable = new SearchResultTable(this, objs, browserModel); contentPanel = objsTable; } } /** Builds and lays out the UI. */ private void buildGUI() { setBackground(UIUtilities.BACKGROUND_COLOR); setLayout(new BorderLayout()); add(new JScrollPane(contentPanel), BorderLayout.CENTER); } /** * Fires a Property to display the context menu */ void firePopupEvent(Point location) { // TODO: Disabled for now, context menu does not work for search results // firePropertyChange(CONTEXT_MENU_PROPERTY, null, location); } /** * Fires a Property indicating a selection event * * @param nodes * The selected DataObjects */ void fireSelectionEvent(List<DataObject> nodes) { firePropertyChange(SELECTION_PROPERTY, null, createDisplays(nodes)); TreeViewerAgent.getRegistry().getEventBus() .post(new SearchSelectionEvent(nodes)); } /** * Creates a new instance. * * @param model * Reference to the Model. Mustn't be <code>null</code>. * @param root * The root of the tree. */ SearchResultView(ImageDisplay root, AdvancedResultSearchModel browserModel) { this.browserModel = browserModel; initComponents(root); buildGUI(); } /** * Reloads the table (by creating a new TableModel) */ void refreshTable() { if(objsTable!=null) objsTable.refreshTable(); } /** * Creates the {@link ImageDisplay}s for the given {@link DataObject}s * * @param dataObjs * @return */ private List<ImageDisplay> createDisplays(Collection<DataObject> dataObjs) { List<ImageDisplay> result = new ArrayList<ImageDisplay>(); for (DataObject dataObj : dataObjs) { ImageDisplay d = null; if (dataObj instanceof ImageData) { d = new ImageNode("", dataObj, null); } else if (dataObj instanceof ProjectData || dataObj instanceof DatasetData || dataObj instanceof ScreenData || dataObj instanceof PlateData) { d = new ImageSet("", dataObj); } if (d != null) result.add(d); } return result; } }