Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / project / documents / table / gui / EvalExpresion.java @ 12739

History | View | Annotate | Download (8.2 KB)

1
package com.iver.cit.gvsig.project.documents.table.gui;
2

    
3
import java.sql.Types;
4
import java.util.BitSet;
5
import java.util.Date;
6
import java.util.prefs.Preferences;
7

    
8
import com.hardcode.driverManager.DriverLoadException;
9
import com.hardcode.gdbms.driver.exceptions.InitializeWriterException;
10
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
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.andami.messages.NotificationManager;
15
import com.iver.cit.gvsig.EditionUtilities;
16
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
17
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileWriteException;
18
import com.iver.cit.gvsig.exceptions.layers.StopEditionLayerException;
19
import com.iver.cit.gvsig.exceptions.validate.ValidateRowException;
20
import com.iver.cit.gvsig.exceptions.visitors.StopWriterVisitorException;
21
import com.iver.cit.gvsig.fmap.core.DefaultFeature;
22
import com.iver.cit.gvsig.fmap.core.IGeometry;
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.EditionEvent;
28
import com.iver.cit.gvsig.fmap.edition.IEditableSource;
29
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
30
import com.iver.cit.gvsig.fmap.edition.ISpatialWriter;
31
import com.iver.cit.gvsig.fmap.edition.IWriteable;
32
import com.iver.cit.gvsig.fmap.edition.IWriter;
33
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
34
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
35
/**
36
 * @author Vicente Caballero Navarro
37
 */
38
public class EvalExpresion {
39
        private FieldDescription[] fieldDescriptors;
40
        private int selectedIndex;
41
        private FieldDescription fieldDescriptor;
42
        private FLyrVect lv;
43
        private  IEditableSource ies =null;
44
        private Table table=null;
45
        private static Preferences prefs = Preferences.userRoot().node( "fieldExpresionOptions" );
46
        private int limit;
47
        public EvalExpresion() {
48
                limit=prefs.getInt("limit_rows_in_memory",-1);
49
        }
50
        public void setTable(Table table) {
51
                BitSet columnSelected = table.getSelectedFieldIndices();
52
        fieldDescriptors = table.getModel().getModelo().getFieldsDescription();
53
        selectedIndex = columnSelected.nextSetBit(0);
54
        fieldDescriptor = fieldDescriptors[selectedIndex];
55
        this.table=table;
56
        lv=(FLyrVect)table.getModel().getAssociatedTable();
57
        if (lv ==null)
58
            ies=table.getModel().getModelo();
59
        else
60
            ies = (VectorialEditableAdapter) lv.getSource();
61
        }
62
         public void setValue(Object obj,int i) {
63
                    //VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
64
                     Value value = getValue(obj);
65
                     try {
66
                             IRowEdited rowEdited=ies.getRow(i);
67
                             Value[] values = rowEdited.getAttributes();
68
                             values[selectedIndex] = value;
69
                             IRow newRow = null;
70
                             IGeometry geometry = ((DefaultFeature) rowEdited.getLinkedRow()).getGeometry();
71
                             newRow = new DefaultFeature(geometry, values,rowEdited.getID());
72
                             ies.modifyRow(rowEdited.getIndex(), newRow,"", EditionEvent.ALPHANUMERIC);
73

    
74
//                     IRow feat=null;
75
//                        try {
76
//                                feat = ies.getRow(i).getLinkedRow().cloneRow();
77
//                        } catch (DriverIOException e1) {
78
//                                e1.printStackTrace();
79
//                        } catch (IOException e1) {
80
//                                e1.printStackTrace();
81
//                        }
82
//                     Value[] values = feat.getAttributes();
83
//                     values[selectedIndex] = value;
84
//                     feat.setAttributes(values);
85
//
86
//                     IRowEdited edRow = new DefaultRowEdited(feat,
87
//                                     IRowEdited.STATUS_MODIFIED, i);
88
//
89
//                     try {
90
//
91
//                                ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(), "",
92
//                                                 EditionEvent.ALPHANUMERIC);
93
//                        } catch (IOException e) {
94
//                                e.printStackTrace();
95
//                        } catch (DriverIOException e) {
96
//                                e.printStackTrace();
97
                        } catch (ReadDriverException e) {
98
                                NotificationManager.addError(e.getMessage(),e);
99
                        } catch (ExpansionFileReadException e) {
100
                                NotificationManager.addError(e.getMessage(),e);
101
                        } catch (ValidateRowException e) {
102
                                NotificationManager.addError(e.getMessage(),e);
103
                        } catch (ExpansionFileWriteException e) {
104
                                NotificationManager.addError(e.getMessage(),e);
105
                        }
106

    
107
            }
108
         /**
109
             * Returns the value created from object.
110
             *
111
             * @param obj value.
112
             *
113
             * @return Value.
114
             */
115
            private Value getValue(Object obj) {
116
                int typeField = fieldDescriptor.getFieldType();
117
                Value value = ValueFactory.createNullValue();
118

    
119
                if (obj instanceof Double || obj instanceof Float || obj instanceof Integer) {
120
                    if (typeField == Types.DOUBLE) {
121
                        double dv = ((Number) obj).doubleValue();
122
                        value = ValueFactory.createValue(dv);
123
                    } else if (typeField == Types.FLOAT) {
124
                        float df = ((Number) obj).floatValue();
125
                        value = ValueFactory.createValue(df);
126
                    } else if (typeField == Types.INTEGER) {
127
                        int di = ((Number) obj).intValue();
128
                        value = ValueFactory.createValue(di);
129
                    } else if (typeField == Types.VARCHAR) {
130
                        String s = ((Number) obj).toString();
131
                        value = ValueFactory.createValue(s);
132
                    }
133
                } else if (obj instanceof Date) {
134
                    if (typeField == Types.DATE) {
135
                        Date date = (Date) obj;
136
                        value = ValueFactory.createValue(date);
137
                    } else if (typeField == Types.VARCHAR) {
138
                        String s = ((Date) obj).toString();
139
                        value = ValueFactory.createValue(s);
140
                    }
141
                } else if (obj instanceof Boolean) {
142
                    if (typeField == Types.BOOLEAN) {
143
                        boolean b = ((Boolean) obj).booleanValue();
144
                        value = ValueFactory.createValue(b);
145
                    } else if (typeField == Types.VARCHAR) {
146
                        String s = ((Boolean) obj).toString();
147
                        value = ValueFactory.createValue(s);
148
                    }
149
                } else if (obj instanceof String) {
150
                    if (typeField == Types.VARCHAR) {
151
                        String s = obj.toString();
152
                        value = ValueFactory.createValue(s);
153
                    }
154
                }
155

    
156
                return value;
157
            }
158
        public FieldDescription getFieldDescriptorSelected() {
159
                return fieldDescriptor;
160
        }
161
        public FieldDescription[] getFieldDescriptors() {
162
                return fieldDescriptors;
163
        }
164
//        public void setFieldValue(Object obj,int i) {
165
//            try {
166
//                        ((DBFDriver)table.getModel().getModelo().getOriginalDriver()).setFieldValue(i,selectedIndex,obj);
167
//                } catch (DriverLoadException e) {
168
//                        e.printStackTrace();
169
//                } catch (IOException e) {
170
//                        e.printStackTrace();
171
//                }
172
//    }
173
        public void saveEdits(int numRows) throws DriverLoadException, ReadDriverException, InitializeWriterException, StopWriterVisitorException {
174
                if (limit==-1 || numRows == 0 || (numRows % limit)!=0) {
175
                        return;
176
                }
177
                ies.endComplexRow(PluginServices.getText(this, "expresion"));
178
                if ((lv != null) &&
179
                lv.getSource() instanceof VectorialEditableAdapter) {
180
                VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
181
                ISpatialWriter spatialWriter = (ISpatialWriter) vea.getDriver();
182
                vea.cleanSelectableDatasource();
183
                         lv.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
184
                         // refleje los cambios en los campos.
185
                         ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(lv);
186
                         spatialWriter.initialize(lyrDef);
187
                         vea.saveEdits(spatialWriter,EditionEvent.ALPHANUMERIC);
188
                         vea.getCommandRecord().clearAll();
189
         } else {
190
              if (ies instanceof IWriteable){
191
                      IWriteable w = (IWriteable) ies;
192
                         IWriter writer = w.getWriter();
193
                         if (writer == null){
194
                         }else{
195
                                             ITableDefinition tableDef = ies.getTableDefinition();
196
                                            writer.initialize(tableDef);
197

    
198
                                            ies.saveEdits(writer,EditionEvent.ALPHANUMERIC);
199
                                ies.getSelection().clear();
200
                         }
201
              }
202
              ies.getCommandRecord().clearAll();
203
         }
204
                ies.startComplexRow();
205
             table.refresh();
206
    }
207
}