package edu.sc.seis.sod.status; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Iterator; import org.w3c.dom.Element; import edu.iris.Fissures.IfNetwork.Channel; import edu.iris.Fissures.network.ChannelIdUtil; import edu.sc.seis.sod.ConfigurationException; import edu.sc.seis.sod.Status; public class ChannelFormatter extends Template implements ChannelTemplate { public ChannelFormatter() { templates = new ArrayList(); templates.add(getTemplate("id", null)); } public static ChannelFormatter makeSiteAndCode() { ChannelFormatter formatter = new ChannelFormatter(); formatter.templates.clear(); formatter.templates.add(formatter.getTemplate("siteCode", null)); formatter.templates.add(formatter.textTemplate(".")); formatter.templates.add(formatter.getTemplate("channelCode", null)); return formatter; } public ChannelFormatter(Element el) throws ConfigurationException { this(el, null); } public ChannelFormatter(Element el, boolean filize) throws ConfigurationException { this(el, null, filize); } public ChannelFormatter(Element el, ChannelGroupTemplate cgt) throws ConfigurationException { this(el, cgt, false); } public ChannelFormatter(Element el, ChannelGroupTemplate cgt, boolean filize) throws ConfigurationException { this.cgt = cgt; parse(el, filize); filizeResults = filize; } protected Object textTemplate(final String text) { return new ChannelTemplate() { public String getResult(Channel chan) { return text; } }; } protected Object getTemplate(String tag, final Element el) { if(tag.equals("stationCode")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.get_id().station_code; } }; } else if(tag.equals("channelCode")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.get_id().channel_code; } }; } else if(tag.equals("networkCode")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.get_id().network_id.network_code; } }; } else if(tag.equals("stationCode")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.get_code(); } }; } else if(tag.equals("siteCode")) { return new ChannelTemplate() { public String getResult(Channel chan) { if(chan.get_id().site_code.trim().length() == 0 && filizeResults) { return "__"; } return chan.get_id().site_code; } }; } else if(tag.equals("beginTime")) { return new ChannelTemplate() { public String getResult(Channel chan) { return btt.getResult(chan.get_id().begin_time); } TimeTemplate btt = new TimeTemplate(el, false); }; } else if(tag.equals("endTime")) { return new ChannelTemplate() { public String getResult(Channel chan) { return btt.getResult(chan.getEndTime()); } TimeTemplate btt = new TimeTemplate(el, false); }; } else if(tag.equals("beginTimeUnformatted")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.get_id().begin_time.date_time; } }; } else if(tag.equals("dip")) { return new ChannelTemplate() { public String getResult(Channel chan) { return format(chan.getOrientation().dip); } }; } else if(tag.equals("azimuth")) { return new ChannelTemplate() { public String getResult(Channel chan) { return format(chan.getOrientation().azimuth); } }; } else if(tag.equals("name")) { return new ChannelTemplate() { public String getResult(Channel chan) { return chan.getName(); } }; } else if(tag.equals("lat")) { return new ChannelTemplate() { public String getResult(Channel chan) { return format(chan.getSite().getLocation().latitude); } }; } else if(tag.equals("lon")) { return new ChannelTemplate() { public String getResult(Channel chan) { return format(chan.getSite().getLocation().longitude); } }; } else if(tag.equals("lon")) { return new ChannelTemplate() { public String getResult(Channel chan) { return format(chan.getSite().getLocation().longitude); } }; } else if(tag.equals("status") && cgt != null) { return new ChannelTemplate() { public String getResult(Channel chan) { return cgt.getStatus(chan); } }; } else if(tag.equals("standing") && cgt != null) { return new ChannelTemplate() { public String getResult(Channel chan) { Status status = (Status)cgt.channelMap.get(chan); return status.getStanding().toString(); } }; } else if(tag.equals("id")) { return new ChannelTemplate() { public String getResult(Channel chan) { return ChannelIdUtil.toString(chan.get_id()); } }; } return super.getCommonTemplate(tag, el); } private String format(double d) { synchronized(formatter) { return formatter.format(d); } } private DecimalFormat formatter = new DecimalFormat("#.#"); public String getResult(Channel chan) { StringBuffer buf = new StringBuffer(); Iterator it = templates.iterator(); while(it.hasNext()) { ChannelTemplate cur = (ChannelTemplate)it.next(); buf.append(cur.getResult(chan)); } if(filizeResults) { return FissuresFormatter.filize(buf.toString()); } else { return buf.toString(); } } boolean filizeResults = false; ChannelGroupTemplate cgt; }