package edu.sc.seis.sod.process.waveform; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TimeZone; import org.apache.velocity.VelocityContext; import edu.iris.Fissures.IfEvent.EventAccessOperations; import edu.iris.Fissures.IfNetwork.Channel; import edu.iris.Fissures.model.ISOTime; import edu.sc.seis.fissuresUtil.chooser.ThreadSafeSimpleDateFormat; import edu.sc.seis.fissuresUtil.display.configuration.BorderConfiguration; import edu.sc.seis.fissuresUtil.display.configuration.BorderTitleConfiguration; import edu.sc.seis.fissuresUtil.display.configuration.SeismogramDisplayConfiguration; import edu.sc.seis.fissuresUtil.time.MicroSecondTimeRange; import edu.sc.seis.sod.velocity.ContextWrangler; import edu.sc.seis.sod.velocity.SimpleVelocitizer; public class SeismogramTitler { public SeismogramTitler(BorderConfiguration titleBorder) { this.titleBorder = titleBorder; sv = new SimpleVelocitizer(); BorderTitleConfiguration[] titles = titleBorder.getTitles(); titleFormatStrings = new String[titles.length]; for(int i = 0; i < titles.length; i++) { titleFormatStrings[i] = titles[i].getTitle(); } } public void title(EventAccessOperations event, Channel channel, MicroSecondTimeRange timeRange) { title(event, channel, timeRange, null); } public void title(EventAccessOperations event, Channel channel, MicroSecondTimeRange timeRange, Map<String, Object> extras) { VelocityContext vc = ContextWrangler.createContext(channel); ContextWrangler.insertIntoContext(channel, vc); ContextWrangler.insertIntoContext(event, vc); vc.put("beginTime", df.format(timeRange.getBeginTime())); vc.put("endTime", df.format(timeRange.getEndTime())); if (extras != null) { for (String key : extras.keySet()) { vc.put(key, extras.get(key)); } } BorderTitleConfiguration[] titles = titleBorder.getTitles(); for(int j = 0; j < titles.length; j++) { titles[j].setText(sv.evaluate(titleFormatStrings[j], vc)); } } public static BorderConfiguration[] extractBorderConfigs(SeismogramDisplayConfiguration[] sdcs) { List borderConfigs = new ArrayList(); for(int i = 0; i < sdcs.length; i++) { borderConfigs.add(sdcs[i].getBorders()); } return (BorderConfiguration[])borderConfigs.toArray(new BorderConfiguration[0]); } private ThreadSafeSimpleDateFormat df = new ThreadSafeSimpleDateFormat("yyyy-MM-dd HH:mm:ss z", ISOTime.UTC); private SimpleVelocitizer sv; private String[] titleFormatStrings; private BorderConfiguration titleBorder; }