gt: 			if (data.isLoaded()) text += data.getName();
context: /*
   *------------------------------------------------------------------------------
   *  Copyright (C) 2006-2010 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.env.ui;
  
  import java.awt.Font;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  import javax.swing.JButton;
  import javax.swing.JMenuItem;
  import javax.swing.JPopupMenu;
  
  import org.openmicroscopy.shoola.env.data.ProcessReport;
  import org.openmicroscopy.shoola.util.filter.file.GIFFilter;
  import org.openmicroscopy.shoola.util.filter.file.JPEGFilter;
  import org.openmicroscopy.shoola.util.filter.file.PNGFilter;
  import org.openmicroscopy.shoola.util.filter.file.TIFFFilter;
  import org.openmicroscopy.shoola.util.ui.UIUtilities;
  import omero.model.OriginalFile;
  import omero.gateway.model.DatasetData;
  import omero.gateway.model.FileAnnotationData;
  import omero.gateway.model.ImageData;
  import omero.gateway.model.PlateData;
  import omero.gateway.model.ProjectData;
  import omero.gateway.model.ScreenData;
  
  
  /** 
   * Displays a result.
   *
   * @author  Jean-Marie Burel &nbsp;&nbsp;&nbsp;&nbsp;
   * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
   * @author Donald MacDonald &nbsp;&nbsp;&nbsp;&nbsp;
   * <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
   * @version 3.0
   * @since 3.0-Beta4
   */
  class ActivityResultRow 
  	extends JButton
  	implements ActionListener
  {
  
  	/** Action ID indicating that the user select one of the action. */
  	static final String ACTION_PROPERTY = "action";
  	
  	/** Text associated to the view action. */
  	private static final String VIEW_TEXT = "View ";
  	
  	/** Text associated to the browse action. */
  	private static final String BROWSE_TEXT = "Go to ";
  	
  	/** Text associated to the browse action. */
  	private static final String DOWNLOAD_TEXT = "Download";
  	
  	/** Text associated to the browse action. */
  	static final String INFO_TEXT = "Info";
  	
  	/** Text associated to the browse action. */
  	static final String ERROR_TEXT = "Error";
  	
  	/** Indicates to download the object. */
  	private static final int DOWNLOAD = 0;
  	
  	/** Indicates to view the object. */
  	private static final int VIEW = 1;
  	
  	/** Indicates to browse the object. */
  	private static final int BROWSE = 2;
  
  	/** The maximum length.*/
  	private static final int MAX_LENGTH = 27;
  	
  	/** Reference to the activity. */
  	private ActivityComponent activity;
  	
  	/** The result to handle. */
  	private Object row;
  	
  	/** The name to set. */
  	private String name;
  
  	/** The menu.*/
  	private JPopupMenu menu;
  	
  	/** The item to view the object.*/
  	private JMenuItem viewItem;
  	
  	/**
  	 * Returns <code>true</code> if the object can be downloaded, 
  	 * <code>false</code> otherwise.
  	 * 
  	 * @param object The object to handle.
  	 * @return See above.
  	 */
  	private boolean isDownloadable(Object object)
  	{
  		return (object instanceof FileAnnotationData || 
  				object instanceof OriginalFile);
  	}
  	
  	/**
  	 * Returns <code>true</code> if the object can be viewed, 
  	 * <code>false</code> otherwise.
  	 * 
  	 * @param object The object to handle.
  	 * @return See above.
  	 */
  	private boolean isViewable(Object object)
  	{
  		return (object instanceof ImageData ||
  				object instanceof FileAnnotationData ||
  				object instanceof OriginalFile);
  	}
  	
  	/**
  	 * Creates or recycles the menu.
  	 * 
  	 * @return See above.
  	 */
  	private void createMenu(int x, int y)
  	{
  		if (menu != null) {
  			menu.show(this, x, y);
  			return;
  		}
  		menu = new JPopupMenu();
  		//create the item.
  		String text = getType();
  		JMenuItem item;
  		if (text != null) {
  			item = createMenuItem(BROWSE_TEXT+text, BROWSE);
  			menu.add(item);
  		}
  		if (isViewable(row)) {
  			String mt = getMimetype();
  			if (mt != null) {
  				viewItem = createMenuItem(VIEW_TEXT+mt, VIEW);
  				menu.add(viewItem);
  			} else {
  				if (!isDownloadable(row)) {
  					viewItem = createMenuItem(VIEW_TEXT+text, VIEW);
  					menu.add(viewItem);
  				}
  			}
  		}
  		if (isDownloadable(row)) {
  			item = createMenuItem(DOWNLOAD_TEXT, DOWNLOAD);
  			menu.add(item);
  		}
  		if (activity.hasError()) {
  			menu.add(new ActivityResultMenu(ERROR_TEXT, activity.errorObject,
  					activity));
  		}
  		if (activity.hasInfo()) {
  			menu.add(new ActivityResultMenu(INFO_TEXT, activity.infoObject,
  					activity));
  		}
  		menu.show(this, x, y);
  	}
  	
      /**
       * Creates a menu item.
       * 
       * @param text The text of the button.
       * @param actionID The action command id.
       * @return See above.
       */
      private JMenuItem createMenuItem(String text, int actionID)
      {
      	JMenuItem b = new JMenuItem(text);//UIUtilities.createHyperLinkMenuItem(text);
  		b.setActionCommand(""+actionID);
  		b.addActionListener(this);
  		return b;
      }
      
  	/** Attaches the listeners.*/
  	private void attachListeners()
  	{
  		addMouseListener(new MouseAdapter() {
  			
  			public void mouseReleased(MouseEvent e) {
  				createMenu(e.getX(), e.getY());
  			}
  		});
  	}
  	
  	/**
  	 * Returns the type of object to view or browse.
  	 * 
  	 * @return See above
  	 */
  	private String getType()
  	{
  		if (row instanceof ImageData) return "Image";
  		if (row instanceof DatasetData) return "Dataset";
  		if (row instanceof ProjectData) return "Project";
  		if (row instanceof ScreenData) return "Screen";
  		if (row instanceof PlateData) return "Plate";
  		if (row instanceof FileAnnotationData) return "Attachment";
  		return null;
  	}
  	
  	/**
  	 * Returns the text corresponding to the mimetype of the file.
  	 * 
  	 * @return See above.
  	 */
  	private String getMimetype()
  	{
  		String mimetype = null;
  		if (row instanceof FileAnnotationData) {
  			FileAnnotationData fa = (FileAnnotationData) row;
  			if (fa.isLoaded()) {
  				OriginalFile of = (OriginalFile) fa.getContent();
  				if (of.isLoaded() && of.getMimetype() != null)
  					mimetype = of.getMimetype().getValue();
  			} 
  		}
  		if (row instanceof OriginalFile) {
  			OriginalFile of = (OriginalFile) row;
  			if (of.isLoaded() && of.getMimetype() != null)
  				mimetype = of.getMimetype().getValue();
  		}
  		if (mimetype == null) return null;
  		if (JPEGFilter.MIMETYPE.equals(mimetype)) return JPEGFilter.JPEG;
  		else if (PNGFilter.MIMETYPE.equals(mimetype)) return PNGFilter.PNG;
  		else if (TIFFFilter.MIMETYPE.equals(mimetype)) return TIFFFilter.TIFF;
  		else if (GIFFilter.MIMETYPE.equals(mimetype)) return GIFFilter.GIF;
  		return null;
  	}
  	
  	/** 
  	 * Returns the text associated to the object.
  	 * 
  	 * @return See above.
  	 */
  	private String getObjectText()
  	{
  		String text = "";
  		if (row instanceof ImageData) {
  			ImageData data = (ImageData) row;
  			if (data.isLoaded()) text += data.getName();
  			else {
  				text += "Image ID:";
  				text += data.getId();
  			}
  		} else if (row instanceof DatasetData) {
  			DatasetData data = (DatasetData) row;
  			if (data.isLoaded()) text += data.getName();
  			else {
  				text += "Dataset ID:";
  				text += data.getId();
  			}
  		} else if (row instanceof PlateData) {
  			PlateData data = (PlateData) row;
  			if (data.isLoaded()) text += data.getName();
  			else {
  				text += "Plate ID:";
  				text += data.getId();
  			}
  		} else if (row instanceof ScreenData) {
  			ScreenData data = (ScreenData) row;
  			if (data.isLoaded()) text += data.getName();
  			else {
  				text += "Screen ID:";
  				text += data.getId();
  			}
  		} else if (row instanceof ProjectData) {
  			ProjectData data = (ProjectData) row;
  