root / trunk / libraries / libExpressions / src / main / java / org / gvsig / gui / EvalExpression.java @ 23299
History | View | Annotate | Download (9.33 KB)
1 |
package org.gvsig.gui; |
---|---|
2 |
|
3 |
import java.sql.Types; |
4 |
import java.util.ArrayList; |
5 |
import java.util.BitSet; |
6 |
import java.util.Date; |
7 |
import java.util.Iterator; |
8 |
import java.util.List; |
9 |
import java.util.prefs.Preferences; |
10 |
|
11 |
import org.gvsig.templates.IEvalListener; |
12 |
|
13 |
import com.hardcode.gdbms.driver.exceptions.InitializeWriterException; |
14 |
import com.hardcode.gdbms.driver.exceptions.ReadDriverException; |
15 |
import com.hardcode.gdbms.engine.values.Value; |
16 |
import com.hardcode.gdbms.engine.values.ValueFactory; |
17 |
import com.iver.andami.PluginServices; |
18 |
import com.iver.andami.messages.NotificationManager; |
19 |
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException; |
20 |
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileWriteException; |
21 |
import com.iver.cit.gvsig.exceptions.validate.ValidateRowException; |
22 |
import com.iver.cit.gvsig.exceptions.visitors.StopWriterVisitorException; |
23 |
import com.iver.cit.gvsig.fmap.core.IRow; |
24 |
import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
25 |
import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition; |
26 |
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition; |
27 |
import com.iver.cit.gvsig.fmap.edition.DefaultRowEdited; |
28 |
import com.iver.cit.gvsig.fmap.edition.EditionEvent; |
29 |
import com.iver.cit.gvsig.fmap.edition.IEditableSource; |
30 |
import com.iver.cit.gvsig.fmap.edition.IRowEdited; |
31 |
import com.iver.cit.gvsig.fmap.edition.ISpatialWriter; |
32 |
import com.iver.cit.gvsig.fmap.edition.IWriteable; |
33 |
import com.iver.cit.gvsig.fmap.edition.IWriter; |
34 |
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter; |
35 |
import com.iver.cit.gvsig.fmap.layers.FLyrVect; |
36 |
import com.iver.cit.gvsig.project.documents.table.gui.Table; |
37 |
/**
|
38 |
* @author Vicente Caballero Navarro
|
39 |
*/
|
40 |
public class EvalExpression { |
41 |
private FieldDescription[] fieldDescriptors; |
42 |
private int selectedIndex; |
43 |
private FieldDescription fieldDescriptor;
|
44 |
private FLyrVect lv;
|
45 |
private IEditableSource ies =null; |
46 |
private Table table=null; |
47 |
private static Preferences prefs = Preferences.userRoot().node( "fieldExpressionOptions" ); |
48 |
private int limit; |
49 |
private List evalListenerList; |
50 |
public EvalExpression() {
|
51 |
limit=prefs.getInt("limit_rows_in_memory",-1); |
52 |
} |
53 |
public void setTable(Table table) { |
54 |
BitSet columnSelected = table.getSelectedFieldIndices();
|
55 |
fieldDescriptors = table.getModel().getModelo().getFieldsDescription(); |
56 |
selectedIndex = columnSelected.nextSetBit(0);
|
57 |
fieldDescriptor = fieldDescriptors[selectedIndex]; |
58 |
this.table=table;
|
59 |
lv=(FLyrVect)table.getModel().getAssociatedTable(); |
60 |
if (lv ==null) |
61 |
ies=table.getModel().getModelo(); |
62 |
else
|
63 |
ies = (VectorialEditableAdapter) lv.getSource(); |
64 |
} |
65 |
|
66 |
public FLyrVect getFLyrVect() {
|
67 |
return lv;
|
68 |
} |
69 |
public void setFLyrVect(FLyrVect lv) { |
70 |
this.lv = lv;
|
71 |
if (lv ==null) |
72 |
ies=table.getModel().getModelo(); |
73 |
else
|
74 |
ies = (VectorialEditableAdapter) lv.getSource(); |
75 |
|
76 |
fieldDescriptors = ies.getFieldsDescription(); |
77 |
try {
|
78 |
selectedIndex = ies.getSelection().nextSetBit(0);
|
79 |
} catch (ReadDriverException e) {
|
80 |
// TODO Auto-generated catch block
|
81 |
e.printStackTrace(); |
82 |
} |
83 |
} |
84 |
public void setValue(Object obj,int i) { |
85 |
//VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
|
86 |
Value value = getValue(obj); |
87 |
//System.out.println("num = "+i);
|
88 |
IRow feat=null;
|
89 |
try {
|
90 |
feat = ies.getRow(i).getLinkedRow().cloneRow(); |
91 |
} catch (ExpansionFileReadException e) {
|
92 |
NotificationManager.addError(e); |
93 |
} catch (ReadDriverException e) {
|
94 |
NotificationManager.addError(e); |
95 |
} |
96 |
Value[] values = feat.getAttributes();
|
97 |
values[selectedIndex] = value; |
98 |
feat.setAttributes(values); |
99 |
|
100 |
IRowEdited edRow = new DefaultRowEdited(feat,
|
101 |
IRowEdited.STATUS_MODIFIED, i); |
102 |
try {
|
103 |
ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(), "",
|
104 |
EditionEvent.ALPHANUMERIC); |
105 |
} catch (ExpansionFileWriteException e) {
|
106 |
NotificationManager.addError(e); |
107 |
} catch (ExpansionFileReadException e) {
|
108 |
NotificationManager.addError(e); |
109 |
} catch (ValidateRowException e) {
|
110 |
NotificationManager.addError(e); |
111 |
} catch (ReadDriverException e) {
|
112 |
NotificationManager.addError(e); |
113 |
} |
114 |
|
115 |
} |
116 |
/**
|
117 |
* Returns the value created from object.
|
118 |
*
|
119 |
* @param obj value.
|
120 |
*
|
121 |
* @return Value.
|
122 |
*/
|
123 |
private Value getValue(Object obj) { |
124 |
int typeField = fieldDescriptor.getFieldType();
|
125 |
Value value = null;//ValueFactory.createNullValue(); |
126 |
|
127 |
if (obj instanceof Number) { |
128 |
if (typeField == Types.DOUBLE || typeField == Types.NUMERIC) { |
129 |
double dv = ((Number) obj).doubleValue(); |
130 |
value = ValueFactory.createValue(dv); |
131 |
} else if (typeField == Types.FLOAT) { |
132 |
float df = ((Number) obj).floatValue(); |
133 |
value = ValueFactory.createValue(df); |
134 |
} else if (typeField == Types.INTEGER) { |
135 |
int di = ((Number) obj).intValue(); |
136 |
value = ValueFactory.createValue(di); |
137 |
} else if (typeField == Types.BIGINT) { |
138 |
long di = ((Number) obj).longValue(); |
139 |
value = ValueFactory.createValue(di); |
140 |
} else if (typeField == Types.VARCHAR) { |
141 |
String s = ((Number) obj).toString(); |
142 |
value = ValueFactory.createValue(s); |
143 |
} else if (typeField == Types.BOOLEAN) { |
144 |
if (((Number) obj).intValue()==0){ |
145 |
value=ValueFactory.createValue(false);
|
146 |
}else{
|
147 |
value=ValueFactory.createValue(true);
|
148 |
} |
149 |
} |
150 |
} else if (obj instanceof Date) { |
151 |
if (typeField == Types.DATE) { |
152 |
Date date = (Date) obj; |
153 |
value = ValueFactory.createValue(date); |
154 |
} else if (typeField == Types.VARCHAR) { |
155 |
String s = ((Date) obj).toString(); |
156 |
value = ValueFactory.createValue(s); |
157 |
} |
158 |
} else if (obj instanceof Boolean) { |
159 |
if (typeField == Types.BOOLEAN) { |
160 |
boolean b = ((Boolean) obj).booleanValue(); |
161 |
value = ValueFactory.createValue(b); |
162 |
} else if (typeField == Types.VARCHAR) { |
163 |
String s = ((Boolean) obj).toString(); |
164 |
value = ValueFactory.createValue(s); |
165 |
} |
166 |
} else if (obj instanceof String) { |
167 |
if (typeField == Types.VARCHAR) { |
168 |
String s = obj.toString();
|
169 |
value = ValueFactory.createValue(s); |
170 |
} |
171 |
}else{
|
172 |
value=ValueFactory.createNullValue(); |
173 |
} |
174 |
|
175 |
return value;
|
176 |
} |
177 |
public FieldDescription getFieldDescriptorSelected() {
|
178 |
return fieldDescriptor;
|
179 |
} |
180 |
public FieldDescription[] getFieldDescriptors() { |
181 |
return fieldDescriptors;
|
182 |
} |
183 |
// public void setFieldValue(Object obj,int i) {
|
184 |
// try {
|
185 |
// ((DBFDriver)table.getModel().getModelo().getOriginalDriver()).setFieldValue(i,selectedIndex,obj);
|
186 |
// } catch (DriverLoadException e) {
|
187 |
// e.printStackTrace();
|
188 |
// } catch (IOException e) {
|
189 |
// e.printStackTrace();
|
190 |
// }
|
191 |
// }
|
192 |
public void saveEdits(int numRows) throws ReadDriverException, InitializeWriterException, StopWriterVisitorException { |
193 |
|
194 |
if (this.evalListenerList != null){ |
195 |
for (Iterator iterator = this.evalListenerList.iterator(); iterator.hasNext();) { |
196 |
IEvalListener evalListener = (IEvalListener) iterator.next(); |
197 |
evalListener.saveEdits(numRows); |
198 |
} |
199 |
} |
200 |
// if (limit==-1 || numRows == 0 || (numRows % limit)!=0) {
|
201 |
// return;
|
202 |
// }
|
203 |
// ies.endComplexRow(PluginServices.getText(this, "expression"));
|
204 |
// if ((lv != null) &&
|
205 |
// lv.getSource() instanceof VectorialEditableAdapter) {
|
206 |
// VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
|
207 |
// ISpatialWriter spatialWriter = (ISpatialWriter) vea.getDriver();
|
208 |
// vea.cleanSelectableDatasource();
|
209 |
// lv.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
|
210 |
// // refleje los cambios en los campos.
|
211 |
// ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(lv);
|
212 |
// spatialWriter.initialize(lyrDef);
|
213 |
// vea.saveEdits(spatialWriter,EditionEvent.ALPHANUMERIC);
|
214 |
// vea.getCommandRecord().clearAll();
|
215 |
// } else {
|
216 |
// if (ies instanceof IWriteable){
|
217 |
// IWriteable w = (IWriteable) ies;
|
218 |
// IWriter writer = w.getWriter();
|
219 |
// if (writer == null){
|
220 |
// }else{
|
221 |
// ITableDefinition tableDef = ies.getTableDefinition();
|
222 |
// writer.initialize(tableDef);
|
223 |
//
|
224 |
// ies.saveEdits(writer,EditionEvent.ALPHANUMERIC);
|
225 |
// ies.getSelection().clear();
|
226 |
// }
|
227 |
// }
|
228 |
// ies.getCommandRecord().clearAll();
|
229 |
// }
|
230 |
// ies.startComplexRow();
|
231 |
// table.refresh();
|
232 |
} |
233 |
|
234 |
public void addEvalListerner(IEvalListener evalListener){ |
235 |
|
236 |
if (this.evalListenerList == null){ |
237 |
this.evalListenerList = new ArrayList<IEvalListener>(); |
238 |
} |
239 |
this.evalListenerList.add(evalListener);
|
240 |
|
241 |
} |
242 |
|
243 |
// public void fireEvent(int row){
|
244 |
//
|
245 |
// }
|
246 |
|
247 |
|
248 |
|
249 |
|
250 |
|
251 |
|
252 |
} |