diff gnv-artifacts/src/main/java/de/intevation/gnv/state/CoordinateSelectionState.java @ 335:e964a3d8f7bc

Some Refactoring work done. Moved Transition to State gnv-artifacts/trunk@401 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 08 Dec 2009 08:39:03 +0000
parents
children 3ddc22aab764
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/CoordinateSelectionState.java	Tue Dec 08 08:39:03 2009 +0000
@@ -0,0 +1,138 @@
+/**
+ *
+ */
+package de.intevation.gnv.state;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.io.ParseException;
+import com.vividsolutions.jts.io.WKTReader;
+
+import de.intevation.gnv.geobackend.base.Result;
+import de.intevation.gnv.state.describedata.DefaultKeyValueDescribeData;
+import de.intevation.gnv.state.describedata.KeyValueDescibeData;
+import de.intevation.gnv.state.describedata.NamedArrayList;
+import de.intevation.gnv.state.describedata.NamedCollection;
+import de.intevation.gnv.utils.InputValidator;
+import de.intevation.gnv.utils.exception.ValidationException;
+
+/**
+ * @author Tim Englich <tim.englich@intevation.de>
+ *
+ */
+public class CoordinateSelectionState extends StateBase {
+
+    /**
+     * the logger, used to log exceptions and additonaly information
+     */
+    private static Logger log = Logger.getLogger(CoordinateSelectionState.class);
+    
+    /**
+     * The UID of this Class
+     */
+    private static final long serialVersionUID = 6318923553625195063L;
+
+    /**
+     * Constructor
+     */
+    public CoordinateSelectionState() {
+        super();
+    }
+
+    @Override
+    protected void purifyResult(Collection<Result> result, String uuid) {
+        log.debug("CoordinateSelectionState.purifyResult");
+        Collection<Object> describeData = this.getDescibeData(uuid);
+        if (describeData == null) {
+            describeData = new ArrayList<Object>();
+        }
+        NamedCollection<KeyValueDescibeData> keyValueDescibeData = this
+                .extractKVP(result, "FEATUREID", "SHAPE");
+        describeData.add(keyValueDescibeData);
+        this.setDescibeData(uuid, describeData);
+    }
+    
+    @Override
+    protected String prepareInputData4RegionDBQuery(String value) {
+        log.debug("CoordinateSelectionState.prepareInputData4RegionDBQuery");
+        double distance=0.;
+        String returnValue = null;
+        try {
+            Point center = new InputValidator().getPointValue(value);
+            String meshIDValue = super.inputData.get("meshid").getValue();
+            int segments = 97;
+            int meshid = new Integer(meshIDValue);
+            if (meshid == 3 || meshid == 5){ // TODO nicht hier festbrennen.
+                distance = 0.15; //nord-ostsee 6nm // 97 Stützpunkte
+            }else if (meshid == 1 || meshid == 4){
+                distance = 0.03; //Kuestenmodell 1 nm
+            }else if (meshid == 2 || meshid == 321){
+                distance = 0.3; //SST Karten ca 20km
+            }else if (meshid == 641){
+                distance = 0.3; //Eisdaten Klima
+            }
+            returnValue = center.buffer(distance,segments).toText();
+        } catch (NumberFormatException e) {
+            log.error(e,e);
+        } catch (ValidationException e) {
+            log.error(e,e);
+        }
+        return returnValue;
+        
+    }
+    
+    /**
+     * @see de.intevation.gnv.state.StateBase#extractKVP(java.util.Collection, java.lang.String, java.lang.String)
+     */
+    @Override
+    protected NamedCollection<KeyValueDescibeData> extractKVP(
+            Collection<Result> result,
+            String keyid,
+            String valueid) {
+        Iterator<Result> rit = result.iterator();
+        NamedCollection<KeyValueDescibeData> keyValueDescibeData = new NamedArrayList<KeyValueDescibeData>(
+        this.dataName, result.size());
+        keyValueDescibeData.setMultiSelect(this.dataMultiSelect);
+        String prevKey = null;
+        while (rit.hasNext()) {
+            Result resultValue = rit.next();
+            String key = resultValue.getString(keyid);
+            if(prevKey == null || !prevKey.equals(key)){ // müssen wir so machen, da die sde kein select distinct auf layern zulässt.
+                String geomString = this.convert2DisplayCoordinate(resultValue.getString(valueid));
+                String value = geomString;
+                if (resultValue.getResultDescriptor().getColumnIndex("VALUE") > 0){
+                    value = resultValue.getString("VALUE") + " - "+value;
+                }
+                
+                
+                keyValueDescibeData.add(new DefaultKeyValueDescribeData(key,value ));
+            }
+            prevKey = key;
+        }
+        return keyValueDescibeData;
+    }
+    
+    protected String convert2DisplayCoordinate(String wkt){
+        String formattedCoordinate = null;
+        try {
+            Point p = (Point)new WKTReader().read(wkt);
+            double lat = p.getY();
+            double lon =p.getX();
+            String nord="N";
+            String ost="E";
+            if (lat <0 ){nord="S"; lat=-lat;}
+            if (lon <0 ){ost="W"; lon=-lon;}
+            formattedCoordinate =  String.format("%1$02d°%2$1S %3$05.2f' %4$03d°%5$1S %6$05.2f'",
+                                  (int)lat, nord,60.*(lat-((int)lat)),(int)lon,ost,60.*(lon-((int)lon)));
+        } catch (ParseException e) {
+            log.error(e,e);
+        }
+        
+        return formattedCoordinate;
+    }
+}

http://dive4elements.wald.intevation.org