mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ptm/PTMExperimentViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3  All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: PTMExperimentViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.10 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:56:57 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.ptm;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Frame;
2 26 Feb 07 jari 16 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 17 import java.awt.event.ActionListener;
2 26 Feb 07 jari 18 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 19 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 20 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 21 import java.beans.Expression;
2 26 Feb 07 jari 22 import java.io.IOException;
2 26 Feb 07 jari 23 import java.io.ObjectInputStream;
2 26 Feb 07 jari 24 import java.io.ObjectOutputStream;
2 26 Feb 07 jari 25 import java.util.Vector;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27 import javax.swing.JColorChooser;
2 26 Feb 07 jari 28 import javax.swing.JComponent;
2 26 Feb 07 jari 29 import javax.swing.JMenuItem;
2 26 Feb 07 jari 30 import javax.swing.JOptionPane;
2 26 Feb 07 jari 31 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.IDisplayMenu;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.helpers.CentroidViewer;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentUtil;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.helpers.ExperimentViewer;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 42
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44 public class PTMExperimentViewer extends ExperimentViewer implements IViewer {
2 26 Feb 07 jari 45   
2 26 Feb 07 jari 46   protected static final String STORE_CLUSTER_CMD = "store-cluster-cmd";
2 26 Feb 07 jari 47   protected static final String SET_DEF_COLOR_CMD = "set-def-color-cmd";
2 26 Feb 07 jari 48   protected static final String SAVE_CLUSTER_CMD = "save-cluster-cmd";
2 26 Feb 07 jari 49   protected static final String SAVE_ALL_CLUSTERS_CMD = "save-all-clusters-cmd";
2 26 Feb 07 jari 50   protected static final String LAUNCH_NEW_SESSION_CMD = "launch-new-session-cmd";
2 26 Feb 07 jari 51   
2 26 Feb 07 jari 52   private JPopupMenu popup;
2 26 Feb 07 jari 53   private ExperimentViewer expViewer;
2 26 Feb 07 jari 54   private PTMExperimentHeader header;
2 26 Feb 07 jari 55   private String[] auxTitles;
2 26 Feb 07 jari 56   private Object[][] auxData;    
2 26 Feb 07 jari 57   private int[][] clusters;
2 26 Feb 07 jari 58   private Vector templateVector;
2 26 Feb 07 jari 59   
2 26 Feb 07 jari 60   /**
2 26 Feb 07 jari 61    * Constructs a <code>PTMExperimentViewer</code> with specified
2 26 Feb 07 jari 62    * experiment, clusters and templateVector.
2 26 Feb 07 jari 63    */
2 26 Feb 07 jari 64   public PTMExperimentViewer(Experiment experiment, int[][] clusters, Vector templateVector, String[] auxTitles, Object[][] auxData) {
2 26 Feb 07 jari 65     Listener listener = new Listener();
2 26 Feb 07 jari 66     this.popup = createJPopupMenu(listener);
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     this.expViewer = new ExperimentViewer(experiment, clusters);
2 26 Feb 07 jari 69     this.expViewer.getContentComponent().addMouseListener(listener);
2 26 Feb 07 jari 70     this.auxTitles = auxTitles;
2 26 Feb 07 jari 71     this.auxData = auxData;
2 26 Feb 07 jari 72     this.clusters = clusters;
2 26 Feb 07 jari 73     this.templateVector = templateVector;
2 26 Feb 07 jari 74     this.header = new PTMExperimentHeader(expViewer.getHeaderComponent(), templateVector);
2 26 Feb 07 jari 75     this.header.setColorImages(expViewer.getNegColorImage(), expViewer.getPosColorImage());
2 26 Feb 07 jari 76     this.header.setMissingColor(expViewer.getMissingColor());
2 26 Feb 07 jari 77     this.header.addMouseListener(listener);
2 26 Feb 07 jari 78   }
2 26 Feb 07 jari 79     public Expression getExpression(){
2 26 Feb 07 jari 80       return new Expression(this, this.getClass(), "new",
2 26 Feb 07 jari 81           new Object[]{this.expViewer.getExperiment(), this.clusters, this.templateVector, this.auxTitles, this.auxData});
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83   public void setExperiment(Experiment e){expViewer.setExperiment(e);}
2 26 Feb 07 jari 84   public void setExperimentID(int i){expViewer.setExperimentID(i);}
2 26 Feb 07 jari 85   public int getExperimentID(){return expViewer.getExperimentID();}
2 26 Feb 07 jari 86
2 26 Feb 07 jari 87   /**
2 26 Feb 07 jari 88    * Returns the header component.
2 26 Feb 07 jari 89    */
2 26 Feb 07 jari 90   public JComponent getHeaderComponent() {
2 26 Feb 07 jari 91     return header;
2 26 Feb 07 jari 92   }
2 26 Feb 07 jari 93   
2 26 Feb 07 jari 94   /**
2 26 Feb 07 jari 95    * Returns the wrapped experiment viewer.
2 26 Feb 07 jari 96    */
2 26 Feb 07 jari 97   public JComponent getContentComponent() {
2 26 Feb 07 jari 98     return expViewer.getContentComponent();
2 26 Feb 07 jari 99   }
2 26 Feb 07 jari 100   
2 26 Feb 07 jari 101   /** Returns a component to be inserted into the scroll pane row header
2 26 Feb 07 jari 102    */
2 26 Feb 07 jari 103   public JComponent getRowHeaderComponent() {
2 26 Feb 07 jari 104     return null;
2 26 Feb 07 jari 105   }
2 26 Feb 07 jari 106   
2 26 Feb 07 jari 107   /** Returns the corner component corresponding to the indicated corner,
2 26 Feb 07 jari 108    * posibly null
2 26 Feb 07 jari 109    */
2 26 Feb 07 jari 110   public JComponent getCornerComponent(int cornerIndex) {
2 26 Feb 07 jari 111     return null;
2 26 Feb 07 jari 112   }
2 26 Feb 07 jari 113   
2 26 Feb 07 jari 114   public BufferedImage getImage() {
2 26 Feb 07 jari 115     return expViewer.getImage();
2 26 Feb 07 jari 116   }
2 26 Feb 07 jari 117   
2 26 Feb 07 jari 118   /**
2 26 Feb 07 jari 119    * Updates header and contents attributes when the viewer is selected.
2 26 Feb 07 jari 120    */
2 26 Feb 07 jari 121   public void onSelected(IFramework framework) {
2 26 Feb 07 jari 122     expViewer.onSelected(framework);
2 26 Feb 07 jari 123     header.setCurrentCluster(((Integer)framework.getUserObject()).intValue());
2 26 Feb 07 jari 124     IDisplayMenu menu = framework.getDisplayMenu();
2 26 Feb 07 jari 125     header.setUseDoubleGradient(menu.getUseDoubleGradient());    
2 26 Feb 07 jari 126     header.setColorImages(menu.getPositiveGradientImage(), menu.getNegativeGradientImage());
2 26 Feb 07 jari 127     header.setValues(menu.getMinRatioScale(), menu.getMidRatioValue(), menu.getMaxRatioScale());
2 26 Feb 07 jari 128     header.setAntiAliasing(menu.isAntiAliasing());
2 26 Feb 07 jari 129     header.setDrawBorders(menu.isDrawingBorder());
2 26 Feb 07 jari 130     header.updateSize(menu.getElementSize());
2 26 Feb 07 jari 131   }
2 26 Feb 07 jari 132   
2 26 Feb 07 jari 133   /**
2 26 Feb 07 jari 134    * Updates experiment data.
2 26 Feb 07 jari 135    */
2 26 Feb 07 jari 136   public void onDataChanged(IData data) {
2 26 Feb 07 jari 137     expViewer.onDataChanged(data);
2 26 Feb 07 jari 138   }
2 26 Feb 07 jari 139   
2 26 Feb 07 jari 140   /**
2 26 Feb 07 jari 141    * Updates header and contents attributes when the display menu is changed.
2 26 Feb 07 jari 142    */
2 26 Feb 07 jari 143   public void onMenuChanged(IDisplayMenu menu) {
2 26 Feb 07 jari 144     expViewer.onMenuChanged(menu);
2 26 Feb 07 jari 145     header.setUseDoubleGradient(menu.getUseDoubleGradient());
2 26 Feb 07 jari 146     header.setColorImages(menu.getPositiveGradientImage(), menu.getNegativeGradientImage());
2 26 Feb 07 jari 147     header.setValues(menu.getMinRatioScale(), menu.getMidRatioValue(), menu.getMaxRatioScale());
2 26 Feb 07 jari 148     header.setAntiAliasing(menu.isAntiAliasing());
2 26 Feb 07 jari 149     header.setDrawBorders(menu.isDrawingBorder());
2 26 Feb 07 jari 150     header.updateSize(menu.getElementSize());
2 26 Feb 07 jari 151   }
2 26 Feb 07 jari 152   
2 26 Feb 07 jari 153   public void onDeselected() {}
2 26 Feb 07 jari 154   public void onClosed() {}
2 26 Feb 07 jari 155   
2 26 Feb 07 jari 156   
2 26 Feb 07 jari 157   
2 26 Feb 07 jari 158   /**
2 26 Feb 07 jari 159    * Creates a popup menu.
2 26 Feb 07 jari 160    */
2 26 Feb 07 jari 161   private JPopupMenu createJPopupMenu(Listener listener) {
2 26 Feb 07 jari 162     JPopupMenu popup = new JPopupMenu();
2 26 Feb 07 jari 163     addMenuItems(popup, listener);
2 26 Feb 07 jari 164     return popup;
2 26 Feb 07 jari 165   }
2 26 Feb 07 jari 166   
2 26 Feb 07 jari 167   /**
2 26 Feb 07 jari 168    * Adds viewer specific menu items.
2 26 Feb 07 jari 169    */
2 26 Feb 07 jari 170   protected void addMenuItems(JPopupMenu menu, ActionListener listener) {
2 26 Feb 07 jari 171     JMenuItem menuItem;
2 26 Feb 07 jari 172     menuItem = new JMenuItem("Store cluster", GUIFactory.getIcon("new16.gif"));
2 26 Feb 07 jari 173     menuItem.setActionCommand(STORE_CLUSTER_CMD);
2 26 Feb 07 jari 174     menuItem.addActionListener(listener);
2 26 Feb 07 jari 175     menu.add(menuItem);
2 26 Feb 07 jari 176     
2 26 Feb 07 jari 177     menu.addSeparator();
2 26 Feb 07 jari 178     
2 26 Feb 07 jari 179     menuItem = new JMenuItem("Launch new session", GUIFactory.getIcon("analysis16.gif"));
2 26 Feb 07 jari 180     menuItem.setActionCommand(LAUNCH_NEW_SESSION_CMD);
2 26 Feb 07 jari 181     menuItem.addActionListener(listener);
2 26 Feb 07 jari 182     menu.add(menuItem);
2 26 Feb 07 jari 183     
2 26 Feb 07 jari 184     menu.addSeparator();
2 26 Feb 07 jari 185     
2 26 Feb 07 jari 186     menuItem = new JMenuItem("Delete public cluster", GUIFactory.getIcon("delete16.gif"));
2 26 Feb 07 jari 187     menuItem.setActionCommand(SET_DEF_COLOR_CMD);
2 26 Feb 07 jari 188     menuItem.addActionListener(listener);
2 26 Feb 07 jari 189     menu.add(menuItem);
2 26 Feb 07 jari 190     
2 26 Feb 07 jari 191     menu.addSeparator();
2 26 Feb 07 jari 192     
2 26 Feb 07 jari 193     menuItem = new JMenuItem("Save cluster...", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 194     menuItem.setActionCommand(SAVE_CLUSTER_CMD);
2 26 Feb 07 jari 195     menuItem.addActionListener(listener);
2 26 Feb 07 jari 196     menu.add(menuItem);
2 26 Feb 07 jari 197     
2 26 Feb 07 jari 198     menuItem = new JMenuItem("Save all clusters...", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 199     menuItem.setActionCommand(SAVE_ALL_CLUSTERS_CMD);
2 26 Feb 07 jari 200     menuItem.addActionListener(listener);
2 26 Feb 07 jari 201     menu.add(menuItem);
2 26 Feb 07 jari 202   }
2 26 Feb 07 jari 203   
2 26 Feb 07 jari 204   /**
2 26 Feb 07 jari 205    * Saves clusters.
2 26 Feb 07 jari 206    */
2 26 Feb 07 jari 207   private void onSaveClusters() {
2 26 Feb 07 jari 208     Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 209     try {
2 26 Feb 07 jari 210       //expViewer.saveClusters(frame);
2 26 Feb 07 jari 211       ExperimentUtil.saveAllGeneClustersWithAux(frame, expViewer.getExperiment(), expViewer.getData(), expViewer.getClusters(), auxTitles, auxData);            
2 26 Feb 07 jari 212     } catch (Exception e) {
2 26 Feb 07 jari 213       JOptionPane.showMessageDialog(frame, "Can not save clusters!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 214       e.printStackTrace();
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216   }
2 26 Feb 07 jari 217   
2 26 Feb 07 jari 218   /**
2 26 Feb 07 jari 219    * Save the viewer cluster.
2 26 Feb 07 jari 220    */
2 26 Feb 07 jari 221   private void onSaveCluster() {
2 26 Feb 07 jari 222     Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 223     try {
2 26 Feb 07 jari 224       //expViewer.saveCluster(frame);
2 26 Feb 07 jari 225       ExperimentUtil.saveGeneClusterWithAux(frame, expViewer.getExperiment(), expViewer.getData(), expViewer.getCluster(), auxTitles, auxData);            
2 26 Feb 07 jari 226     } catch (Exception e) {
2 26 Feb 07 jari 227       JOptionPane.showMessageDialog(frame, "Can not save cluster!", e.toString(), JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 228       e.printStackTrace();
2 26 Feb 07 jari 229     }
2 26 Feb 07 jari 230   }
2 26 Feb 07 jari 231   
2 26 Feb 07 jari 232   /**
2 26 Feb 07 jari 233    * Sets a public color.
2 26 Feb 07 jari 234    */
2 26 Feb 07 jari 235   private void onSetColor() {
2 26 Feb 07 jari 236     Frame frame = JOptionPane.getFrameForComponent(getContentComponent());
2 26 Feb 07 jari 237     Color newColor = JColorChooser.showDialog(frame, "Choose color", CentroidViewer.DEF_CLUSTER_COLOR);
2 26 Feb 07 jari 238     if (newColor != null) {
2 26 Feb 07 jari 239       expViewer.setClusterColor(newColor);
2 26 Feb 07 jari 240     }
2 26 Feb 07 jari 241   }
2 26 Feb 07 jari 242   
2 26 Feb 07 jari 243   /**
2 26 Feb 07 jari 244    * Removes a public color.
2 26 Feb 07 jari 245    */
2 26 Feb 07 jari 246   private void onSetDefaultColor() {
2 26 Feb 07 jari 247     expViewer.setClusterColor(null);
2 26 Feb 07 jari 248   }
2 26 Feb 07 jari 249   
2 26 Feb 07 jari 250   public int[][] getClusters() {
2 26 Feb 07 jari 251     return this.expViewer.getClusters();
2 26 Feb 07 jari 252   }
2 26 Feb 07 jari 253   
2 26 Feb 07 jari 254   public Experiment getExperiment() {
2 26 Feb 07 jari 255     return this.expViewer.getExperiment();
2 26 Feb 07 jari 256   }
2 26 Feb 07 jari 257   
2 26 Feb 07 jari 258   /** Returns int value indicating viewer type
2 26 Feb 07 jari 259    * Cluster.GENE_CLUSTER, Cluster.EXPERIMENT_CLUSTER, or -1 for both or unspecified
2 26 Feb 07 jari 260    */
2 26 Feb 07 jari 261   public int getViewerType() {
2 26 Feb 07 jari 262     return this.expViewer.getViewerType();
2 26 Feb 07 jari 263   }
2 26 Feb 07 jari 264   
2 26 Feb 07 jari 265   /**
2 26 Feb 07 jari 266    * The class to listen to mouse and action events.
2 26 Feb 07 jari 267    */
2 26 Feb 07 jari 268   private class Listener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 269     
2 26 Feb 07 jari 270     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 271       String command = e.getActionCommand();
2 26 Feb 07 jari 272       if (command.equals(SAVE_CLUSTER_CMD)) {
2 26 Feb 07 jari 273         onSaveCluster();
2 26 Feb 07 jari 274       } else if (command.equals(SAVE_ALL_CLUSTERS_CMD)) {
2 26 Feb 07 jari 275         onSaveClusters();
2 26 Feb 07 jari 276       } else if (command.equals(SET_DEF_COLOR_CMD)) {
2 26 Feb 07 jari 277         onSetDefaultColor();
2 26 Feb 07 jari 278       } else if (command.equals(STORE_CLUSTER_CMD)) {
2 26 Feb 07 jari 279         expViewer.storeCluster();
2 26 Feb 07 jari 280       } else if(command.equals(LAUNCH_NEW_SESSION_CMD)){
2 26 Feb 07 jari 281         expViewer.launchNewSession();
2 26 Feb 07 jari 282       }
2 26 Feb 07 jari 283     }
2 26 Feb 07 jari 284     
2 26 Feb 07 jari 285     public void mouseReleased(MouseEvent event) {
2 26 Feb 07 jari 286       maybeShowPopup(event);
2 26 Feb 07 jari 287     }
2 26 Feb 07 jari 288     
2 26 Feb 07 jari 289     public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 290       maybeShowPopup(event);
2 26 Feb 07 jari 291     }
2 26 Feb 07 jari 292     
2 26 Feb 07 jari 293     private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 294       
2 26 Feb 07 jari 295       if (!e.isPopupTrigger() || expViewer.getCluster() == null || expViewer.getCluster().length == 0) {
2 26 Feb 07 jari 296         return;
2 26 Feb 07 jari 297       }
2 26 Feb 07 jari 298       popup.show(e.getComponent(), e.getX(), e.getY());
2 26 Feb 07 jari 299     }
2 26 Feb 07 jari 300   }
2 26 Feb 07 jari 301   
2 26 Feb 07 jari 302 }