Statistics
| Revision:

root / branches / v10 / extensions / extExpressionField / src / com / iver / cit / gvsig / project / documents / table / gui / EvalExpresion.java @ 11722

History | View | Annotate | Download (7.54 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.edition.DefaultRowEdited;
21
import com.iver.cit.gvsig.fmap.edition.EditionEvent;
22
import com.iver.cit.gvsig.fmap.edition.EditionException;
23
import com.iver.cit.gvsig.fmap.edition.IEditableSource;
24
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
25
import com.iver.cit.gvsig.fmap.edition.ISpatialWriter;
26
import com.iver.cit.gvsig.fmap.edition.IWriteable;
27
import com.iver.cit.gvsig.fmap.edition.IWriter;
28
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
29
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
30
/**
31
 * @author Vicente Caballero Navarro
32
 */
33
public class EvalExpresion {
34
        private FieldDescription[] fieldDescriptors;
35
        private int selectedIndex;
36
        private FieldDescription fieldDescriptor;
37
        private FLyrVect lv;
38
        private  IEditableSource ies =null;
39
        private Table table=null;
40
        private static Preferences prefs = Preferences.userRoot().node( "fieldExpresionOptions" );
41
        private int limit;
42
        public EvalExpresion() {
43
                limit=prefs.getInt("limit_rows_in_memory",-1);
44
        }
45
        public void setTable(Table table) {
46
                BitSet columnSelected = table.getSelectedFieldIndices();
47
        fieldDescriptors = table.getModel().getModelo().getFieldsDescription();
48
        selectedIndex = columnSelected.nextSetBit(0);
49
        fieldDescriptor = fieldDescriptors[selectedIndex];
50
        this.table=table;
51
        lv=(FLyrVect)table.getModel().getAssociatedTable();
52
        if (lv ==null)
53
            ies=table.getModel().getModelo();
54
        else
55
            ies = (VectorialEditableAdapter) lv.getSource();
56
        }
57
         public void setValue(Object obj,int i) {
58
                    //VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
59
                     Value value = getValue(obj);
60
                     //System.out.println("num = "+i);
61
                     IRow feat=null;
62
                        try {
63
                                feat = ies.getRow(i).getLinkedRow().cloneRow();
64
                        } catch (DriverIOException e1) {
65
                                e1.printStackTrace();
66
                        } catch (IOException e1) {
67
                                e1.printStackTrace();
68
                        }
69
                     Value[] values = feat.getAttributes();
70
                     values[selectedIndex] = value;
71
                     feat.setAttributes(values);
72

    
73
                     IRowEdited edRow = new DefaultRowEdited(feat,
74
                                     IRowEdited.STATUS_MODIFIED, i);
75
                     try {
76
                                ies.modifyRow(edRow.getIndex(), edRow.getLinkedRow(), "",
77
                                                 EditionEvent.ALPHANUMERIC);
78
                        } catch (IOException e) {
79
                                e.printStackTrace();
80
                        } catch (DriverIOException e) {
81
                                e.printStackTrace();
82
                        }
83

    
84
            }
85
         /**
86
             * Returns the value created from object.
87
             *
88
             * @param obj value.
89
             *
90
             * @return Value.
91
             */
92
            private Value getValue(Object obj) {
93
                int typeField = fieldDescriptor.getFieldType();
94
                Value value = null;//ValueFactory.createNullValue();
95

    
96
                if (obj instanceof Number) {
97
                    if (typeField == Types.DOUBLE || typeField == Types.NUMERIC) {
98
                        double dv = ((Number) obj).doubleValue();
99
                        value = ValueFactory.createValue(dv);
100
                    } else if (typeField == Types.FLOAT) {
101
                        float df = ((Number) obj).floatValue();
102
                        value = ValueFactory.createValue(df);
103
                    } else if (typeField == Types.INTEGER) {
104
                        int di = ((Number) obj).intValue();
105
                        value = ValueFactory.createValue(di);
106
                    } else if (typeField == Types.BIGINT) {
107
                        long di = ((Number) obj).longValue();
108
                        value = ValueFactory.createValue(di);                        
109
                    } else if (typeField == Types.VARCHAR) {
110
                        String s = ((Number) obj).toString();
111
                        value = ValueFactory.createValue(s);
112
                    } else if (typeField == Types.BOOLEAN) {
113
                        if (((Number) obj).intValue()==0){
114
                                value=ValueFactory.createValue(false);
115
                        }else{
116
                                value=ValueFactory.createValue(true);
117
                        }
118
                    }
119
                } else if (obj instanceof Date) {
120
                    if (typeField == Types.DATE) {
121
                        Date date = (Date) obj;
122
                        value = ValueFactory.createValue(date);
123
                    } else if (typeField == Types.VARCHAR) {
124
                        String s = ((Date) obj).toString();
125
                        value = ValueFactory.createValue(s);
126
                    }
127
                } else if (obj instanceof Boolean) {
128
                    if (typeField == Types.BOOLEAN) {
129
                        boolean b = ((Boolean) obj).booleanValue();
130
                        value = ValueFactory.createValue(b);
131
                    } else if (typeField == Types.VARCHAR) {
132
                        String s = ((Boolean) obj).toString();
133
                        value = ValueFactory.createValue(s);
134
                    }
135
                } else if (obj instanceof String) {
136
                    if (typeField == Types.VARCHAR) {
137
                        String s = obj.toString();
138
                        value = ValueFactory.createValue(s);
139
                    }
140
                }else{
141
                        value=ValueFactory.createNullValue();
142
                }
143

    
144
                return value;
145
            }
146
        public FieldDescription getFieldDescriptorSelected() {
147
                return fieldDescriptor;
148
        }
149
        public FieldDescription[] getFieldDescriptors() {
150
                return fieldDescriptors;
151
        }
152
//        public void setFieldValue(Object obj,int i) {
153
//            try {
154
//                        ((DBFDriver)table.getModel().getModelo().getOriginalDriver()).setFieldValue(i,selectedIndex,obj);
155
//                } catch (DriverLoadException e) {
156
//                        e.printStackTrace();
157
//                } catch (IOException e) {
158
//                        e.printStackTrace();
159
//                }
160
//    }
161
        public void saveEdits(int numRows) throws EditionException, DriverLoadException, DriverException, com.iver.cit.gvsig.fmap.DriverException, IOException, DriverIOException {
162
                if (limit==-1 || numRows == 0 || (numRows % limit)!=0) {
163
                        return;
164
                }
165
                ies.endComplexRow(PluginServices.getText(this, "expresion"));
166
                if ((lv != null) &&
167
                lv.getSource() instanceof VectorialEditableAdapter) {
168
                VectorialEditableAdapter vea = (VectorialEditableAdapter) lv.getSource();
169
                ISpatialWriter spatialWriter = (ISpatialWriter) vea.getDriver();
170
                vea.cleanSelectableDatasource();
171
                         lv.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer
172
                         // refleje los cambios en los campos.
173
                         ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(lv);
174
                         spatialWriter.initialize(lyrDef);
175
                         vea.saveEdits(spatialWriter,EditionEvent.ALPHANUMERIC);
176
                         vea.getCommandRecord().clearAll();
177
         } else {
178
              if (ies instanceof IWriteable){
179
                      IWriteable w = (IWriteable) ies;
180
                         IWriter writer = w.getWriter();
181
                         if (writer == null){
182
                         }else{
183
                                             ITableDefinition tableDef = ies.getTableDefinition();
184
                                            writer.initialize(tableDef);
185

    
186
                                            ies.saveEdits(writer,EditionEvent.ALPHANUMERIC);
187
                                ies.getSelection().clear();
188
                         }
189
              }
190
              ies.getCommandRecord().clearAll();
191
         }
192
                ies.startComplexRow();
193
             table.refresh();
194
    }
195
}