package jas2.swingstudio;
import hepjas.analysis.*;
import hepjas.analysis.peer.*;
import jas2.job.*;
import jas2.jds.module.LocalDIM;
import jas2.jds.module.ModuleException;
import jas2.hist.Rebinnable1DHistogramData;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import jas2.jds.interfaces.RemoteJobUpdate;
import jas2.util.tree.*;
import jas2.plugin.*;
import jas2.loader.*;
import java.util.zip.*;
import javax.swing.*;
public class LocalJob extends AbstractJob implements jas2.swingstudio.Job, AnalysisApplication, Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
// Create a LocalJob without an open dataset
public LocalJob(JASJob jasJob, String jobName)
{
super(jobName);
m_jasJob = jasJob;
m_progress = new DefaultBoundedRangeModel();
m_app.setModel(m_progress);
PeerSupport.setAnalysisApplication(this);
setHepAnalysisJob(new hepjas.analysis.Job(jobName));
m_jobName = jobName;
setClassLoader(new LocalClassLoader());
getTreeRoot().addNodeListener(new SimpleNodeListener()
{
public void treeChanged(TreeItem item)
{
//System.out.println("treeChanged "+item);
if ((item.flags & TreeItem.DELETED) != 0) m_jasJob.deleteNode(item);
else m_jasJob.addNode(item);
m_jasJob.updateTree();
}
});
}
// Create a LocalJob which will have an initial dataset opened by a LocalDIM
LocalJob(JASJob jasJob, String jobName, LocalDIM dim, String dataSource)
{
this(jasJob,jobName);
m_DIM = dim;
m_dataSource = dataSource;
}
public hepjas.analysis.Job currentJob()
{
return getHepAnalysisJob();
}
public JobPeer createJobPeer(String s, hepjas.analysis.Job job)
{
return new JobJob(this);
}
public boolean open() throws ModuleException
{
if (m_DIM != null)
{
EventSource es = m_DIM.openDataSet(m_dataSource);
if (es !=null) setEventSource(es);
return true;
}
else return false;
}
public boolean isLoaded(String className)
{
return m_loaded.contains(className);
}
public void reopen(ObjectInputStream stream, JASJob jasJob) throws OpenJobException
{
m_app = JavaAnalysisStudio.getApp();
if (m_DIM != null)
m_DIM.setLocalJobBuilder(m_app.getLocalJobBuilder());
setClassLoader(new LocalClassLoader());
m_jasJob = jasJob;
m_progress = new DefaultBoundedRangeModel();
m_app.setModel(m_progress);
PeerSupport.setAnalysisApplication(this);
setHepAnalysisJob(new hepjas.analysis.Job(m_jobName));
getTreeRoot().addNodeListener(new SimpleNodeListener()
{
public void treeChanged(TreeItem item)
{
if ((item.flags & TreeItem.DELETED) != 0) m_jasJob.deleteNode(item);
else m_jasJob.addNode(item);
m_jasJob.updateTree();
}
});
Enumeration e = m_loaded.elements();
try
{
while (e.hasMoreElements())
{
String s = (String) e.nextElement();
super.loadObject(s); // super.loadObject(String s) does not add s to m_loaded
// (Calling loadObject(s) causes infinite loop.)
}
if (m_DIM != null)
{
EventSource es = m_DIM.openDataSet(m_dataSource);
if (es != null) setEventSource(es);
}
int pos;
boolean atEnd;
try
{
pos = stream.readInt();
atEnd = stream.readBoolean();
}
catch (EOFException x) // early versions did not contain this (pre PR2);
{
pos = 0;
atEnd = false;
}
if (atEnd) go(0);
else if (pos > 0) go(pos);
}
catch (Exception x)
{
throw new OpenJobException(x);
}
}
public void save()
{
}
public void loadObject(String s) throws LoaderException
{
// we expect super.loadObject() to do any cleanup before throwing an exception
super.loadObject(s);
// if no exception...
m_loaded.addElement(s);
}
public Class loadClientClass(String className) throws ClassNotFoundException
{
return m_app.getExtensionLoader().loadClass(className);
}
public OutputStream getLogStream()
{
return m_app.getOutputStream("Log Messages");
}
public OutputStream getErrorStream()
{
return m_app.getOutputStream("Error Messages");
}
public void reload()
{
setClassLoader(new LocalClassLoader());
super.unloadAll();
Enumeration e = m_loaded.elements();
try
{
while (e.hasMoreElements())
super.loadObject( (String) e.nextElement() );
}
catch (LoaderException le)
{
m_app.error("Could not reload", le);
}
}
public void unloadAll()
{
setClassLoader(new LocalClassLoader());
super.unloadAll();
m_loaded.removeAllElements();
}
public void sendMessage(String message)
{
JavaAnalysisStudio.getApp().setMessage(message);
}
protected void reportError(AnalysisException e)
{
JavaAnalysisStudio.getApp().error("Error running remote analysis (see Error Message window for details)");
}
public void notifyInfo()
{
m_jasJob.setCommandChanged();
if (eventsTotal() > 0) m_maxEvents = eventsTotal();
else m_maxEvents = 100; // Arbitrary
m_progress.setMaximum(m_maxEvents);
m_progress.setValue(eventsAnalyzed());
if (!m_runListeners.isEmpty()) fireRunListeners(new RunEvent(this,isRunning() ? RunEvent.RUNSTARTED : RunEvent.RUNSTOPPED));
}
public void notifyInfo(int i)
{
int eventsAnalyzed = i;
if (eventsAnalyzed > m_maxEvents)
{
m_maxEvents *= 3;
m_progress.setMaximum(m_maxEvents);
}
m_progress.setValue(eventsAnalyzed);
}
public boolean isChanged()
{
return m_changes > 0;
}
public void addRunListener(RunListener listener)
{
m_runListeners.addElement(listener);
}
public void removeRunListener(RunListener listener)
{
m_runListeners.removeElement(listener);
}
private void fireRunListeners(RunEvent event)
{
Enumeration e = m_runListeners.elements();
while (e.hasMoreElements())
((RunListener) e.nextElement()).runStateChanged(event);
}
protected Thread createEventLoopThread(Runnable loop) // overriden by JDSJob
{
Thread t = super.createEventLoopThread(loop);
t.setPriority(t.getPriority()-1); // decrease to avoid locking out GUI
return t;
}
private Vector m_runListeners = new Vector();
private transient JavaAnalysisStudio m_app = JavaAnalysisStudio.getApp();
private transient JASJob m_jasJob;
private transient int m_maxEvents = 0;
private transient BoundedRangeModel m_progress;
private Vector m_loaded = new Vector();
private int m_changes = 0; // What is this for? (It is never changes from zero.)
private LocalDIM m_DIM;
private String m_dataSource; // used as an argument for LocalDIM.openDataSet()
private String m_dataSetName;// a descriptive name used in the treepackage jas2.swingstudio;
private String m_jobName;
}
Ads help maintain this website.