package edu.sc.seis.sod.subsetter.origin;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.w3c.dom.Element;
import edu.iris.Fissures.FlinnEngdahlRegion;
import edu.iris.Fissures.Location;
import edu.iris.Fissures.Quantity;
import edu.iris.Fissures.IfEvent.Magnitude;
import edu.iris.Fissures.event.EventAttrImpl;
import edu.iris.Fissures.event.OriginImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.display.configuration.DOMHelper;
import edu.sc.seis.sod.source.event.CSVEventSource;
import edu.sc.seis.sod.status.StringTree;
import edu.sc.seis.sod.status.StringTreeLeaf;
/**
* @author oliverpa
*
* Created on Jul 5, 2005
*/
public class CSVEventPrinter implements OriginSubsetter {
public CSVEventPrinter(Element config) throws Exception {
this(DOMHelper.extractText(config, "filename", STDOUT));
}
public CSVEventPrinter(String filename) throws Exception {
if(!filename.equals(STDOUT)) {
file = new File(filename);
}
createFileAndWriteHeaderIfNeeded();
}
public StringTree accept(CacheEvent eventAccess,
EventAttrImpl eventAttr,
OriginImpl preferred_origin) throws Exception {
StringBuffer buff = new StringBuffer();
buff.append(preferred_origin.getOriginTime().date_time + COM);
Location loc = preferred_origin.getLocation();
buff.append(loc.latitude + COM);
buff.append(loc.longitude + COM);
Quantity q = loc.depth;
buff.append(q.value + COM);
buff.append(q.the_units + COM);
StringBuffer magValBuf = new StringBuffer();
StringBuffer magTypeBuf = new StringBuffer();
StringBuffer magContribBuf = new StringBuffer();
Magnitude[] mags = preferred_origin.getMagnitudes();
for(int i = 0; i < mags.length; i++) {
magValBuf.append(mags[i].value);
if(mags[i].type == null || mags[i].type.equals("")) {
magTypeBuf.append("");
} else {
magTypeBuf.append(mags[i].type);
}
if(mags[i].contributor == null || mags[i].contributor.equals("")) {
magContribBuf.append("");
} else {
magContribBuf.append(mags[i].contributor);
}
if(i < mags.length - 1) {
magValBuf.append(':');
magTypeBuf.append(':');
magContribBuf.append(':');
}
}
buff.append(magValBuf + COM);
buff.append(magTypeBuf + COM);
buff.append(magContribBuf + COM);
buff.append(preferred_origin.getCatalog() + COM);
buff.append(preferred_origin.getContributor() + COM);
buff.append("\""+eventAttr.name+"\"" + COM);
FlinnEngdahlRegion region = eventAttr.region;
buff.append(region.number + COM);
buff.append("" + region.type.value());
if(file == null) {
System.out.println(buff.toString());
} else {
BufferedWriter writer = new BufferedWriter(new FileWriter(file,
true));
writer.write(buff.toString());
writer.newLine();
writer.close();
}
return new StringTreeLeaf(this, true);
}
private void createFileAndWriteHeaderIfNeeded() throws IOException {
if(file == null) {
System.out.println(getHeader());
} else if(!file.exists()) {
file.getAbsoluteFile().getParentFile().mkdirs();
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(getHeader());
writer.newLine();
writer.close();
}
}
private String getHeader() {
return CSVEventSource.TIME + COM + CSVEventSource.LATITUDE + COM
+ CSVEventSource.LONGITUDE + COM + CSVEventSource.DEPTH + COM
+ CSVEventSource.DEPTH_UNITS + COM + CSVEventSource.MAGNITUDE
+ COM + CSVEventSource.MAGNITUDE_TYPE + COM
+ CSVEventSource.MAGNITUDE_CONTRIBUTOR + COM
+ CSVEventSource.CATALOG + COM + CSVEventSource.CONTRIBUTOR
+ COM + CSVEventSource.NAME + COM + CSVEventSource.FE_REGION
+ COM + CSVEventSource.FE_REGION_TYPE;
}
private File file;
private static final String COM = ", ";
private static final String STDOUT = "<stdout>";
}