Revision 1673 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingContext.java

View differences:

DefaultEditingContext.java
90 90
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
91 91
import org.gvsig.vectorediting.swing.api.console.EditingConsole;
92 92
import org.gvsig.vectorediting.swing.impl.console.DefaultEditingConsole;
93
import org.gvsig.fmap.geom.primitive.Point;
93 94

  
94 95
import org.apache.commons.lang3.StringUtils;
96
import org.gvsig.expressionevaluator.ExpressionUtils;
97
import org.gvsig.expressionevaluator.MutableSymbolTable;
98
import org.gvsig.fmap.dal.DataTypes;
95 99

  
96 100
import org.gvsig.fmap.dal.EditingNotification;
97 101
import org.gvsig.fmap.dal.EditingNotificationManager;
98 102
import org.gvsig.fmap.dal.swing.DALSwingLocator;
103
import org.gvsig.temporarystorage.TemporaryStorageGroup;
104
import org.gvsig.temporarystorage.TemporaryStorageLocator;
105
import org.gvsig.temporarystorage.TemporaryStorageManager;
106
import org.gvsig.tools.dataTypes.DataTypesManager;
99 107
import org.gvsig.tools.swing.api.ToolsSwingLocator;
100 108
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
101 109

  
......
909 917
        }
910 918
        return false;
911 919
    }
912

  
920
    
913 921
    private Point parsePoint(String response) throws ParsePointException {
914
        String[] numbers = new String[1];
915
        numbers[0] = response;
916
        numbers = response.split(",");
917
        int dimension = numbers.length;
918
        if (dimension >= 2 && dimension <= 4) {
922
        TemporaryStorageManager manager = TemporaryStorageLocator.getTemporaryStorageManager();
923
        TemporaryStorageGroup storage = manager.create("Points",Point.class);
919 924

  
920
            if (numbers[0].startsWith("(") && numbers[dimension-1].endsWith(")\n")) { // CCS
921
                numbers[0] = numbers[0].replace("(", "");
922
                numbers[dimension-1] = numbers[dimension-1].replace(")\n", "");
925
        MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
926
        symbolTable.setVar("LAST_POINT_ADDED", storage.get("LAST_POINT_ADDED_IN_EDTING"));
927
        
928
        try {
929
            Object x = ExpressionUtils.evaluate(symbolTable, response);
930
            if( x instanceof Point ) {
931
                storage.put("LAST_POINT_ADDED_IN_EDTING", x);
932
                return (Point) x;
923 933
            }
924

  
925
            Point point;
926
            try {
927
                GeometryManager geomManager =
928
                    GeometryLocator.getGeometryManager();
929
                int subType;
930
                switch (dimension) {
931
                case 3:
932
                    subType = Geometry.SUBTYPES.GEOM3D;
933
                    break;
934
                case 4:
935
                    subType = Geometry.SUBTYPES.GEOM3DM;
936
                    break;
937
                default:
938
                    subType = Geometry.SUBTYPES.GEOM2D;
939
                    break;
940
                }
941
                point = (Point) geomManager.create(geomManager.getGeometryType(Geometry.TYPES.POINT, subType));
942
                for (int i = 0; i < dimension; i++) {
943
                    point.setCoordinateAt(i, Double.parseDouble(numbers[i]));
944
                }
945

  
946
            } catch (Exception e) {
947
                throw new ParsePointException(e);
934
        } catch(Exception ex) {
935
            
936
        }
937
        String s = "ST_MakePoint("+response+")";
938
        try {
939
            Object x = ExpressionUtils.evaluate(symbolTable, s);
940
            if( x instanceof Point ) {
941
                storage.put("LAST_POINT_ADDED_IN_EDTING", x);
942
                return (Point) x;
948 943
            }
949
            return point;
950
        } else {
951
            throw new ParsePointException(null);
944
        } catch(Exception ex) {
945
            throw new ParsePointException(ex);
952 946
        }
947
        throw new ParsePointException(null);
953 948
    }
949
    
950
    private Double parseValue(String response) throws ParseValueException {
951
        TemporaryStorageManager manager = TemporaryStorageLocator.getTemporaryStorageManager();
952
        TemporaryStorageGroup storage = manager.create("Points",Point.class);
954 953

  
955
    private Double parseValue(String response) throws ParseValueException {
954
        MutableSymbolTable symbolTable = ExpressionUtils.createSymbolTable();
955
        symbolTable.setVar("LAST_POINT_ADDED", storage.get("LAST_POINT_ADDED_IN_EDTING"));
956
        
956 957
        try {
957
            return Double.valueOf(response);
958
        } catch (Exception e) {
959
            throw new ParseValueException(e);
958
            Object x = ExpressionUtils.evaluate(symbolTable, response);
959
            if( x instanceof Double ) {
960
                return (Double) x;
961
            }  
962
            if( x==null ) {
963
                throw new ParseValueException(new NullPointerException());
964
            }
965
            DataTypesManager.Coercion toDouble = ToolsLocator.getDataTypesManager().get(DataTypes.DOUBLE).getCoercion();
966
            return (Double) toDouble.coerce(x);
967
        } catch(Exception ex) {
968
            throw new ParseValueException(ex);
960 969
        }
961 970

  
962 971
    }

Also available in: Unified diff