/**
* LegacyExecute.java
*
* @author Created by Omnicore CodeGuide
*/
package edu.sc.seis.sod.process.waveform;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.network.ChannelImpl;
import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl;
import edu.sc.seis.fissuresUtil.bag.StreamPump;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.SodUtil;
import edu.sc.seis.sod.status.StringTreeLeaf;
public class LegacyExecute implements WaveformProcess {
public LegacyExecute(Element config) {
Element prefixElement = SodUtil.getElement(config, "prefix");
if(prefixElement != null) {
String dssPrefix = SodUtil.getText(prefixElement);
if(dssPrefix != null && dssPrefix.length() != 0) {
prefix = dssPrefix;
} // end of if (dataDirectory.exits())
}
Element cmdElement = SodUtil.getElement(config, "command");
if(cmdElement != null) {
String cmdString = SodUtil.getText(cmdElement);
if(cmdString != null && cmdString.length() != 0) {
command = cmdString;
} // end of if (dataDirectory.exits())
}
Element workElement = SodUtil.getElement(config, "workingDirectory");
if(workElement != null) {
String workingDirectoryStr = SodUtil.getText(workElement);
if(workingDirectoryStr != null && workingDirectoryStr.length() != 0) {
workingDirectory = new File(workingDirectoryStr);
} // end of if (dataDirectory.exits())
}
}
/**
* Removes the mean from the seismograms.
*/
public WaveformResult accept(CacheEvent event,
ChannelImpl channel,
RequestFilter[] original,
RequestFilter[] available,
LocalSeismogramImpl[] seismograms,
CookieJar cookieJar) throws Exception {
LocalSeismogramImpl[] out = new LocalSeismogramImpl[seismograms.length];
System.arraycopy(seismograms, 0, out, 0, out.length);
String args = command;
for(int i = 0; i < seismograms.length; i++) {
args += " "
+ (String)cookieJar.get(AbstractSeismogramWriter.getCookieName(prefix,
channel.get_id(),
i));
} // end of for (int i=0; i<seismograms.length; i++)
int exitValue = process(args);
return new WaveformResult(out, new StringTreeLeaf(this,
exitValue == 0,
"exit value="
+ exitValue));
}
protected int process(String args) throws InterruptedException, IOException {
if(workingDirectory != null) {
workingDirectory.mkdirs();
}
Process process = Runtime.getRuntime().exec(args,
null,
workingDirectory);
StreamPump outPump = new StreamPump(process.getInputStream(),
new BufferedWriter(new PrintWriter(System.out)));
StreamPump errPump = new StreamPump(process.getErrorStream(),
new BufferedWriter(new PrintWriter(System.err)));
outPump.start();
errPump.start();
int exitValue = process.waitFor();
return exitValue;
}
protected String command;
protected String prefix = "";
protected File workingDirectory = null;
}