/*
* EuroCarbDB, a framework for carbohydrate bioinformatics
*
* Copyright (c) 2006-2009, Eurocarb project, or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
* A copy of this license accompanies this distribution in the file LICENSE.txt.
*
* 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 Lesser General Public License
* for more details.
*
* Last commit: $Rev: 1930 $ by $Author: david@nixbioinf.org $ on $Date:: 2010-07-29 #$
*/
/**
@author Alessio Ceroni (a.ceroni@imperial.ac.uk)
*/
package org.eurocarbdb.application.glycoworkbench.plugin;
import org.eurocarbdb.application.glycanbuilder.*;
import org.eurocarbdb.application.glycoworkbench.*;
import org.eurocarbdb.application.glycoworkbench.plugin.peakpicker.*;
import org.pushingpixels.flamingo.api.common.icon.ResizableIcon;
import org.pushingpixels.flamingo.api.ribbon.JRibbonBand;
import org.pushingpixels.flamingo.api.ribbon.RibbonTask;
import java.util.*;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
public class SpectraPlugin implements Plugin, ActionListener {
PluginManager theManager = null;
GlycoWorkbench theApplication = null;
GlycanWorkspace theWorkspace = null;
PeakPickerCWT thePeakPicker = null;
SpectraPanel theSpectraPanel = null;
public SpectraPlugin(GlycoWorkbench application) {
thePeakPicker = new PeakPickerCWT();
theSpectraPanel = new SpectraPanel();
this.theApplication=application;
}
public void init() {
if( theWorkspace!=null )
thePeakPicker.retrieve(theWorkspace.getConfiguration());
}
public void exit() {
if( theWorkspace!=null )
thePeakPicker.store(theWorkspace.getConfiguration());
}
public String getName() {
return "Spectra";
}
public int getMnemonic() {
return KeyEvent.VK_S;
}
public ResizableIcon getResizableIcon(){
return FileUtils.getThemeManager().getResizableIcon("spectradoc", ICON_SIZE.L3).getResizableIcon();
}
public ImageIcon getIcon() {
return ThemeManager.getEmptyIcon(ICON_SIZE.TINY);
}
public int getViewPosition(String view) {
return PluginManager.VIEW_BOTTOM;
}
public java.awt.Component getLeftComponent() {
return null;
}
public java.awt.Component getRightComponent() {
return null;
}
public java.awt.Component getBottomComponent() {
return theSpectraPanel;
}
public Collection<String> getViews() {
return Collections.singleton("Spectra");
}
public Collection<GlycanAction> getActions() {
Vector<GlycanAction> actions = new Vector<GlycanAction>();
actions.add(new GlycanAction("addPeaks",this.theApplication.getThemeManager().getResizableIcon("addpeaks", ICON_SIZE.L3),"Add selected peaks to the peak list",KeyEvent.VK_A, "",this));
actions.add(new GlycanAction("annotatePeaks",this.theApplication.getThemeManager().getResizableIcon("annotatepeaks", ICON_SIZE.L3),"Find possible annotations for selected peaks",KeyEvent.VK_N, "",this));
actions.add(new GlycanAction("centroid",ThemeManager.getResizableEmptyIcon(ICON_SIZE.L3),"Compute peak centroids",KeyEvent.VK_C, "",this));
return actions;
}
public Collection<GlycanAction> getToolbarActions() {
return new Vector<GlycanAction>();
}
public Collection<GlycanAction> getObjectActions(Object prototype, ActionListener al) {
Vector<GlycanAction> actions = new Vector<GlycanAction>();
return actions;
}
public void setManager(PluginManager manager) {
theManager = manager;
}
public void setApplication(GlycoWorkbench application) {
theApplication = application;
theSpectraPanel.setApplication(application);
}
public void setWorkspace(GlycanWorkspace workspace) {
theWorkspace = workspace;
theSpectraPanel.setWorkspace(workspace);
}
public PluginManager getManager() {
return theManager;
}
public GlycoWorkbench getApplication() {
return theApplication;
}
public GlycanWorkspace getWorkspace() {
return theWorkspace;
}
public SpectraPanel getSpectraPanel() {
return theSpectraPanel;
}
public void show(String view) throws Exception {
if( !view.equals("Spectra") )
throw new Exception("Invalid view: " + view);
}
public boolean runAction(String action) throws Exception {
if( action.equals("addPeaks") )
return theSpectraPanel.onAddPeaks();
if( action.equals("annotatePeaks") )
return theSpectraPanel.onAnnotatePeaks(null);
if( action.equals("centroid") )
return computeCentroids(theSpectraPanel.getCurrentInd());
throw new Exception("Invalid action: " + action);
}
public boolean runAction(String action, Object param) throws Exception {
if( action.equals("addIsotopeCurves") ) {
theSpectraPanel.addIsotopeCurves((TreeMap<Peak,Collection<Annotation>>)param);
return true;
}
return runAction(action);
}
public void actionPerformed(ActionEvent e) {
try {
runAction(GlycanAction.getAction(e));
}
catch(Exception ex) {
LogUtils.report(ex);
}
}
public void updateViews() {
theSpectraPanel.updateView();
}
public void updateMasses() {
}
public boolean computeCentroids(int ind) {
// get spectra
if( theWorkspace.getSpectra()==null || theWorkspace.getSpectra().size()==0 ) {
JOptionPane.showMessageDialog(theApplication, "Empty spectrum", "Error", JOptionPane.ERROR_MESSAGE);
return false;
}
// init variables
ScanData sd = theWorkspace.getSpectra().getScanDataAt(ind);
PeakData pd = theWorkspace.getSpectra().getPeakDataAt(ind);
// show options dialogs
PeakPickerOptionsDialog dlg = new PeakPickerOptionsDialog(theApplication,thePeakPicker);
dlg.setVisible(true);
if( dlg.getReturnStatus().equals("Cancel") )
return false;
double start_mz = dlg.getStartMZ();
double end_mz = dlg.getEndMZ();
// ask to overwrite peaklist
if( theWorkspace.getPeakList().size()>0 &&
JOptionPane.showConfirmDialog(theApplication, "The current peaklist will be overwritten. Continue?", "Warning", JOptionPane.YES_NO_OPTION)==JOptionPane.NO_OPTION )
return false;
theApplication.haltInteractions();
try {
int ms_level = (theWorkspace.getCurrentScan().isMsMs()) ?2 :1;
Vector<Peak> picked_peaks;
if( end_mz==0. )
picked_peaks = thePeakPicker.pick(pd.getData(),ms_level);
else
picked_peaks = thePeakPicker.pick(pd.getData(start_mz,end_mz),ms_level);
theApplication.restoreInteractions();
if( picked_peaks.size()>0 ) {
theWorkspace.getPeakList().setData(picked_peaks);
theManager.show("PeakList","Chart");
return true;
}
JOptionPane.showMessageDialog(theApplication, "No peaks found", "Warning", JOptionPane.WARNING_MESSAGE);
return false;
}
catch(Exception e) {
theApplication.restoreInteractions();
LogUtils.report(e);
return false;
}
}
@Override
public void completeSetup() {
// TODO Auto-generated method stub
}
@Override
public List<JRibbonBand> getBandsForToolBar() {
// TODO Auto-generated method stub
return null;
}
@Override
public RibbonTask getRibbonTask() {
// TODO Auto-generated method stub
return null;
}
}