svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / project / documents / table / gui / EvalExpresion.java @ 10254
History | View | Annotate | Download (7.45 KB)
1 |
package com.iver.cit.gvsig.project.documents.table.gui; |
---|---|
2 |
|
3 |
import java.io.IOException; |
4 |
import java.sql.Types; |
5 |
import java.util.BitSet; |
6 |
import java.util.Date; |
7 |
import java.util.prefs.Preferences; |
8 |
|
9 |
import com.hardcode.driverManager.DriverLoadException; |
10 |
import com.hardcode.gdbms.engine.data.driver.DriverException; |
11 |
import com.hardcode.gdbms.engine.values.Value; |
12 |
import com.hardcode.gdbms.engine.values.ValueFactory; |
13 |
import com.iver.andami.PluginServices; |
14 |
import com.iver.cit.gvsig.EditionUtilities; |
15 |
import com.iver.cit.gvsig.fmap.core.IRow; |
16 |
import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
17 |
import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
18 |
import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition; |
19 |
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition; |
20 |
import com.iver.cit.gvsig.fmap.drivers.dbf.DBFDriver; |
21 |
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited; |
22 |
import com.iver.cit.gvsig.fmap.edition.EditionEvent; |
23 |
import com.iver.cit.gvsig.fmap.edition.EditionException; |
24 |
import com.iver.cit.gvsig.fmap.edition.IEditableSource; |
25 |
import com.iver.cit.gvsig.fmap.edition.IRowEdited; |
26 |
import com.iver.cit.gvsig.fmap.edition.ISpatialWriter; |
27 |
import com.iver.cit.gvsig.fmap.edition.IWriteable; |
28 |
import com.iver.cit.gvsig.fmap.edition.IWriter; |
29 |
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
30 |
import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
31 |
import com.iver.cit.gvsig.project.documents.table.gui.Table; |
32 |
/**
|
33 |
* @author Vicente Caballero Navarro
|
34 |
*/
|
35 |
public class EvalExpresion { |
36 |
private FieldDescription[] fieldDescriptors; |
37 |
private int selectedIndex; |
38 |
private FieldDescription fieldDescriptor;
|
39 |
private FLyrVect lv;
|
40 |
private IEditableSource ies =null; |
41 |
private Table table=null; |
42 |
private static Preferences prefs = Preferences.userRoot().node( "fieldExpresionOptions" ); |
43 |
private int limit; |
44 |
public EvalExpresion() {
|
45 |
limit=prefs.getInt("limit_rows_in_memory",-1); |
46 |
} |
47 |
public void setTable(Table table) { |
48 |
BitSet columnSelected = table.getSelectedFieldIndices();
|
49 |
fieldDescriptors = table.getModel().getModelo().getFieldsDescription(); |
50 |
selectedIndex = columnSelected.nextSetBit(0);
|
51 |
fieldDescriptor = fieldDescriptors[selectedIndex]; |
52 |
this.table=table;
|
53 |
lv=(FLyrVect)table.getModel().getAssociatedTable(); |
54 |
if (lv ==null) |
55 |
ies=table.getModel().getModelo(); |
56 |
else
|
57 |
ies = (VectorialEditableAdapter) lv.getSource(); |
58 |
} |
59 |
public void setValue(Object obj,int i) { |
60 |
//VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
|
61 |
Value value = getValue(obj); |
62 |
IRow feat=null;
|
63 |
try {
|
64 |
feat = ies.getRow(i).getLinkedRow().cloneRow(); |
65 |
} catch (DriverIOException e1) {
|
66 |
e1.printStackTrace(); |
67 |
} catch (IOException e1) { |
68 |
e1.printStackTrace(); |
69 |
} |
70 |
Value[] values = feat.getAttributes();
|
71 |
values[selectedIndex] = value; |
72 |
feat.setAttributes(values); |
73 |
|
74 |
IRowEdited edRow = new DefaultRowEdited(feat,
|
75 |
IRowEdited.STATUS_MODIFIED, i); |
76 |
try {
|
77 |
ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(), "",
|
78 |
EditionEvent.ALPHANUMERIC); |
79 |
} catch (IOException e) { |
80 |
e.printStackTrace(); |
81 |
} catch (DriverIOException e) {
|
82 |
e.printStackTrace(); |
83 |
} |
84 |
|
85 |
} |
86 |
/**
|
87 |
* Returns the value created from object.
|
88 |
*
|
89 |
* @param obj value.
|
90 |
*
|
91 |
* @return Value.
|
92 |
*/
|
93 |
private Value getValue(Object obj) { |
94 |
int typeField = fieldDescriptor.getFieldType();
|
95 |
Value value = ValueFactory.createNullValue(); |
96 |
|
97 |
if (obj instanceof Double) { |
98 |
if (typeField == Types.DOUBLE) { |
99 |
double dv = ((Double) obj).doubleValue(); |
100 |
value = ValueFactory.createValue(dv); |
101 |
} else if (typeField == Types.FLOAT) { |
102 |
float df = ((Double) obj).floatValue(); |
103 |
value = ValueFactory.createValue(df); |
104 |
} else if (typeField == Types.INTEGER) { |
105 |
int di = ((Double) obj).intValue(); |
106 |
value = ValueFactory.createValue(di); |
107 |
} else if (typeField == Types.VARCHAR) { |
108 |
String s = ((Double) obj).toString(); |
109 |
value = ValueFactory.createValue(s); |
110 |
} |
111 |
} else if (obj instanceof Date) { |
112 |
if (typeField == Types.DATE) { |
113 |
Date date = (Date) obj; |
114 |
value = ValueFactory.createValue(date); |
115 |
} else if (typeField == Types.VARCHAR) { |
116 |
String s = ((Date) obj).toString(); |
117 |
value = ValueFactory.createValue(s); |
118 |
} |
119 |
} else if (obj instanceof Boolean) { |
120 |
if (typeField == Types.BOOLEAN) { |
121 |
boolean b = ((Boolean) obj).booleanValue(); |
122 |
value = ValueFactory.createValue(b); |
123 |
} else if (typeField == Types.VARCHAR) { |
124 |
String s = ((Boolean) obj).toString(); |
125 |
value = ValueFactory.createValue(s); |
126 |
} |
127 |
} else if (obj instanceof String) { |
128 |
if (typeField == Types.VARCHAR) { |
129 |
String s = obj.toString();
|
130 |
value = ValueFactory.createValue(s); |
131 |
} |
132 |
} |
133 |
|
134 |
return value;
|
135 |
} |
136 |
public FieldDescription getFieldDescriptorSelected() {
|
137 |
return fieldDescriptor;
|
138 |
} |
139 |
public FieldDescription[] getFieldDescriptors() { |
140 |
return fieldDescriptors;
|
141 |
} |
142 |
public void setFieldValue(Object obj,int i) { |
143 |
try {
|
144 |
((DBFDriver)table.getModel().getModelo().getOriginalDriver()).setFieldValue(i,selectedIndex,obj); |
145 |
} catch (DriverLoadException e) {
|
146 |
e.printStackTrace(); |
147 |
} catch (IOException e) { |
148 |
e.printStackTrace(); |
149 |
} |
150 |
} |
151 |
public void saveEdits(int numRows) throws EditionException, DriverLoadException, DriverException, com.iver.cit.gvsig.fmap.DriverException, IOException, DriverIOException { |
152 |
if ((numRows!=-1) && (limit==-1 || numRows == 0 || (numRows % limit)!=0)) { |
153 |
return;
|
154 |
} |
155 |
ies.endComplexRow(PluginServices.getText(this, "expresion")); |
156 |
if ((lv != null) && |
157 |
lv.getSource() instanceof VectorialEditableAdapter) {
|
158 |
VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource(); |
159 |
ISpatialWriter spatialWriter = (ISpatialWriter) vea.getDriver(); |
160 |
vea.cleanSelectableDatasource(); |
161 |
lv.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
|
162 |
// refleje los cambios en los campos.
|
163 |
ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(lv); |
164 |
// String aux="FIELDS:";
|
165 |
// FieldDescription[] flds = lyrDef.getFieldsDesc();
|
166 |
// for (int i=0; i < flds.length; i++)
|
167 |
// {
|
168 |
// aux = aux + ", " + flds[i].getFieldAlias();
|
169 |
// }
|
170 |
// System.err.println("Escribiendo la capa " + lyrDef.getName() +
|
171 |
// " con los campos " + aux);
|
172 |
spatialWriter.initialize(lyrDef); |
173 |
vea.saveEdits(spatialWriter,EditionEvent.ALPHANUMERIC); |
174 |
vea.getCommandRecord().clearAll(); |
175 |
} else {
|
176 |
if (ies instanceof IWriteable) |
177 |
{ |
178 |
IWriteable w = (IWriteable) ies; |
179 |
IWriter writer = w.getWriter(); |
180 |
if (writer == null){ |
181 |
}else{
|
182 |
ITableDefinition tableDef = ies.getTableDefinition(); |
183 |
writer.initialize(tableDef); |
184 |
|
185 |
ies.saveEdits(writer,EditionEvent.ALPHANUMERIC); |
186 |
ies.getSelection().clear(); |
187 |
} |
188 |
} |
189 |
ies.getCommandRecord().clearAll(); |
190 |
} |
191 |
ies.startComplexRow(); |
192 |
table.refresh(); |
193 |
} |
194 |
} |