package edu.sc.seis.sod.tools; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.log4j.BasicConfigurator; import org.apache.velocity.VelocityContext; import com.martiansoftware.jsap.FlaggedOption; import com.martiansoftware.jsap.JSAP; import com.martiansoftware.jsap.JSAPException; import com.martiansoftware.jsap.Switch; import edu.sc.seis.seisFile.client.BoxAreaParser; import edu.sc.seis.seisFile.client.DonutParser; public class find_stations extends CommandLineTool { public find_stations() throws JSAPException { this(new String[0]); } public find_stations(String[] args) throws JSAPException { super(args); } public VelocityContext getContext() { VelocityContext con = super.getContext(); if((outputFormatFlag != null && !Boolean.FALSE.equals(result.getObject(outputFormatFlag.getID()))) || needsStationAndSpecified()) { con.put("needsStationAND", Boolean.TRUE); } if (isSpecified(beginParam) || isSpecified(endParam)) { con.put("needsEffectiveTimeRange", Boolean.TRUE); if (isSpecified(beginParam) && ! isSpecified(endParam)) { con.put("end", "<now/>"); } } else { con.put("needsEffectiveTimeRange", Boolean.FALSE); } return con; } boolean needsStationAndSpecified() { Iterator it = needsStationAndIfSpecified.iterator(); while(it.hasNext()) { FlaggedOption cur = (FlaggedOption)it.next(); if(isSpecified(cur)) { return true; } } return false; } protected void addParams() throws JSAPException { addDefaultParams(); String lonPrinter = "$station.getLongitude(' ##0.0000;-##0.0000')"; String latPrinter = "$station.getLatitude(' ##0.0000;-##0.0000')"; String theRest = "$station.getElevation('###0.') ${station.netCode}.${station.code}"; outputFormatFlag = OutputFormatParser.createParam(lonPrinter + " " + latPrinter + " " + theRest, latPrinter + " " + lonPrinter + " " + theRest); add(outputFormatFlag); } protected void addDefaultParams() throws JSAPException { super.addParams(); needsStationAndIfSpecified = new ArrayList(); addStationParam(BoxAreaParser.createParam("A station constraining box as west/east/south/north")); addStationParam(DonutParser.createParam("A donut as lat/lon/minRadius/maxRadius")); addStationParam(createListOption("stations", 's', "stations", "The codes of stations to retrieve")); add(createListOption("networks", 'n', "networks", "The codes of networks to retrieve")); beginParam = TimeParser.createParam("begin", null, "The earliest time to overlap an accepted station", false); addStationParam(beginParam); endParam = TimeParser.createParam("end", null, "The latest time to overlap an accepted station", true); addStationParam(endParam); add(new Switch("includeRestricted", JSAP.NO_SHORTFLAG, "includeRestricted", "Without this restricted stations and channels are rejected")); } private void addStationParam(FlaggedOption option) throws JSAPException { needsStationAndIfSpecified.add(option); add(option); } protected FlaggedOption beginParam; protected FlaggedOption endParam; private List needsStationAndIfSpecified; protected FlaggedOption outputFormatFlag; public static void main(String[] args) throws Exception { BasicConfigurator.configure(); CommandLineTool.run(new find_stations(args)); } }