/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.autoplot;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.util.List;
import java.util.WeakHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.das2.datum.LoggerManager;
import org.das2.event.DataRangeSelectionEvent;
import org.das2.event.DataRangeSelectionListener;
import org.autoplot.bookmarks.Bookmark;
import org.autoplot.bookmarks.BookmarksException;
import org.autoplot.datasource.DataSetSelector;
import org.autoplot.datasource.TimeRangeToolEventsList;
import org.autoplot.datasource.WindowManager;
import org.xml.sax.SAXException;
/**
*
* @author jbf
*/
public class EventsListToolUtil {
private static final Logger logger= LoggerManager.getLogger("autoplot.events");
public static void deflts( DataSetSelector sel ) {
final String sdeft= "\n" +
"\n" +
" \n" +
" RBSP-A EMFISIS Waveform Events\n" +
" http://emfisis.physics.uiowa.edu/events/rbsp-a/burst/rbsp-a_burst_times_$Y$m$d.txt?eventListColumn=field3&column=field0&timerange=2013-03-03\n" +
" \n" +
" \n" +
" RBSP-B EMFISIS Waveform Events\n" +
" http://emfisis.physics.uiowa.edu/events/rbsp-b/burst/rbsp-b_burst_times_$Y$m$d.txt?eventListColumn=field3&column=field0&timerange=2013-03-03\n" +
" \n" +
"";
List deft=null;
try {
deft = Bookmark.parseBookmarks(sdeft);
} catch (BookmarksException ex) {
logger.log(Level.SEVERE, ex.getMessage(), ex);
} catch (SAXException ex) {
logger.log(Level.SEVERE, ex.getMessage(), ex);
} catch (IOException ex) {
logger.log(Level.SEVERE, ex.getMessage(), ex);
}
org.autoplot.bookmarks.Util.loadRecent( "eventsRecent", sel, deft );
}
private static final WeakHashMap instances= new WeakHashMap();
private static final WeakHashMap instances2= new WeakHashMap();
/**
* this must be called on the event thread.
* @param t
*/
public static void show( final AutoplotUI t ) {
if ( !EventQueue.isDispatchThread() ) {
throw new IllegalArgumentException("must be called from the event thread");
}
JDialog dialog= instances.get(t);
if ( dialog==null ) {
getEventsList( t );
dialog= instances.get(t);
}
String uri= t.getDom().getEventsListUri();
if ( uri!=null && uri.length()>0 ) {
instances2.get(t).getDataSetSelector().setValue(uri);
instances2.get(t).getDataSetSelector().maybePlot(0);
}
dialog.setVisible(true);
}
/**
* set the location of the events list we should use. show(t)
* should be called to show the GUI.
* @param t the app
* @param uri the location of the events list.
*/
public static void setEventsListURI( final AutoplotUI t, String uri ) {
if ( !EventQueue.isDispatchThread() ) {
throw new IllegalArgumentException("must be called from the event thread");
}
JDialog dialog= instances.get(t);
if ( dialog==null ) {
getEventsList( t ); // create events list GUI.
//dialog= instances.get(t);
}
//dialog.setVisible(true);
instances2.get(t).getDataSetSelector().setValue(uri);
instances2.get(t).getDataSetSelector().maybePlot(0);
}
/**
* find the GUI for this application, creating one if necessary.
* @param t the app.
* @return the single TimeRangeToolEventsList for the app.
*/
public static TimeRangeToolEventsList getEventsList( final AutoplotUI t ) {
JDialog dialog= instances.get(t);
if ( dialog==null ) {
final JDialog d= new JDialog( t, "Events List");
d.setName("eventsListTool");
d.setModal(false);
final TimeRangeToolEventsList ll= new TimeRangeToolEventsList();
ll.addDataRangeSelectionListener( new DataRangeSelectionListener() {
@Override
public void dataRangeSelected(DataRangeSelectionEvent e) {
t.applicationModel.dom.setTimeRange( e.getDatumRange() );
}
});
ll.getDataSetSelector().addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent ev ) {
t.getDom().setEventsListUri( ll.getDataSetSelector().getValue() );
}
});
deflts( ll.getDataSetSelector() );
ll.getDataSetSelector().setValue("");
d.setDefaultCloseOperation( JFrame.HIDE_ON_CLOSE );
d.getContentPane().add( ll );
d.pack();
d.setLocationRelativeTo(t);
d.setResizable(true);
WindowManager.getInstance().recallWindowSizePosition(d);
d.addWindowListener( new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e); //To change body of generated methods, choose Tools | Templates.
WindowManager.getInstance().recordWindowSizePosition(d);
}
} );
instances.put( t, d );
instances2.put( t, ll);
}
return instances2.get(t);
}
}