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
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