/*
*------------------------------------------------------------------------------
* 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.editor;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.swing.JComponent;
import org.openmicroscopy.shoola.agents.metadata.FileAnnotationCheckResult;
import org.openmicroscopy.shoola.agents.metadata.util.AnalysisResultsItem;
import org.openmicroscopy.shoola.agents.metadata.view.MetadataViewer;
import org.openmicroscopy.shoola.agents.metadata.rnd.Renderer;
import org.openmicroscopy.shoola.env.data.OmeroMetadataService;
import org.openmicroscopy.shoola.env.data.model.DiskQuota;
import org.openmicroscopy.shoola.env.data.model.ScriptObject;
import org.openmicroscopy.shoola.env.data.util.Target;
import omero.gateway.SecurityContext;
import org.openmicroscopy.shoola.env.rnd.RenderingControl;
import org.openmicroscopy.shoola.util.ui.component.ObservableComponent;
import omero.gateway.model.ChannelAcquisitionData;
import omero.gateway.model.ChannelData;
import omero.gateway.model.FileAnnotationData;
import omero.gateway.model.FilesetData;
import omero.gateway.model.ImageAcquisitionData;
import omero.gateway.model.InstrumentData;
/**
* Defines the interface provided by the viewer component.
*
* @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 Editor
extends ObservableComponent
{
/** Indicates to select the renderer tab. */
public static final int RENDERER_TAB = EditorUI.RND_INDEX;
/** Indicates to select the general tab. */
public static final int GENERAL_TAB = EditorUI.GENERAL_INDEX;
/** Indicates to select the acquisition tab. */
public static final int ACQUISITION_TAB = EditorUI.ACQUISITION_INDEX;
/** Identified the <code>Format</code> enumeration. */
public static final String FORMAT = OmeroMetadataService.FORMAT;
/** Identified the <code>Immersion</code> enumeration. */
public static final String IMMERSION = OmeroMetadataService.IMMERSION;
/** Identified the <code>Correction</code> enumeration. */
public static final String CORRECTION = OmeroMetadataService.CORRECTION;
/** Identified the <code>Medium</code> enumeration. */
public static final String MEDIUM = OmeroMetadataService.MEDIUM;
/** Identified the <code>Microscope type</code> enumeration. */
public static final String MICROSCOPE_TYPE =
OmeroMetadataService.MICROSCOPE_TYPE;
/** Identified the <code>Detector type</code> enumeration. */
public static final String DETECTOR_TYPE =
OmeroMetadataService.DETECTOR_TYPE;
/** Identified the <code>Detector type</code> enumeration. */
public static final String FILTER_TYPE =
OmeroMetadataService.FILTER_TYPE;
/** Identified the <code>Laser medium</code> enumeration. */
public static final String LASER_MEDIUM =
OmeroMetadataService.LASER_MEDIUM;
/** Identified the <code>Laser medium</code> enumeration. */
public static final String LASER_PULSE =
OmeroMetadataService.LASER_PULSE;
/** Identified the <code>Binning</code> enumeration. */
public static final String BINNING = OmeroMetadataService.BINNING;
/** Identified the <code>contrast method</code> enumeration. */
public static final String CONTRAST_METHOD =
OmeroMetadataService.CONTRAST_METHOD;
/** Identified the <code>illumination type</code> enumeration. */
public static final String ILLUMINATION_TYPE =
OmeroMetadataService.ILLUMINATION_TYPE;
/** Identified the <code>photometric Interpretation</code> enumeration. */
public static final String PHOTOMETRIC_INTERPRETATION =
OmeroMetadataService.PHOTOMETRIC_INTERPRETATION;
/** Identified the <code>arc type</code> enumeration. */
public static final String ARC_TYPE = OmeroMetadataService.ARC_TYPE;
/** Identified the <code>filament type</code> enumeration. */
public static final String FILAMENT_TYPE =
OmeroMetadataService.FILAMENT_TYPE;
/** Identified the <code>laser type</code> enumeration. */
public static final String LASER_TYPE =
OmeroMetadataService.LASER_TYPE;
/** Identified the <code>mode</code> enumeration. */
public static final String MODE = OmeroMetadataService.ACQUISITION_MODE;
/** Feeds the metadata back to the editor. */
public void setStructuredDataResults();
/**
* Returns the View.
*
* @return See above.
*/
public JComponent getUI();
/**
* Sets the root of the tree.
*
* @param refObject The object hosted by the root node of the tree.
* Mustn't be <code>null</code>.
*/
public void setRootObject(Object refObject);
/**
* Sets the collection of existing tags.
*
* @param collection The tags to set.
*/
public void setExistingTags(Collection collection);
/**
* Sets the collection of channel data.
*
* @param channels The collection to set.
* @param updateView Pass <code>true</code> to update the view,
* <code>false</code> otherwise.
*/
public void setChannelsData(Map channels, boolean updateView);
/**
* Returns <code>true</code> if data to save, <code>false</code>
* otherwise.
*
* @return See above.
*/
public boolean hasDataToSave();
/**
* Sets the used and free disk space.
*
* @param quota The value to set.
*/
public void setDiskSpace(DiskQuota quota);
/**
* Indicates that the password was successfully modified or not.
*
* @param changed Pass <code>true</code> if the password was successfully
* changed, <code>false</code> otherwise.
*/
public void passwordChanged(boolean changed);
/** Brings up on screen the image's information. */
public void loadChannelData();
/**
* Sets the collection of existing attachments, attachments added
* by the currently logged in user.
*
* @param attachments The value to set.
*/
public void setExistingAttachments(Collection attachments);
/**
* Sets either to single selection or to multiple selection.
*
* @param single Pass <code>true</code> when single selection,
* <code>false</code> otherwise.
*/
public void setSelectionMode(boolean single);
/** Loads the container hosting the currently edited object. */
public void loadParents();
/**
* 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);
/** Loads the existing tags. */
public void loadExistingTags();
public void removeFileAnnotations(List<FileAnnotationData> annotations);
public void handleFileAnnotationRemoveCheck(FileAnnotationCheckResult result);
/**
* Sets the image acquisition data.
*
* @param data The value to set.
*/
public void setImageAcquisitionData(ImageAcquisitionData data);
/** Loads the image acquisition data. */
public void loadImageAcquisitionData();
/**
* Sets the enumerations for the metadata related to an image.
*
* @param map The value to set.
*/
public void setImageEnumerations(Map map);
/**
* Sets the enumerations for the metadata related to a channel.
*
* @param map The value to set.
*/
public void setChannelEnumerations(Map map);
/**
* Sets the acquisition data for the specified channel.
*
* @param index The index of the channel.
* @param data The acquisition data.
*/
public void setChannelAcquisitionData(int index,
ChannelAcquisitionData data);
/**
* Loads the channel acquisition for the specified channel.
*
* @param channel The channel to handle.
*/
public void loadChannelAcquisitionData(ChannelData channel);
/** Loads the existing attachments. */
public void loadExistingAttachments();
/**
* Downloads the archived files
*
* @param file The file where to download the content.
* If it is a multi-images file a zip will be created.
* @param override Flag indicating to override the existing file if it
* exists, <code>false</code> otherwise.
*/
public void download(File file, boolean override);
/**
* Downloads the archived files, preserving the original folder structure
*
* @param path
* The path to the folder where to download the content.
* @param override
* Flag indicating to override the existing file if it exists,
* <code>false</code> otherwise.
*/
public void downloadOriginal(String path, boolean override);
/**
* Sets the parent of the root object. This will be taken into account
* only if the root is a well sample.
*
* @param parentRefObject The parent of the root object.
* @param grandParent The grand parent of the root object.
*/
public void setParentRootObject(Object parentRefObject, Object grandParent);
/**
* Sets the plane info corresponding to the channel and the pixels set.
*
* @param result The collection of plane.
* @param pixelsID The id of the pixels set.
* @param channel The selected channel.
*/
public void setPlaneInfo(Collection result, long pixelsID, int channel);
/**
* Sets the rendering control
*
* @param rndControl The value to set.
*/
public void setRenderingControl(RenderingControl rndControl);
/**
* Loads the rendering control for the first selected image.
*
* @param index One of the loading index.
*/
public void loadRenderingControl(int index);
/**
* Reloads the rendering control for the first selected image.
* (Note: This is a blocking method, for asynchronous call use
* {@link #loadRenderingControl(int)} instead
*/
public void loadRenderingControl();
/**
* Sets the result back to the viewer.
*
* @param data The annotation hosted the file to load.
* @param file The local copy.
* @param uiView The object handle the result.
*/
public void setLoadedFile(FileAnnotationData data, File file,
Object uiView);
/**
* Returns the renderer. This method will always return
* <code>null</code> if the type is not {@link MetadataViewer#RND_SPECIFIC}.
*
* @return See above.
*/
public Renderer getRenderer();
/** Loads the instrument related to the image. */
public void loadInstrumentData();
/**
* Sets the instrument used to capture the image.
*
* @param data The value to set.
*/
public void setInstrumentData(InstrumentData data);
/** Refreshes the currently selected tab. */
public void refresh();
/**
* Exports the image.
*
* @param folder The folder where to export the image.
* @param target The selected schema or <code>null</code>.
*/
public void exportImageAsOMETIFF(File folder, Target target);
/**
* Indicates that the color of the passed channel has changed.
*
* @param index The index of the channel.
*/
public void onChannelColorChanged(int index);
/**
* Set the index of the selected tab.
*
* @param index The selected index.
*/
public void setSelectedTab(int index);
/**
* Loads the rendering control if not already loaded for the primary select.
*
* @param index The index of the figure to create.
*/
public void createFigure(int index);
/**
* Sets the ROI associated to the specified image.
*
* @param roi The collection of ROI.
* @param imageID The id of the image.
* @param index The index of the figure to create.
*/
public void setROI(Collection roi, long imageID, int index);
/**
* Returns the channel data.
*
* @return See above.
*/
public Map getChannelData();
/**
* Sets the scripts uploaded by the user.
*
* @param scripts The scripts to display.
*/
public void setScripts(List scripts);
/**
* Returns the id of the user.
*
* @return See above.
*/
public long getUserID();
/**
* Sets the loaded script.
*
* @param script The script to set.
*/
public void setScript(ScriptObject script);
/**
* Loads the specified script.
*
* @param scriptID The id of the script to load.
*/
void loadScript(long scriptID);
/**
* Sets the photo of the user.
*
* @param photo The user's photo.
* @param experimenterID The id of the experimenter the photo is for.
*/
void setUserPhoto(BufferedImage photo, long experimenterID);
/**
* Returns <code>true</code> if the object can be edited,
* <code>false</code> otherwise.
*
* @return See above.
*/
boolean canEdit();
/**
* Returns <code>true</code> if the object can be edited,
* <code>false</code> otherwise.
*
* @return See above.
*/
boolean canAnnotate();
/**
* Returns <code>true</code> if the object can be hard linked,
* i.e. image added to dataset, <code>false</code> otherwise.
*
* @return See above.
*/
boolean canLink();
/**
* Displays the results of analysis.
*
* @param analysis Object hosting information about the results.
*/
void displayAnalysisResults(AnalysisResultsItem analysis);
/**
* Notifies that the results have been loaded.
*
* @param analysis Object hosting information about the results.
*/
void analysisResultsLoaded(AnalysisResultsItem analysis);
/**
* Saves the selected images as <code>JPEG</code>, <code>PNG</code> or
* <code>TIFF</code>.
*
* @param folder
* The folder to save.
* @param format
* The format to use.
* @param filename
* The filename to use for the batch export file (without
* extension)
* @see org.openmicroscopy.shoola.env.data.model.FigureParam
*/
public void saveAs(File folder, int format, String filename);
/**
* 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 security context.
*
* @return See above.
*/
SecurityContext getSecurityContext();
/**
* Indicates if the image is a large image or not.
*
* @param result The value to set.
*/
void setLargeImage(Boolean result);
/**
* 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);
/**
* Sets the file set associated to the image.
*
* @param result The value to set.
*/
void setFileset(Set<FilesetData> result);
/**
* Loads the file set associated to the image.
* */
void loadFileset();
/**
* Loads the rendering engine depending on the selected pane or component
* usage.
*/
void loadRnd();
/**
* Sets the LDAP details of the specified user.
*
* @param userID The user's id.
* @param result The value to set.
*/
void setLDAPDetails(long userID, String result);
ScriptObject getScriptFromName(String name);
/**
* Returns the selected FileAnnotations or an empty Collection
* if there are no FileAnnotations
*
* @return See above
*/
public Collection<FileAnnotationData> getSelectedFileAnnotations();
/**
* Reload the ROI count
*/
public void reloadROICount();
}