/*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2016 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.metadata.view;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import javax.swing.JComponent;
import javax.swing.JFrame;
import org.openmicroscopy.shoola.agents.metadata.browser.TreeBrowserDisplay;
import org.openmicroscopy.shoola.agents.metadata.editor.Editor;
import org.openmicroscopy.shoola.agents.metadata.rnd.Renderer;
import org.openmicroscopy.shoola.agents.metadata.util.DataToSave;
import org.openmicroscopy.shoola.env.data.model.ScriptObject;
import omero.gateway.SecurityContext;
import org.openmicroscopy.shoola.env.data.util.StructuredDataResults;
import org.openmicroscopy.shoola.env.rnd.RndProxyDef;
import org.openmicroscopy.shoola.util.ui.component.ObservableComponent;
import omero.gateway.model.AnnotationData;
import omero.gateway.model.ChannelData;
import omero.gateway.model.DataObject;
import omero.gateway.model.ExperimenterData;
/**
* Defines the interface provided by the viewer component.
* The Viewer provides a component hosting a browser for metadata.
*
* When the user quits the window, the {@link #discard() discard} method is
* invoked and the object transitions to the {@link #DISCARDED} state.
* At which point, all clients should de-reference the component to allow for
* garbage collection.
*
* @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
*/
public interface MetadataViewer
extends ObservableComponent
{
/** Indicates to run the script. */
public static final int RUN = 100;
/** Indicates to download the script. */
public static final int DOWNLOAD = 101;
/** Indicates to view the script. */
public static final int VIEW = 102;
/** Indicates to select the renderer tab. */
public static final int RENDERER_TAB = Editor.RENDERER_TAB;
/** Indicates to select the general tab. */
public static final int GENERAL_TAB = Editor.GENERAL_TAB;
/** Indicates to select the general tab. */
public static final int ACQUISITION_TAB = Editor.ACQUISITION_TAB;
/** Indicates that the renderer is for general purpose. */
public static final int RND_GENERAL = 0;
/** Indicates that the renderer is for specific purpose. */
public static final int RND_SPECIFIC = 1;
/** Bound property indicating that the rendering control is loaded. */
public static final String RND_LOADED_PROPERTY = "rndLoaded";
/** Bound property indicating that the data have been saved. */
public static final String ON_DATA_SAVE_PROPERTY = "onDataSave";
/** Bound property indicating to save the data. */
public static final String SAVE_DATA_PROPERTY = "saveData";
/** Bound property indicating to clear the data to save. */
public static final String CLEAR_SAVE_DATA_PROPERTY = "clearSaveData";
/**
* Bound property indicating that the experimenter or group
* has been updated.
*/
public static final String ADMIN_UPDATED_PROPERTY = "adminUpdated";
/**
* Bound property indicating that parents of the currently edited objects
* are loaded.
*/
public static final String LOADING_PARENTS_PROPERTY = "loadingParents";
/** Bound property indicating to create a movie. */
public static final String CREATING_MOVIE_PROPERTY = "creatingMovie";
/** Bound property indicating to analyze. */
public static final String ANALYSE_PROPERTY = "analyse";
/** Bound property indicating to render a plane. */
public static final String RENDER_PLANE_PROPERTY = "renderPlane";
/** Bound property indicating to generate a thumbnail. */
public static final String RENDER_THUMBNAIL_PROPERTY = "renderThumbnail";
/** Bound property name indicating that a new channel is selected. */
public final static String SELECTED_CHANNEL_PROPERTY = "selectedChannel";
/**
* Bound property indicating to apply settings to all the
* displayed or selected images.
*/
public static final String APPLY_SETTINGS_PROPERTY = "applySettings";
/** Bound property indicating that the settings have been applied. */
public static final String SETTINGS_APPLIED_PROPERTY = "settingsApplied";
/** Bound property indicating to bring up the activity options. */
public static final String ACTIVITY_OPTIONS_PROPERTY = "activityOptions";
/** Bound property indicating to create a figure. */
public static final String GENERATE_FIGURE_PROPERTY = "generateFigure";
/** Bound property indicating to close the renderer. */
public static final String CLOSE_RENDERER_PROPERTY = "closeRenderer";
/**
* Bound property indicating that the color of a channel has been modified.
*/
public static final String CHANNEL_COLOR_CHANGED_PROPERTY =
"channelColorChanged";
/** Bound property indicating to handle a script. */
public static final String HANDLE_SCRIPT_PROPERTY = "handleScript";
/** Bound property indicating to upload a script. */
public static final String UPLOAD_SCRIPT_PROPERTY = "uploadScript";
/** Bound property indicating to register a file. */
public static final String REGISTER_PROPERTY = "register";
/** Bound property indicating to reset password. */
public static final String RESET_PASSWORD_PROPERTY = "resetPassword";
/**
* Bound property indicating the related nodes have been set.
*/
public static final String RELATED_NODES_PROPERTY = "relatedNodes";
/** Flag to denote the <i>New</i> state. */
public static final int NEW = 1;
/** Flag to denote the <i>Loading Metadata</i> state. */
public static final int LOADING_METADATA = 2;
/** Flag to denote the <i>Ready</i> state. */
public static final int READY = 3;
/** Flag to denote the <i>Discarded</i> state. */
public static final int DISCARDED = 4;
/** Flag to denote the <i>Batch Saving</i> state. */
public static final int BATCH_SAVING = 5;
/** Flag to denote the <i>Batch Saving</i> state. */
public static final int SAVING = 6;
/** Indicates to launch the publishing option. */
public static final int PUBLISHING_OPTION = 100;
/** Indicates to launch the analysis option. */
public static final int ANALYSIS_OPTION = 101;
/** Indicates to launch the scripts option. */
public static final int SCRIPTS_OPTION = 102;
/** Indicates to launch the analysis option. */
public static final int SAVE_OPTION = 103;
/**
* Starts the data loading process when the current state is {@link #NEW}
* and puts the window on screen.
* If the state is not {@link #NEW}, then this method simply moves the
* window to front.
*
* @param channelData The channel data if already loaded,
* <code>null</code> otherwise.
* @throws IllegalStateException If the current state is {@link #DISCARDED}.
*/
public void activate(Map channelData);
/**
* Applies the specified rendering settings.
*
* @param rndDef The rendering settings to apply.
*/
public void applyRenderingSettings(RndProxyDef rndDef);
/**
* Transitions the viewer to the {@link #DISCARDED} state.
* Any ongoing data loading is canceled.
*/
public void discard();
/**
* Queries the current state.
*
* @return One of the state flags defined by this interface.
*/
public int getState();
/**
* Cancels any ongoing data loading.
*
* @param loaderID The identifier to the loader to cancel.
*/
public void cancel(int loaderID);
/**
* Feeds the metadata back to the viewer.
*
* @param results The result to feed back.
* @param loader The identifier of the loader.
*/
public void setMetadata(Map<DataObject, StructuredDataResults> results,
int loader);
/**
* Returns the UI used to select the metadata.
*
* @return See above.
*/
public JComponent getSelectionUI();
/**
* Returns the UI used to select the metadata.
*
* @return See above.
*/
public JComponent getEditorUI();
/**
* Returns the Editor to select the metadata.
*
* @return See above.
*/
public Editor getEditor();
/**
* Checks if the renderer has already been initialized
* @return See above.
*/
public boolean isRendererLoaded();
/**
* Returns the component hosted by the view.
*
* @return See above.
*/
public JComponent getUI();
/**
* Sets the root of the metadata browser.
*
* @param root The object to set.
* @param userID The id of the user.
* @param ctx The security context.
*/
public void setRootObject(Object root, long userID, SecurityContext ctx);
/**
* Loads the parent containers of the object hosted by the passed node.
*
* @param node The node to handle.
*/
public void loadContainers(TreeBrowserDisplay node);
/**
* Sets the containers.
*
* @param node The node to handle.
* @param result The value to set.
* @see #loadContainers(TreeBrowserDisplay)
*/
public void setContainers(TreeBrowserDisplay node, Object result);
/**
* Saves the annotations back to the server.
*
* @param object The annotation/link to add or remove.
* @param toDelete The annotations to delete.
* @param metadata The metadata to save.
* @param data The data object to annotate.
* @param asynch Pass <code>true</code> to save data asynchronously,
* <code>false</code> otherwise.
*/
public void saveData(DataToSave object, List<AnnotationData> toDelete,
List<Object> metadata, DataObject data, boolean asynch);
/**
* Returns <code>true</code> if data to save, <code>false</code>
* otherwise.
*
* @return See above.
*/
public boolean hasDataToSave();
/** Saves the data if any to save. */
public void saveData();
/** Clears the data to save. */
public void clearDataToSave();
/**
* Refreshes the view when the metadata has been saved.
*
* @param dataObject The updated object.
*/
public void onDataSave(List<DataObject> dataObject);
/**
* Sets to <code>true</code> if single selection,
* to <code>false</code> if multiple nodes are selected.
*
* @param single Pass <code>true</code> when single selection,
* <code>false</code> otherwise.
*/
public void setSelectionMode(boolean single);
/**
* Returns <code>true</code> if the model is in single mode,
* <code>false</code> otherwise.
*
* @return See above.
*/
public boolean isSingleMode();
/**
* Returns the collection of related nodes.
*
* @return See above.
*/
public List getRelatedNodes();
/**
* Sets the nodes related to the root node when multiple nodes are selected.
*
* @param nodes The nodes to set.
*/
public void setRelatedNodes(List nodes);
/**
* Updates the view when the experimenter or group
* details have been modified.
*
* @param data The data to update.
*/
public void onAdminUpdated(Object data);
/**
* Loads the containers hosting the currently edited object.
*/
public void loadParents();
/**
* Returns the metadata linked to the currently edited object
* or <code>null</code> if not loaded.
*
* @return See above.
*/
public StructuredDataResults getStructuredData();
/**
* Returns the metadata linked to the currently edited object
* or <code>null</code> if not loaded.
*
* @return See above.
*/
public StructuredDataResults getParentStructuredData();
/**
* Sets to <code>true</code> if loading data, to <code>false</code>
* otherwise.
*
* @param busy Pass <code>true</code> while loading data,
* <code>false</code> otherwise.
*/
public void setStatus(boolean busy);
/** Displays the tag wizard. */
public void showTagWizard();
/**
* Returns the object path i.e. if a dataset is selected,
* the name of the project_name of the dataset.
*
* @return See above.
*/
public String getObjectPath();
/**
* Sets the parent of the root object. This will be taken into account
* only if the root is a well sample.
*
* @param parent The parent of the root object.
* @param grandParent The grandParent of the root object.
*/
public void setParentRootObject(Object parent, Object grandParent);
/**
* Brings up the dialog to create a movie.
*
* @param scaleBar The value of the scale bar.
* If not greater than <code>0</code>, the value is not
* taken into account.
* @param overlayColor The color of the scale bar and text.
*/
public void makeMovie(int scaleBar, Color overlayColor);
/**
* Returns one of the rnd constants defined by this class.
*
* @return See above.
*/
public int getRndIndex();
/**
* Indicates to render a plane for the primary select object.
* This method should only be invoked if the object is an image.
*/
public void renderPlane();
/**
* Applies the rendering settings to the selected or displayed images.
* The settings of the primary select will be taken into account.
*/
void applyToAll();
/** Notifies that the settings have been applied. */
void onSettingsApplied();
/** Notifies to set the settings. */
void saveSettings();
/**
* Returns the renderer. This method will always return
* <code>null</code> if the type is not {@link #RND_SPECIFIC}.
*
* @return See above.
*/
public Renderer getRenderer();
/**
* Notifies that the rendering control has been loaded.
*
* @param reload Pass <code>true</code> if the rendering control has been
* reloaded following an exception, <code>false</code> if
* it is an initial load.
*/
public void onRndLoaded(boolean reload);
/**
* Notifies when a channel is selected or deselected.
*
* @param index The index of the channel.
*/
public void onChannelSelected(int index);
/**
* Returns the ideal size of the renderer.
*
* @return See above.
*/
Dimension getIdealRendererSize();
/**
* Analyzes the image.
*
* @param index The index identifying the type of analysis routine.
*/
void analyse(int index);
/**
* Notifies that the rendering settings have been copied.
* Updates the UI if the renderer corresponds to one of the passed image.
*
* @param imageIds The collection of images.
*/
void onRndSettingsCopied(Collection<Long> imageIds);
/**
* Returns <code>true</code> if it is an image with a lot of channels.
* <code>false</code> otherwise.
*
* @return See above.
*/
public boolean isNumerousChannel();
/**
* Set the index of the selected tab.
*
* @param index The selected index.
*/
public void setSelectedTab(int index);
/**
* Brings up the activity options.
*
* @param source The source of the mouse pressed.
* @param location The location of the mouse pressed.
* @param index
*/
public void activityOptions(Component source, Point location, int index);
/**
* Creates a figure.
*
* @param value The parameters for the figure.
*/
public void createFigure(Object value);
/**
* Runs the passed script.
*
* @param script The script to run.
* @param index Indicated to run, download or view.
*/
public void manageScript(ScriptObject script, int index);
/**
* Reloads the renderer (asynchronous) if the passed value is
* <code>true</code>, discards the components if <code>false</code>.
*
* @param value Pass <code>true</code> to reload,
* <code>false</code> to discard.
*/
public void reloadRenderingControl(boolean value);
/** Resets the control. */
public void resetRenderingControl();
/**
* Reloads the renderer (synchronous)
*/
void reloadRenderingControl();
/**
* Indicates that the color of the passed channel has changed.
*
* @param index The index of the channel.
*/
void onChannelColorChanged(int index);
/**
* Returns the object of reference.
*
* @return See above.
*/
Object getRefObject();
/**
* Updates the experimenter or the group.
*
* @param data The object to handle.
* @param asynch Pass <code>true</code> to save data asynchronously,
* <code>false</code> otherwise.
*/
public void updateAdminObject(Object data, boolean asynch);
/**
* Returns the id of the possible owner. This should only be used to
* handle unregistered objects.
*
* @return See above.
*/
long getUserID();
/**
* Resets the password of the edited experimenter.
*
* @param newPass The new password.
*/
void resetPassword(String newPass);
/**
* Loads the settings associated to a given image.
*
*/
void loadViewedBy();
/**
* Sets the settings linked to a given image.
*
* @param result The map containing the rendering definitions
*/
void setViewedBy(Map result);
/**
* Sets the thumbnails of the image currently selected.
*
* @param thumbnails The thumbnails to set, one per user.
* @param imageID The id of the image the thumbnails are for.
*/
public void setThumbnails(Map<Long, BufferedImage> thumbnails,
long imageID);
/** Notifies to upload the script. */
void uploadScript();
/**
* Invokes when the user has switched group.
*
* @param success Pass <code>true</code> if success, <code>false</code>
* otherwise.
*/
void onGroupSwitched(boolean success);
/**
* Returns the parent UI.
*
* @return See above.
*/
JFrame getParentUI();
/** Refreshes the view. */
void refresh();
/**
* Returns the security context.
*
* @return See above.
*/
SecurityContext getSecurityContext();
/**
* Returns <code>true</code> if the passed object is the reference object,
* <code>false</code> otherwise.
*
* @param object The object to compare.
* @return See above.
*/
boolean isSameObject(Object object);
/**
* Returns all the metadata objects corresponding to the selected objects.
*
* @return See above.
*/
Map<DataObject, StructuredDataResults> getAllStructuredData();
/**
* Returns the metadata linked to the currently edited object
* or <code>null</code> if not loaded.
*
* @param refObject The object to handle.
* @return See above.
*/
StructuredDataResults getStructuredData(Object refObject);
/**
* Invokes when the channels have been modified. Updates the values
* displayed in the measurement tool.
*
* @param channels The channels to handle.
*/
void onUpdatedChannels(List<ChannelData> channels);
/**
* Returns the user currently logged in.
*
* @return See above.
*/
ExperimenterData getCurrentUser();
/**
* Applies the settings of a previous set image to
* the renderer (does not save them).
*/
void applyCopiedRndSettings();
/**
* Returns if there are copied rendering settings which could be pasted.
*
* @return See above.
*/
boolean hasRndSettingsCopied();
/**
* Returns the alternative rendering settings.
*
* @return See above.
*/
RndProxyDef getAlternativeRenderingSettings();
/**
* Reload the ROI count
*/
void reloadROICount();
}