/*
* 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 java.io.File;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.print.*;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYBarDataset;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
public class PeakAnnotationReportPanel extends DocumentPanel<AnnotatedPeakList> implements ActionListener {
// components
protected DefaultXYDataset theDataset;
protected XYPlot thePlot;
protected JFreeChart theChart;
protected ChartPanel theChartPanel;
protected JToolBar theToolBar;
//
public PeakAnnotationReportPanel() {
super();
}
protected void initComponents() {
setLayout(new BorderLayout());
// create chart
theDataset = new DefaultXYDataset();
theChart = org.jfree.chart.ChartFactory.createScatterPlot("Annotation", "Count", "Intensity", theDataset, org.jfree.chart.plot.PlotOrientation.VERTICAL, true, false, false);
thePlot = (XYPlot)theChart.getPlot();
thePlot.setRenderer(new StandardXYItemRenderer(StandardXYItemRenderer.LINES));
theChartPanel = new ChartPanel(theChart);
theChartPanel.setDomainZoomable(true);
theChartPanel.setRangeZoomable(false);
//theChartPanel.setPopupMenu(null);
add(theChartPanel,BorderLayout.CENTER);
// create toolbar
theToolBar = createToolBar();
add(theToolBar,BorderLayout.SOUTH);
}
public AnnotatedPeakList getDocumentFromWorkspace(GlycanWorkspace workspace) {
return ( workspace!=null ) ?workspace.getAnnotatedPeakList() :null;
}
public void setDocumentFromWorkspace(GlycanWorkspace workspace) {
if( theDocument!=null )
theDocument.removeDocumentChangeListener(this);
theDocument = getDocumentFromWorkspace(workspace);
if( theDocument==null )
theDocument = new AnnotatedPeakList();
theDocument.addDocumentChangeListener(this);
updateView();
updateActions();
}
protected void createActions() {
theActionManager.add("new",FileUtils.defaultThemeManager.getImageIcon("new"),"Clear",KeyEvent.VK_N, "",this);
theActionManager.add("print",FileUtils.defaultThemeManager.getImageIcon("print"),"Print...",KeyEvent.VK_P, "",this);
}
protected void updateActions() {
}
private JToolBar createToolBar() {
JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
toolbar.add(theActionManager.get("new"));
toolbar.addSeparator();
toolbar.add(theActionManager.get("print"));
return toolbar;
}
//-----------
// Visualization
protected void updateData() {
}
protected void updateView() {
// clear
//for( int i=1; i<theDataset.getSeriesCount(); i++ )
//theDataset.removeSeries(theDataset.getSeriesKey(i-1));
for( int l=0; l<theDocument.getNoStructures(); l++ )
theDataset.removeSeries("series"+l);
for( int l=0; l<theDocument.getNoStructures(); l++ ) {
double[][] data = new double[2][];
data[0] = new double[theDocument.getNoPeaks()];
data[1] = new double[theDocument.getNoPeaks()];
// get intensities and order them
LinkedList<Double> sortedList = new LinkedList<Double>();
for( int i=0; i<theDocument.getNoPeaks(); i++ ) {
double intensity = theDocument.getPeak(i).getIntensity();
if( theDocument.getAnnotations(i,l).size()==0 )
intensity = 0.;
int index = Collections.binarySearch(sortedList, intensity);
if (index < 0)
index = -index - 1;
sortedList.add(index, intensity);
}
// set data
for( int i=0; i<theDocument.getNoPeaks(); i++ ) {
data[0][i] = i;
data[1][i] = sortedList.get(theDocument.getNoPeaks()-i-1);
}
theDataset.addSeries("series" + l,data);
}
}
//-----------------
// actions
public void onPrint() {
PrinterJob pj = theWorkspace.getPrinterJob();
if( pj==null )
return;
try {
pj.setPrintable(theChartPanel);
if( pj.printDialog() )
pj.print();
}
catch(Exception e) {
LogUtils.report(e);
}
}
//-----------
// listeners
public void actionPerformed(ActionEvent e) {
String action = e.getActionCommand();
if( action.equals("new") )
theApplication.onNew(theDocument);
else if( action.equals("print") )
onPrint();
updateActions();
}
}