Statistics
| Revision:

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
}