Revision 44085 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.swing/org.gvsig.fmap.dal.swing.impl/src/main/java/org/gvsig/fmap/dal/swing/impl/featuretype/DefaultFeatureTypeAttributePanel.java

View differences:

DefaultFeatureTypeAttributePanel.java
1 1
package org.gvsig.fmap.dal.swing.impl.featuretype;
2 2

  
3
import com.vividsolutions.jts.operation.distance.GeometryLocation;
4
import java.awt.event.ItemEvent;
5
import java.awt.event.ItemListener;
3 6
import java.util.ArrayList;
4 7
import java.util.Comparator;
5 8
import java.util.List;
6 9
import javax.swing.DefaultComboBoxModel;
7 10
import javax.swing.JComponent;
11
import javax.swing.JOptionPane;
12
import javax.swing.SwingUtilities;
13
import javax.swing.event.ChangeEvent;
14
import javax.swing.event.ChangeListener;
8 15
import org.cresques.cts.IProjection;
9 16
import org.gvsig.expressionevaluator.Expression;
10 17
import org.gvsig.expressionevaluator.swing.CalculatorController;
11 18
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
12 19
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
13 20
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
21
import org.gvsig.fmap.dal.DALLocator;
22
import org.gvsig.fmap.dal.DataManager;
14 23
import org.gvsig.fmap.dal.DataTypes;
15 24
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
16 25
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17 26
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
18 27
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
19 28
import org.gvsig.fmap.dal.swing.DALSwingLocator;
29
import org.gvsig.fmap.dal.swing.DataSwingManager;
20 30
import org.gvsig.fmap.geom.Geometry;
31
import org.gvsig.fmap.geom.GeometryLocator;
32
import org.gvsig.fmap.geom.GeometryManager;
33
import org.gvsig.fmap.geom.type.GeometryType;
21 34
import org.gvsig.timesupport.RelativeInterval;
22 35
import org.gvsig.tools.ToolsLocator;
23 36
import org.gvsig.tools.dataTypes.DataTypesManager;
......
26 39
import org.gvsig.tools.swing.api.ToolsSwingManager;
27 40
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
28 41
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
42
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
29 43

  
30 44
/**
31 45
 *
32 46
 * @author jjdelcerro
33 47
 */
34
public class DefaultFeatureTypeAttributePanel 
35
        extends FeatureTypeAttributePanelView 
36
        implements FeatureTypeAttributePanel 
37
    {
48
@SuppressWarnings("UseSpecificCatch")
49
public class DefaultFeatureTypeAttributePanel
50
        extends FeatureTypeAttributePanelView
51
        implements FeatureTypeAttributePanel {
38 52

  
39 53
    private final List<ListElement<Integer>> fieldTypes;
40 54
    private final List<ListElement<Integer>> geometryTypes;
41 55
    private final List<ListElement<Integer>> geometrySubtypes;
42
    
56

  
43 57
    private DatePickerController pickerIntervalEnd;
44 58
    private DatePickerController pickerIntervalStart;
45 59
    private CalculatorController<Integer> pickerSize;
......
49 63
    private PickerController<IProjection> pickerCRS;
50 64
    private ExpressionPickerController pickerVirtualField;
51 65

  
66
    private boolean editable;
52 67

  
53 68
    public DefaultFeatureTypeAttributePanel() {
69
        this.editable = true;
54 70
        DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
55 71
        this.fieldTypes = new ArrayList<>();
56 72
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BOOLEAN), DataTypes.BOOLEAN));
......
61 77
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
62 78
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LONG), DataTypes.LONG));
63 79
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INTERVAL), DataTypes.INTERVAL));
64
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
80
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INSTANT), DataTypes.INSTANT));
65 81
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING));
82
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.GEOMETRY), DataTypes.GEOMETRY));
66 83
        this.fieldTypes.sort(new Comparator<ListElement<Integer>>() {
67 84
            @Override
68 85
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
......
83 100
                return o1.toString().compareTo(o2.toString());
84 101
            }
85 102
        });
86
        
103

  
87 104
        this.geometrySubtypes = new ArrayList<>();
88 105
        this.geometrySubtypes.add(new ListElement("2D", Geometry.SUBTYPES.GEOM2D));
89 106
        this.geometrySubtypes.add(new ListElement("2DM", Geometry.SUBTYPES.GEOM3D));
......
95 112
                return o1.toString().compareTo(o2.toString());
96 113
            }
97 114
        });
98
        
115

  
99 116
        this.initComponents();
100 117
    }
101
    
118

  
102 119
    private void initComponents() {
103 120
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
104 121
        ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager();
......
119 136
        for (ListElement<Integer> element : this.geometrySubtypes) {
120 137
            modelGeomSubtypes.addElement(element);
121 138
        }
122
        this.cboGeometryType.setModel(modelGeomSubtypes);
123
        
139

  
140
        this.cboGeometrySubtype.setModel(modelGeomSubtypes);
141

  
124 142
        swingManager.addClearButton(this.txtDefaultValue);
125 143
        swingManager.addClearButton(this.txtFieldName);
126 144
        swingManager.addClearButton(this.txtIntervalEnd);
127 145
        swingManager.addClearButton(this.txtIntervalStart);
128 146
        swingManager.addClearButton(this.txtPrecision);
129 147
        swingManager.addClearButton(this.txtSize);
130
        
148

  
131 149
        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
132 150
        swingManager.setDefaultPopupMenu(this.txtFieldName);
133 151
        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
......
138 156
        swingManager.setDefaultPopupMenu(this.cboFieldType);
139 157
        swingManager.setDefaultPopupMenu(this.cboGeometrySubtype);
140 158
        swingManager.setDefaultPopupMenu(this.cboGeometryType);
141
        
159

  
142 160
        this.pickerIntervalEnd = swingManager.createDatePickerController(
143
                this.txtIntervalEnd, 
161
                this.txtIntervalEnd,
144 162
                this.btnIntervalEnd
145 163
        );
146 164
        this.pickerIntervalStart = swingManager.createDatePickerController(
147
                this.txtIntervalStart, 
165
                this.txtIntervalStart,
148 166
                this.btnIntervalStart
149 167
        );
150 168
        this.pickerSize = evaluatorManager.createCalculatorController(
151
                this.txtSize,DataTypes.INT
169
                this.txtSize, DataTypes.INT
152 170
        );
153 171
        this.pickerPrecision = evaluatorManager.createCalculatorController(
154
                this.txtPrecision,DataTypes.INT
172
                this.txtPrecision, DataTypes.INT
155 173
        );
156 174
        this.pickerFieldName = evaluatorManager.createCalculatorController(
157
                this.txtFieldName,DataTypes.STRING
175
                this.txtFieldName, DataTypes.STRING
158 176
        );
159 177
        this.pickerDefaultValue = evaluatorManager.createCalculatorController(
160
                this.txtDefaultValue,DataTypes.OBJECT
178
                this.txtDefaultValue, DataTypes.OBJECT
161 179
        );
162
        
180

  
181
        this.btnVirtualField.setText("");
163 182
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
164 183
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
165 184

  
166 185
        this.pickerCRS = DALSwingLocator.getSwingManager()
167 186
                .createProjectionPickerController(this.txtCRS, this.btnCRS);
168
        
187

  
188
        this.cboFieldType.addItemListener(new ItemListener() {
189
            @Override
190
            public void itemStateChanged(ItemEvent e) {
191
                SwingUtilities.invokeLater(new Runnable() {
192
                    @Override
193
                    public void run() {
194
                        doFieldTypeChanged();
195
                    }
196
                });
197

  
198
            }
199
        });
200

  
201
        this.chkVirtualField.addChangeListener(new ChangeListener() {
202
            @Override
203
            public void stateChanged(ChangeEvent e) {
204
                if (chkVirtualField.isSelected()) {
205
                    pickerVirtualField.setEnabled(editable);
206
                } else {
207
                    pickerVirtualField.setEnabled(false);
208
                }
209
            }
210
        });
169 211
    }
170
    
212

  
171 213
    @Override
172 214
    public JComponent asJComponent() {
173 215
        return this;
......
175 217

  
176 218
    @Override
177 219
    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
220
        try {
221
            descriptor.setDataType((int) ListElement.getSelected(this.cboFieldType));
222
            descriptor.setName(this.txtFieldName.getText());
223
            descriptor.setAllowNull(this.chkAllowNulls.isSelected());
224
            descriptor.setIsPrimaryKey(this.chkIsPrimaryKey.isSelected());
225
            descriptor.setIsAutomatic(this.chkIsAutomatic.isSelected());
226
            descriptor.setSize(this.pickerSize.get());
227
            descriptor.setPrecision(this.pickerPrecision.get());
228
            descriptor.setDefaultValue(this.pickerDefaultValue.get());
229
            switch (descriptor.getType()) {
230
                case DataTypes.GEOMETRY:
231
                    GeometryManager geomManager = GeometryLocator.getGeometryManager();
232
                    GeometryType geomType = geomManager.getGeometryType(
233
                            (int) ListElement.getSelected(this.cboGeometryType),
234
                            (int) ListElement.getSelected(this.cboGeometrySubtype)
235
                    );
236
                    descriptor.setGeometryType(geomType);
237
                    descriptor.setSRS(this.pickerCRS.get());
238
                    break;
239
                case DataTypes.INSTANT:
240
                case DataTypes.INTERVAL:
241
                case DataTypes.DATE:
242
                case DataTypes.TIME:
243
                case DataTypes.TIMESTAMP:
244
                    // FIXME
245
                    break;
246
                default:
247
                    break;
248
            }
249
            if( this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled() ) {
250
                Expression expression = this.pickerVirtualField.get();
251
                if( expression==null ) {
252
                    descriptor.setFeatureAttributeEmulator(null);
253
                } else {
254
                    DataManager dataManager = DALLocator.getDataManager();
255
                    FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
256
                            descriptor.getFeatureType(),
257
                            expression
258
                    );
259
                    descriptor.setFeatureAttributeEmulator(emulator);
260
                }
261
            }
262
        } catch (Exception ex) {
263
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
264
            dialogs.messageDialog(
265
                    "Can't retrieve information from user form.", 
266
                    "Warning", 
267
                    JOptionPane.WARNING_MESSAGE
268
            );
269
        }
178 270
        return descriptor;
179 271
    }
180 272

  
......
189 281
        this.chkAllowNulls.setSelected(false);
190 282
        this.chkIsAutomatic.setSelected(false);
191 283
        this.chkIsPrimaryKey.setSelected(false);
192
        
284

  
193 285
        this.chkVirtualField.setSelected(false);
194
        this.chkVirtualField.setEnabled(true);
286
        this.chkVirtualField.setEnabled(editable);
195 287
        this.pickerVirtualField.setEnabled(false);
196 288
        this.pickerVirtualField.set(null);
197 289

  
198
        ListElement.setSelected(cboFieldType, null);
199 290
        ListElement.setSelected(cboGeometryType, null);
200 291
        ListElement.setSelected(cboGeometrySubtype, null);
292

  
293
        ListElement.setSelected(cboFieldType, DataTypes.STRING);
201 294
    }
202
    
295

  
203 296
    @Override
204 297
    public void put(FeatureAttributeDescriptor descriptor) {
205
        if( descriptor == null ) {
298
        if (descriptor == null) {
206 299
            this.clean();
207 300
            return;
208 301
        }
302
        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
303
            this.setEditable(false);
304
        }
305
        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
306
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
307
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
308
        if( descriptor.getFeatureType()!=null && descriptor.getFeatureType().getStore()!=null ) {
309
            this.pickerVirtualField.addElement(
310
                expressionSwingManager.createElement(
311
                        DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
312
                        this.pickerVirtualField,
313
                        descriptor.getFeatureType().getStore()
314
                )
315
            );
316
        }
317
                
209 318
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
210 319
        this.pickerFieldName.set(descriptor.getName());
211 320
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
212
        if( interval==null ) {
213
//            this.pickerIntervalEnd.set(null);
214
//            this.pickerIntervalStart.set(null);
321
        if (interval == null) {
322
            this.pickerIntervalEnd.set(null);
323
            this.pickerIntervalStart.set(null);
215 324
        } else {
216 325
            this.pickerIntervalEnd.set(interval.getEnd().toDate());
217 326
            this.pickerIntervalStart.set(interval.getStart().toDate());
218 327
        }
219 328
        this.pickerPrecision.set(descriptor.getPrecision());
220 329
        this.pickerSize.set(descriptor.getSize());
221
        
330

  
222 331
        this.chkAllowNulls.setSelected(descriptor.allowNull());
223 332
        this.chkIsAutomatic.setSelected(descriptor.isAutomatic());
224 333
        this.chkIsPrimaryKey.setSelected(descriptor.isPrimaryKey());
225
        
334

  
226 335
        FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator();
227
        if( attrEmulator instanceof FeatureAttributeEmulatorExpression ) {
336
        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
228 337
            Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression();
229
            this.chkVirtualField.setEnabled(true);
338
            this.chkVirtualField.setEnabled(editable);
230 339
            this.chkVirtualField.setSelected(true);
340
            this.pickerVirtualField.setEnabled(editable);
231 341
            this.pickerVirtualField.set(expression);
232
            this.pickerVirtualField.setEnabled(true);
233
        } else if( descriptor.isComputed() ) {
342
        } else if (descriptor.isComputed()) {
343
            this.chkVirtualField.setEnabled(false);
234 344
            this.chkVirtualField.setSelected(true);
235
            this.chkVirtualField.setEnabled(false);
236 345
            this.pickerVirtualField.setEnabled(false);
237 346
            this.pickerVirtualField.set(null);
238 347
        } else {
348
            this.chkVirtualField.setEnabled(editable);
239 349
            this.chkVirtualField.setSelected(false);
240
            this.chkVirtualField.setEnabled(true);
241 350
            this.pickerVirtualField.setEnabled(false);
242 351
            this.pickerVirtualField.set(null);
243 352
        }
244
        
353

  
245 354
        this.pickerCRS.set(descriptor.getSRS());
246
        
247
        ListElement.setSelected(cboFieldType, descriptor.getType());
248
        if( descriptor.getType()==DataTypes.GEOMETRY ) {
355

  
356
        if (descriptor.getGeomType() != null) {
249 357
            ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType());
250 358
            ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType());
251
            this.cboGeometryType.setEnabled(true);
252
            this.cboGeometrySubtype.setEnabled(true);
253
        } else {
254
            this.cboGeometryType.setEnabled(false);
255
            this.cboGeometrySubtype.setEnabled(false);
256 359
        }
257
        
360
        ListElement.setSelected(cboFieldType, descriptor.getType());
361

  
258 362
    }
259 363

  
260
    public void setReadonly(boolean readonly) {
261
        
364
    private void doFieldTypeChanged() {
365
        try {
366
            Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType);
367
            if (fieldType == null) {
368
                fieldType = DataTypes.UNKNOWN;
369
            }
370
            switch (fieldType) {
371
                case DataTypes.GEOMETRY:
372
                    this.cboGeometryType.setEnabled(editable);
373
                    this.cboGeometrySubtype.setEnabled(editable);
374
                    this.pickerCRS.setEnabled(editable);
375
                    this.cboDateFormat.setEnabled(false);
376
                    this.pickerIntervalStart.setEnabled(false);
377
                    this.pickerIntervalEnd.setEditable(false);
378
                    this.tabAditionalFields.setEnabledAt(1, true);
379
                    this.tabAditionalFields.setEnabledAt(2, false);
380
                    break;
381
                case DataTypes.INSTANT:
382
                case DataTypes.INTERVAL:
383
                case DataTypes.DATE:
384
                case DataTypes.TIME:
385
                case DataTypes.TIMESTAMP:
386
                    this.cboGeometryType.setEnabled(false);
387
                    this.cboGeometrySubtype.setEnabled(false);
388
                    this.pickerCRS.setEnabled(false);
389
                    this.cboDateFormat.setEnabled(editable);
390
                    this.pickerIntervalStart.setEnabled(editable);
391
                    this.pickerIntervalEnd.setEditable(editable);
392
                    this.tabAditionalFields.setEnabledAt(1, false);
393
                    this.tabAditionalFields.setEnabledAt(2, true);
394
                    break;
395
                default:
396
                    this.cboGeometryType.setEnabled(false);
397
                    this.cboGeometrySubtype.setEnabled(false);
398
                    this.pickerCRS.setEnabled(false);
399
                    this.cboDateFormat.setEnabled(false);
400
                    this.pickerIntervalStart.setEnabled(false);
401
                    this.pickerIntervalEnd.setEditable(false);
402
                    this.tabAditionalFields.setEnabledAt(1, false);
403
                    this.tabAditionalFields.setEnabledAt(2, false);
404
            }
405
        } catch (Exception ex) {
406

  
407
        }
262 408
    }
409

  
410
    public void setEditable(boolean editable) {
411
        this.editable = editable;
412
        this.pickerDefaultValue.setEditable(editable);
413
        this.pickerFieldName.setEditable(editable);
414
        this.pickerIntervalEnd.setEditable(editable);
415
        this.pickerIntervalStart.setEditable(editable);
416
        this.pickerPrecision.setEditable(editable);
417
        this.pickerSize.setEditable(editable);
418

  
419
        this.chkAllowNulls.setEnabled(editable);
420
        this.chkIsAutomatic.setEnabled(editable);
421
        this.chkIsPrimaryKey.setEnabled(editable);
422

  
423
        this.chkVirtualField.setEnabled(editable);
424
        this.pickerVirtualField.setEditable(editable);
425

  
426
        this.cboDateFormat.setEnabled(editable);
427
        this.cboFieldType.setEnabled(editable);
428
        this.cboGeometryType.setEnabled(editable);
429
        this.cboGeometrySubtype.setEnabled(editable);
430

  
431
    }
263 432
}

Also available in: Unified diff