ingo@1091: package de.intevation.flys.artifacts.model;
ingo@1091: 
ingo@1091: import java.io.IOException;
ingo@1091: import java.io.File;
ingo@1091: import java.io.FileOutputStream;
ingo@1091: import java.io.OutputStreamWriter;
ingo@1091: import java.io.PrintWriter;
ingo@1106: import java.util.ArrayList;
ingo@1106: import java.util.List;
ingo@1091: 
ingo@1127: import de.intevation.artifacts.CallContext;
ingo@1127: 
ingo@1127: import de.intevation.flys.artifacts.FLYSArtifact;
ingo@1650: import de.intevation.flys.wsplgen.FacetCreator;
ingo@1127: 
ingo@1091: 
ingo@1091: public class WSPLGENJob {
ingo@1091: 
ingo@1091:     public static final String GEL_SPERRE   = "SPERRE";
ingo@1091:     public static final String GEL_NOSPERRE = "NOSPERRE";
ingo@1091: 
ingo@1091: 
ingo@1127:     protected FLYSArtifact artifact;
ingo@1127: 
ingo@1127:     protected CallContext callContext;
ingo@1127: 
ingo@1149:     protected WSPLGENCalculation calculation;
ingo@1149: 
ingo@1650:     protected FacetCreator facetCreator;
ingo@1650: 
ingo@1127:     protected File workingDir;
ingo@1127: 
ingo@1091:     protected String dgm;
ingo@1091:     protected String pro;
ingo@1091:     protected String wsp;
ingo@1091:     protected String wspTag;
ingo@1091:     protected String axis;
ingo@1091:     protected String area;
ingo@1091:     protected String gel;
ingo@1091:     protected String outFile;
ingo@1091: 
ingo@1106:     protected List<String> lin;
ingo@1106: 
ingo@1091:     protected int out;
ingo@1091: 
ingo@1091:     protected double start;
ingo@1091:     protected double end;
ingo@1091:     protected double from;
ingo@1091:     protected double to;
ingo@1091:     protected double diff;
ingo@1091:     protected double dist;
ingo@1091: 
ingo@1091: 
ingo@1091: 
ingo@1149:     public WSPLGENJob(
ingo@1149:         FLYSArtifact       flys,
ingo@1149:         File               workingDir,
ingo@1650:         FacetCreator       facetCreator,
ingo@1149:         CallContext        context,
ingo@1149:         WSPLGENCalculation calculation)
ingo@1149:     {
ingo@1650:         this.artifact     = flys;
ingo@1650:         this.workingDir   = workingDir;
ingo@1650:         this.facetCreator = facetCreator;
ingo@1650:         this.callContext  = context;
ingo@1650:         this.calculation  = calculation;
ingo@1127: 
ingo@1106:         out   = -1;
ingo@1106:         start = Double.NaN;
ingo@1106:         end   = Double.NaN;
ingo@1106:         from  = Double.NaN;
ingo@1106:         to    = Double.NaN;
ingo@1106:         diff  = Double.NaN;
ingo@1106:         dist  = Double.NaN;
raimund@2639:         lin   = new ArrayList<String>(3);
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1127:     public File getWorkingDir() {
ingo@1127:         return workingDir;
ingo@1127:     }
ingo@1127: 
ingo@1127: 
ingo@1149:     public FLYSArtifact getArtifact() {
ingo@1149:         return artifact;
ingo@1149:     }
ingo@1149: 
ingo@1149: 
ingo@1650:     public FacetCreator getFacetCreator() {
ingo@1650:         return facetCreator;
ingo@1650:     }
ingo@1650: 
ingo@1650: 
ingo@1149:     public WSPLGENCalculation getCalculation() {
ingo@1149:         return calculation;
ingo@1149:     }
ingo@1149: 
ingo@1149: 
ingo@1127:     public CallContext getCallContext() {
ingo@1127:         return callContext;
ingo@1127:     }
ingo@1127: 
ingo@1127: 
ingo@1091:     public void setWsp(String wsp) {
ingo@1091:         this.wsp = wsp;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getWsp() {
ingo@1091:         return wsp;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setWspTag(String wspTag) {
ingo@1091:         this.wspTag = wspTag;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getWspTag() {
ingo@1091:         return wspTag;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1106:     public void addLin(String lin) {
ingo@1106:         this.lin.add(lin);
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1106:     public List<String> getLin() {
ingo@1091:         return lin;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setAxis(String axis) {
ingo@1091:         this.axis = axis;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getAxis() {
ingo@1091:         return axis;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setArea(String area) {
ingo@1091:         this.area = area;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getArea() {
ingo@1091:         return area;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setOut(int out) {
ingo@1091:         this.out = out;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public int getOut() {
ingo@1091:         return out;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setOutFile(String outFile) {
ingo@1091:         this.outFile = outFile;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getOutFile() {
ingo@1091:         return outFile;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setStart(double start) {
ingo@1091:         this.start = start;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getStart() {
ingo@1091:         return start;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setEnd(double end) {
ingo@1091:         this.end = end;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getEnd() {
ingo@1091:         return end;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setPro(String pro) {
ingo@1091:         this.pro = pro;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getPro() {
ingo@1091:         return pro;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setDgm(String dgm) {
ingo@1091:         this.dgm = dgm;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getDgm() {
ingo@1091:         return dgm;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setFrom(double from) {
ingo@1091:         this.from = from;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getFrom() {
ingo@1091:         return from;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setTo(double to) {
ingo@1091:         this.to = to;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getTo() {
ingo@1091:         return to;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setDiff(double diff) {
ingo@1091:         this.diff = diff;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getDiff() {
ingo@1091:         return diff;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setDist(double dist) {
ingo@1091:         this.dist = dist;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public double getDist() {
ingo@1091:         return dist;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void setGel(String gel) {
ingo@1091:         if (gel == null || gel.length() == 0) {
ingo@1091:             return;
ingo@1091:         }
ingo@1091: 
ingo@1091:         if (gel.equals(GEL_SPERRE) || gel.equals(GEL_NOSPERRE)) {
ingo@1091:             this.gel = gel;
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public String getGel() {
ingo@1091:         return gel;
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     public void toFile(File file)
ingo@1091:     throws IOException, IllegalArgumentException
ingo@1091:     {
ingo@1091:         PrintWriter writer = null;
ingo@1091: 
ingo@1091:         try {
ingo@1091:             writer =
ingo@1091:                 new PrintWriter(
ingo@1091:                     new OutputStreamWriter(
ingo@1091:                         new FileOutputStream(file)));
ingo@1091: 
ingo@1091:             write(writer);
ingo@1091:         }
ingo@1091:         finally {
ingo@1091:             if (writer != null) {
ingo@1091:                 writer.flush();
ingo@1091:                 writer.close();
ingo@1091:             }
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     protected void write(PrintWriter writer)
ingo@1091:     throws IOException, IllegalArgumentException
ingo@1091:     {
ingo@1110:         writeWsp(writer);    // required
ingo@1110:         writeWspTag(writer); // required
ingo@1091:         writeLin(writer);
ingo@1091:         writeAxis(writer);
ingo@1091:         writeArea(writer);
ingo@1091:         writeOut(writer);
ingo@1091:         writeOutFile(writer);
ingo@1091:         writeRange(writer);
ingo@1091:         writeDelta(writer);
ingo@1091:         writeGel(writer);
ingo@1091:         writeDist(writer);
ingo@1091:         writePro(writer);
ingo@1110:         writeDgm(writer);    // required
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     protected void writeWsp(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         String wsp = getWsp();
ingo@1091: 
ingo@1091:         if (wsp != null && wsp.length() > 0) {
ingo@1091:             writer.println("-WSP=\"" + wsp + "\"");
ingo@1091:             return;
ingo@1091:         }
ingo@1091: 
ingo@1091:         throw new IllegalArgumentException("Required WSP missing!");
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeWspTag(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         String wspTag = getWspTag();
ingo@1091: 
ingo@1091:         if (wspTag != null && wspTag.length() > 0) {
ingo@1091:             writer.println("-WSPTAG=\"" + wspTag + "\"");
ingo@1091:             return;
ingo@1091:         }
ingo@1091: 
ingo@1091:         throw new IllegalArgumentException("Required WSPTAG missing!");
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeLin(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1106:         List<String> lins = getLin();
ingo@1091: 
ingo@1106:         if (lins != null && !lins.isEmpty()) {
ingo@1106:             for (String lin: lins) {
ingo@1106:                 writer.println("-LIN=\"" + lin + "\"");
ingo@1106:             }
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeAxis(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         String axis = getAxis();
ingo@1091: 
ingo@1091:         if (axis != null && axis.length() > 0) {
ingo@1091:             writer.println("-ACHSE=\"" + axis + "\"");
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeGel(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         if (area != null && area.length() > 0) {
ingo@1091:             writer.println("-GEL=" + getGel());
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeArea(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         String area = getArea();
ingo@1091: 
ingo@1091:         if (area != null && area.length() > 0) {
ingo@1091:             writer.println("-GEBIET=\"" + area + "\"");
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091: 
ingo@1091:     protected void writeOut(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         int out = getOut();
ingo@1091: 
ingo@1091:         if (out >= 0) {
ingo@1091:             writer.println("-OUTPUT=" + String.valueOf(out));
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeOutFile(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         String outFile = getOutFile();
ingo@1091: 
ingo@1091:         if (outFile != null && outFile.length() > 0) {
ingo@1091:             writer.println("-AUSGABE=\""+ outFile + "\"");
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeRange(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         StringBuilder sb = new StringBuilder("-STRECKE=");
ingo@1091: 
ingo@1091:         double start = getStart();
ingo@1091:         double end   = getEnd();
ingo@1091: 
ingo@1091:         if (Double.isNaN(start) && Double.isNaN(end)) {
ingo@1091:             return;
ingo@1091:         }
ingo@1091: 
ingo@1091:         if (! Double.isNaN(getStart())) {
ingo@1091:             sb.append(getStart());
ingo@1091:         }
ingo@1091: 
ingo@1091:         sb.append(",");
ingo@1091: 
ingo@1091:         if (! Double.isNaN(getEnd())) {
ingo@1091:             sb.append(getEnd());
ingo@1091:         }
ingo@1091: 
ingo@1091:         writer.println(sb.toString());
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeDelta(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         StringBuilder sb = new StringBuilder("-DELTA=");
ingo@1091:         if (! Double.isNaN(from)) {
ingo@1091:             sb.append(from);
ingo@1091:         }
ingo@1091: 
ingo@1091:         sb.append(",");
ingo@1091: 
ingo@1091:         if (! Double.isNaN(to)) {
ingo@1091:             sb.append(to);
ingo@1091:         }
ingo@1091: 
ingo@1091:         sb.append(",");
ingo@1091: 
ingo@1091:         if (! Double.isNaN(diff)) {
ingo@1091:             sb.append(diff);
ingo@1091:         }
ingo@1091: 
ingo@1091:         writer.println(sb.toString());
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeDist(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         if (! Double.isNaN(getDist())) {
ingo@1091:             writer.println("-DIST=" + String.valueOf(getDist()));
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writePro(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         if (pro != null && pro.length() > 0) {
ingo@1091:             writer.println("-PRO=\"" + getPro() + "\"");
ingo@1091:         }
ingo@1091:     }
ingo@1091: 
ingo@1091:     protected void writeDgm(PrintWriter writer)
ingo@1091:     throws IllegalArgumentException
ingo@1091:     {
ingo@1091:         if (dgm != null && dgm.length() > 0) {
ingo@1091:             writer.println("-DGM=\"" + getDgm() + "\"");
ingo@1091:             return;
ingo@1091:         }
ingo@1091: 
ingo@1091:         throw new IllegalArgumentException("Required DGM missing!");
ingo@1091:     }
ingo@1091: }
ingo@1091: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :