/**
* WaveformStatusTemplate.java
*
* @author Created by Charles Groves
*/
package edu.sc.seis.sod.status.waveformArm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.slf4j.LoggerFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.EventChannelPair;
import edu.sc.seis.sod.EventNetworkPair;
import edu.sc.seis.sod.EventStationPair;
import edu.sc.seis.sod.EventVectorPair;
import edu.sc.seis.sod.SodUtil;
import edu.sc.seis.sod.status.FileWritingTemplate;
import edu.sc.seis.sod.status.TemplateFileLoader;
import edu.sc.seis.sod.status.eventArm.EventStatusTemplate;
public class WaveformStatusTemplate extends FileWritingTemplate implements WaveformMonitor{
public WaveformStatusTemplate(Element el)throws IOException, SAXException, ParserConfigurationException, ConfigurationException{
super(extractConstructorBaseDirArg(el), extractConstructorFilenameArg(el));
Element config = TemplateFileLoader.getTemplate(SodUtil.getElement(el, "config"));
config.removeChild(SodUtil.getElement(config, "filename"));
parse(config);
}
private static String extractConstructorFilenameArg(Element el) throws IOException, SAXException, ParserConfigurationException, DOMException{
String fileDir = extractConstructorBaseDirArg(el);
Element eventConfigEl = SodUtil.getElement(el, "config");
Element templateConfig = TemplateFileLoader.getTemplate(eventConfigEl);
Element fileNameElement = SodUtil.getElement(templateConfig, "filename");
String filename = fileNameElement.getFirstChild().getNodeValue();
return filename;
}
private static String extractConstructorBaseDirArg(Element el){
String fileDir = null;
try{
fileDir = SodUtil.getElement(el, "fileDir").getFirstChild().getNodeValue();
}
catch(NullPointerException e){
LoggerFactory.getLogger(EventStatusTemplate.class).debug("fileDir element is null! using default");
}
if (fileDir == null){
fileDir = FileWritingTemplate.getBaseDirectoryName();
}
return fileDir;
}
protected Object getTemplate(String tag, Element el) throws ConfigurationException {
if(tag.equals("events")){
WaveformEventGroup ect = new WaveformEventGroup(el);
eventTemplates.add(ect);
return ect;
}
return super.getTemplate(tag, el);
}
public void update(EventChannelPair ecp) {
Iterator it = eventTemplates.iterator();
while(it.hasNext()) ((WaveformMonitor)it.next()).update(ecp);
write();
}
public void update(EventVectorPair ecp) {
Iterator it = eventTemplates.iterator();
while(it.hasNext()) ((WaveformMonitor)it.next()).update(ecp);
write();
}
public void update(EventStationPair ecp) {
Iterator it = eventTemplates.iterator();
while(it.hasNext()) ((WaveformMonitor)it.next()).update(ecp);
write();
}
public void update(EventNetworkPair ecp) {
Iterator it = eventTemplates.iterator();
while(it.hasNext()) ((WaveformMonitor)it.next()).update(ecp);
write();
}
private List eventTemplates = new ArrayList();
}