package edu.sc.seis.sod.status.eventArm; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.DOMException; import org.w3c.dom.Element; import org.xml.sax.SAXException; import edu.sc.seis.fissuresUtil.cache.CacheEvent; 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.Start; import edu.sc.seis.sod.Status; import edu.sc.seis.sod.status.FileWritingTemplate; import edu.sc.seis.sod.status.GenericTemplate; import edu.sc.seis.sod.status.TemplateFileLoader; import edu.sc.seis.sod.status.waveformArm.WaveformMonitor; public class EventStatusTemplate extends FileWritingTemplate implements EventMonitor, WaveformMonitor { public EventStatusTemplate(Element el) throws IOException, SAXException, ParserConfigurationException, ConfigurationException { super(FileWritingTemplate.getBaseDirectoryName(), extractConstructorFilenameArg(el)); Element config = TemplateFileLoader.getTemplate(el); config.removeChild(SodUtil.getElement(config, "filename")); parse(config); } private static String extractConstructorFilenameArg(Element el) throws IOException, SAXException, ParserConfigurationException, DOMException { Element templateConfig = TemplateFileLoader.getTemplate(el); Element fileNameElement = SodUtil.getElement(templateConfig, "filename"); String filename = fileNameElement.getFirstChild().getNodeValue(); return filename; } public void setArmStatus(String status) { this.armStatus = status; write(); } public Object getTemplate(String tag, Element el) throws ConfigurationException { if(tag.equals("events")) { return new EventGroupTemplate(el); } else if(tag.equals("armStatus")) { return new ArmStatusFormatter(); } else if(tag.equals("mapEventStatus")) { return new MapImgSrc(el); } return super.getTemplate(tag, el); } private class MapImgSrc implements GenericTemplate { public MapImgSrc(Element el) { String mapFileLoc = MapEventStatus.getLocation(el); synchronized(elementsToMaps) { if(elementsToMaps.containsKey(mapFileLoc)) { map = (MapEventStatus)elementsToMaps.get(mapFileLoc); } else { map = new MapEventStatus(el); elementsToMaps.put(mapFileLoc, map); } } } public String getResult() { String myloc = getOutputDirectory().toString() + '/' + getFilename(); return SodUtil.getRelativePath(myloc, map.getLocation(), "/"); } private MapEventStatus map; } private static Map elementsToMaps = new HashMap(); public void update(EventNetworkPair ecp) { write(); } public void update(EventStationPair ecp) { write(); } public void update(EventChannelPair ecp) { write(); } public void update(EventVectorPair ecp) { write(); } public void change(CacheEvent event, Status status) { if(!addedToWaveformArm && Start.getWaveformRecipe() != null) { Start.getWaveformRecipe().addStatusMonitor(this); addedToWaveformArm = true; } write(); } private class ArmStatusFormatter implements GenericTemplate { public String getResult() { return armStatus; } } private boolean addedToWaveformArm = false; private Logger logger = LoggerFactory.getLogger(EventStatusTemplate.class); private String armStatus = ""; }