Statistics
| Revision:

svn-gvsig-desktop / 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 @ 44152

History | View | Annotate | Download (28.2 KB)

1 44077 jjdelcerro
package org.gvsig.fmap.dal.swing.impl.featuretype;
2
3 44096 jjdelcerro
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
4 44085 jjdelcerro
import java.awt.event.ItemEvent;
5
import java.awt.event.ItemListener;
6 44077 jjdelcerro
import java.util.ArrayList;
7
import java.util.Comparator;
8
import java.util.List;
9
import javax.swing.DefaultComboBoxModel;
10
import javax.swing.JComponent;
11 44085 jjdelcerro
import javax.swing.JOptionPane;
12
import javax.swing.SwingUtilities;
13
import javax.swing.event.ChangeEvent;
14
import javax.swing.event.ChangeListener;
15 44128 jjdelcerro
import org.apache.commons.lang3.StringUtils;
16 44077 jjdelcerro
import org.cresques.cts.IProjection;
17
import org.gvsig.expressionevaluator.Expression;
18
import org.gvsig.expressionevaluator.swing.CalculatorController;
19
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
20
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
21
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
22 44085 jjdelcerro
import org.gvsig.fmap.dal.DALLocator;
23
import org.gvsig.fmap.dal.DataManager;
24 44077 jjdelcerro
import org.gvsig.fmap.dal.DataTypes;
25 44100 jjdelcerro
import org.gvsig.fmap.dal.exception.DataException;
26 44077 jjdelcerro
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
27 44100 jjdelcerro
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
28 44128 jjdelcerro
import org.gvsig.fmap.dal.feature.DataProfile;
29 44077 jjdelcerro
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
30 44100 jjdelcerro
import org.gvsig.fmap.dal.feature.Feature;
31 44077 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
33 44100 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureStore;
34 44128 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureType;
35 44077 jjdelcerro
import org.gvsig.fmap.dal.swing.DALSwingLocator;
36 44085 jjdelcerro
import org.gvsig.fmap.dal.swing.DataSwingManager;
37 44149 jjdelcerro
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
38 44077 jjdelcerro
import org.gvsig.fmap.geom.Geometry;
39 44085 jjdelcerro
import org.gvsig.fmap.geom.GeometryLocator;
40
import org.gvsig.fmap.geom.GeometryManager;
41
import org.gvsig.fmap.geom.type.GeometryType;
42 44077 jjdelcerro
import org.gvsig.timesupport.RelativeInterval;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.dataTypes.DataTypesManager;
45 44152 jjdelcerro
import org.gvsig.tools.i18n.I18nManager;
46 44077 jjdelcerro
import org.gvsig.tools.swing.api.ListElement;
47
import org.gvsig.tools.swing.api.ToolsSwingLocator;
48
import org.gvsig.tools.swing.api.ToolsSwingManager;
49
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
50
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
51 44085 jjdelcerro
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
52 44128 jjdelcerro
import org.slf4j.Logger;
53
import org.slf4j.LoggerFactory;
54 44077 jjdelcerro
55
/**
56
 *
57
 * @author jjdelcerro
58
 */
59 44085 jjdelcerro
@SuppressWarnings("UseSpecificCatch")
60
public class DefaultFeatureTypeAttributePanel
61
        extends FeatureTypeAttributePanelView
62
        implements FeatureTypeAttributePanel {
63 44077 jjdelcerro
64 44128 jjdelcerro
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypeAttributePanel.class);
65
66 44077 jjdelcerro
    private final List<ListElement<Integer>> fieldTypes;
67
    private final List<ListElement<Integer>> geometryTypes;
68
    private final List<ListElement<Integer>> geometrySubtypes;
69 44085 jjdelcerro
70 44077 jjdelcerro
    private DatePickerController pickerIntervalEnd;
71
    private DatePickerController pickerIntervalStart;
72
    private CalculatorController<Integer> pickerSize;
73
    private CalculatorController<Integer> pickerPrecision;
74
    private CalculatorController<Object> pickerDefaultValue;
75
    private PickerController<IProjection> pickerCRS;
76
    private ExpressionPickerController pickerVirtualField;
77
78 44085 jjdelcerro
    private boolean editable;
79 44149 jjdelcerro
    private FeatureStoreElement featureStoreElement;
80 44077 jjdelcerro
81
    public DefaultFeatureTypeAttributePanel() {
82 44085 jjdelcerro
        this.editable = true;
83 44077 jjdelcerro
        DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
84
        this.fieldTypes = new ArrayList<>();
85
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BOOLEAN), DataTypes.BOOLEAN));
86
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DATE), DataTypes.DATE));
87
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIME), DataTypes.TIME));
88
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIMESTAMP), DataTypes.TIMESTAMP));
89
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INT), DataTypes.INT));
90
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
91
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LONG), DataTypes.LONG));
92
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INTERVAL), DataTypes.INTERVAL));
93 44085 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INSTANT), DataTypes.INSTANT));
94 44077 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING));
95 44085 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.GEOMETRY), DataTypes.GEOMETRY));
96 44077 jjdelcerro
        this.fieldTypes.sort(new Comparator<ListElement<Integer>>() {
97
            @Override
98
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
99
                return o1.toString().compareTo(o2.toString());
100
            }
101
        });
102
103
        this.geometryTypes = new ArrayList<>();
104
        this.geometryTypes.add(new ListElement("Point", Geometry.TYPES.POINT));
105
        this.geometryTypes.add(new ListElement("Line", Geometry.TYPES.LINE));
106
        this.geometryTypes.add(new ListElement("Polygon", Geometry.TYPES.POLYGON));
107
        this.geometryTypes.add(new ListElement("MultiPoint", Geometry.TYPES.MULTIPOINT));
108
        this.geometryTypes.add(new ListElement("MultiLine", Geometry.TYPES.MULTILINE));
109
        this.geometryTypes.add(new ListElement("MultiPolygon", Geometry.TYPES.MULTIPOLYGON));
110
        this.geometryTypes.sort(new Comparator<ListElement<Integer>>() {
111
            @Override
112
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
113
                return o1.toString().compareTo(o2.toString());
114
            }
115
        });
116 44085 jjdelcerro
117 44077 jjdelcerro
        this.geometrySubtypes = new ArrayList<>();
118
        this.geometrySubtypes.add(new ListElement("2D", Geometry.SUBTYPES.GEOM2D));
119
        this.geometrySubtypes.add(new ListElement("2DM", Geometry.SUBTYPES.GEOM3D));
120
        this.geometrySubtypes.add(new ListElement("3D", Geometry.SUBTYPES.GEOM2DM));
121
        this.geometrySubtypes.add(new ListElement("3DM", Geometry.SUBTYPES.GEOM3DM));
122
        this.geometrySubtypes.sort(new Comparator<ListElement<Integer>>() {
123
            @Override
124
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
125
                return o1.toString().compareTo(o2.toString());
126
            }
127
        });
128 44085 jjdelcerro
129 44077 jjdelcerro
        this.initComponents();
130
    }
131 44085 jjdelcerro
132 44077 jjdelcerro
    private void initComponents() {
133
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
134
        ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager();
135 44149 jjdelcerro
        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
136
137 44077 jjdelcerro
        DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>();
138
        for (ListElement<Integer> element : fieldTypes) {
139
            modelTypes.addElement(element);
140
        }
141
        this.cboFieldType.setModel(modelTypes);
142
143
        DefaultComboBoxModel<ListElement<Integer>> modelGeomTypes = new DefaultComboBoxModel<>();
144
        for (ListElement<Integer> element : this.geometryTypes) {
145
            modelGeomTypes.addElement(element);
146
        }
147
        this.cboGeometryType.setModel(modelGeomTypes);
148
149
        DefaultComboBoxModel<ListElement<Integer>> modelGeomSubtypes = new DefaultComboBoxModel<>();
150
        for (ListElement<Integer> element : this.geometrySubtypes) {
151
            modelGeomSubtypes.addElement(element);
152
        }
153 44085 jjdelcerro
154
        this.cboGeometrySubtype.setModel(modelGeomSubtypes);
155
156 44128 jjdelcerro
        swingManager.translate(this.lblAllowNulls);
157
        swingManager.translate(this.lblCRS);
158
        swingManager.translate(this.lblDataProfile);
159
        swingManager.translate(this.lblDateFormat);
160
        swingManager.translate(this.lblDefaultValue);
161
        swingManager.translate(this.lblFieldName);
162
        swingManager.translate(this.lblFieldType);
163
        swingManager.translate(this.lblGeometrySubtype);
164
        swingManager.translate(this.lblGeometryType);
165
        swingManager.translate(this.lblInterval);
166
        swingManager.translate(this.lblIntervalEnd);
167
        swingManager.translate(this.lblIntervalStart);
168
        swingManager.translate(this.lblIsAutomatic);
169
        swingManager.translate(this.lblIsPrimaryKey);
170
        swingManager.translate(this.lblPrecision);
171
        swingManager.translate(this.lblSize);
172
        swingManager.translate(this.chkVirtualField);
173
        swingManager.translate(this.tabAditionalFields);
174
175 44077 jjdelcerro
        swingManager.addClearButton(this.txtDefaultValue);
176
        swingManager.addClearButton(this.txtFieldName);
177
        swingManager.addClearButton(this.txtIntervalEnd);
178
        swingManager.addClearButton(this.txtIntervalStart);
179
        swingManager.addClearButton(this.txtPrecision);
180
        swingManager.addClearButton(this.txtSize);
181 44085 jjdelcerro
182 44077 jjdelcerro
        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
183
        swingManager.setDefaultPopupMenu(this.txtFieldName);
184
        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
185
        swingManager.setDefaultPopupMenu(this.txtIntervalStart);
186
        swingManager.setDefaultPopupMenu(this.txtPrecision);
187
        swingManager.setDefaultPopupMenu(this.txtSize);
188
        swingManager.setDefaultPopupMenu(this.cboDateFormat);
189
        swingManager.setDefaultPopupMenu(this.cboFieldType);
190
        swingManager.setDefaultPopupMenu(this.cboGeometrySubtype);
191
        swingManager.setDefaultPopupMenu(this.cboGeometryType);
192 44128 jjdelcerro
        swingManager.setDefaultPopupMenu(this.cboDataProfile);
193 44085 jjdelcerro
194 44077 jjdelcerro
        this.pickerIntervalEnd = swingManager.createDatePickerController(
195 44085 jjdelcerro
                this.txtIntervalEnd,
196 44077 jjdelcerro
                this.btnIntervalEnd
197
        );
198
        this.pickerIntervalStart = swingManager.createDatePickerController(
199 44085 jjdelcerro
                this.txtIntervalStart,
200 44077 jjdelcerro
                this.btnIntervalStart
201
        );
202
        this.pickerSize = evaluatorManager.createCalculatorController(
203 44085 jjdelcerro
                this.txtSize, DataTypes.INT
204 44077 jjdelcerro
        );
205
        this.pickerPrecision = evaluatorManager.createCalculatorController(
206 44085 jjdelcerro
                this.txtPrecision, DataTypes.INT
207 44077 jjdelcerro
        );
208
        this.pickerDefaultValue = evaluatorManager.createCalculatorController(
209 44085 jjdelcerro
                this.txtDefaultValue, DataTypes.OBJECT
210 44077 jjdelcerro
        );
211 44085 jjdelcerro
212 44149 jjdelcerro
213 44085 jjdelcerro
        this.btnVirtualField.setText("");
214 44077 jjdelcerro
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
215
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
216 44149 jjdelcerro
        this.featureStoreElement = dataSwingManager.createFeatureStoreElement(
217
                this.pickerVirtualField
218
        );
219
        this.pickerVirtualField.addElement(this.featureStoreElement);
220
        this.chkVirtualField.addChangeListener(new ChangeListener() {
221
            @Override
222
            public void stateChanged(ChangeEvent e) {
223
                if (chkVirtualField.isSelected()) {
224
                    pickerVirtualField.setEnabled(editable);
225
                } else {
226
                    pickerVirtualField.setEnabled(false);
227
                }
228
            }
229
        });
230 44077 jjdelcerro
231 44085 jjdelcerro
232 44149 jjdelcerro
        this.pickerCRS = dataSwingManager.createProjectionPickerController(
233
                this.txtCRS, this.btnCRS
234
        );
235
236 44085 jjdelcerro
        this.cboFieldType.addItemListener(new ItemListener() {
237
            @Override
238
            public void itemStateChanged(ItemEvent e) {
239
                SwingUtilities.invokeLater(new Runnable() {
240
                    @Override
241
                    public void run() {
242
                        doFieldTypeChanged();
243
                    }
244
                });
245
246
            }
247
        });
248
249 44100 jjdelcerro
        this.pickerPrecision.addChangeListener(new ChangeListener() {
250
            @Override
251
            public void stateChanged(ChangeEvent e) {
252
                doCheckSizeAndPrecision();
253
            }
254
        });
255
        this.pickerSize.addChangeListener(new ChangeListener() {
256
            @Override
257
            public void stateChanged(ChangeEvent e) {
258
                doCheckSizeAndPrecision();
259
            }
260
        });
261 44128 jjdelcerro
262
        DefaultComboBoxModel<String> dataProfilesModel = new DefaultComboBoxModel<>();
263
        dataProfilesModel.addElement(" ");
264
        for (DataProfile profile : DALLocator.getDataManager().getDataProfiles()) {
265
            dataProfilesModel.addElement(profile.getName());
266
        }
267
        this.cboDataProfile.setModel(dataProfilesModel);
268 44077 jjdelcerro
    }
269 44085 jjdelcerro
270 44077 jjdelcerro
    @Override
271
    public JComponent asJComponent() {
272
        return this;
273
    }
274
275
    @Override
276
    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
277 44152 jjdelcerro
        I18nManager i18n = ToolsLocator.getI18nManager();
278 44085 jjdelcerro
        try {
279
            descriptor.setDataType((int) ListElement.getSelected(this.cboFieldType));
280
            descriptor.setName(this.txtFieldName.getText());
281
            descriptor.setAllowNull(this.chkAllowNulls.isSelected());
282
            descriptor.setIsPrimaryKey(this.chkIsPrimaryKey.isSelected());
283
            descriptor.setIsAutomatic(this.chkIsAutomatic.isSelected());
284 44152 jjdelcerro
            descriptor.setSize(this.pickerSize.get(0));
285
            descriptor.setPrecision(this.pickerPrecision.get(0));
286 44085 jjdelcerro
            descriptor.setDefaultValue(this.pickerDefaultValue.get());
287
            switch (descriptor.getType()) {
288
                case DataTypes.GEOMETRY:
289
                    GeometryManager geomManager = GeometryLocator.getGeometryManager();
290
                    GeometryType geomType = geomManager.getGeometryType(
291
                            (int) ListElement.getSelected(this.cboGeometryType),
292
                            (int) ListElement.getSelected(this.cboGeometrySubtype)
293
                    );
294
                    descriptor.setGeometryType(geomType);
295
                    descriptor.setSRS(this.pickerCRS.get());
296
                    break;
297
                case DataTypes.INSTANT:
298
                case DataTypes.INTERVAL:
299
                case DataTypes.DATE:
300
                case DataTypes.TIME:
301
                case DataTypes.TIMESTAMP:
302
                    // FIXME
303
                    break;
304
                default:
305
                    break;
306
            }
307
            if( this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled() ) {
308
                Expression expression = this.pickerVirtualField.get();
309
                if( expression==null ) {
310
                    descriptor.setFeatureAttributeEmulator(null);
311
                } else {
312
                    DataManager dataManager = DALLocator.getDataManager();
313
                    FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
314
                            descriptor.getFeatureType(),
315
                            expression
316
                    );
317
                    descriptor.setFeatureAttributeEmulator(emulator);
318
                }
319
            }
320 44152 jjdelcerro
            descriptor.setDataProfileName(
321
                StringUtils.defaultIfBlank((String) this.cboDataProfile.getSelectedItem(),null)
322
            );
323 44085 jjdelcerro
        } catch (Exception ex) {
324 44152 jjdelcerro
            LOGGER.warn("Can't retrieve information from user form.",ex);
325 44085 jjdelcerro
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
326
            dialogs.messageDialog(
327 44152 jjdelcerro
                    i18n.getTranslation("_Cant_retrieve_information_from_user_form")+
328
                        "\n"+
329
                        i18n.getTranslation("_See_log_for_details"),
330
                    i18n.getTranslation("_Warning"),
331 44085 jjdelcerro
                    JOptionPane.WARNING_MESSAGE
332
            );
333 44152 jjdelcerro
            return null;
334 44085 jjdelcerro
        }
335 44077 jjdelcerro
        return descriptor;
336
    }
337
338
    public void clean() {
339
        this.pickerDefaultValue.set(null);
340 44100 jjdelcerro
        this.txtFieldName.setText("");
341
//        this.pickerFieldName.set(null);
342 44077 jjdelcerro
        this.pickerIntervalEnd.set(null);
343
        this.pickerIntervalStart.set(null);
344
        this.pickerPrecision.set(null);
345
        this.pickerSize.set(null);
346
347
        this.chkAllowNulls.setSelected(false);
348
        this.chkIsAutomatic.setSelected(false);
349
        this.chkIsPrimaryKey.setSelected(false);
350 44085 jjdelcerro
351 44077 jjdelcerro
        this.chkVirtualField.setSelected(false);
352 44085 jjdelcerro
        this.chkVirtualField.setEnabled(editable);
353 44077 jjdelcerro
        this.pickerVirtualField.setEnabled(false);
354
        this.pickerVirtualField.set(null);
355
356
        ListElement.setSelected(cboGeometryType, null);
357
        ListElement.setSelected(cboGeometrySubtype, null);
358 44085 jjdelcerro
359
        ListElement.setSelected(cboFieldType, DataTypes.STRING);
360 44128 jjdelcerro
361
        this.cboDataProfile.setSelectedIndex(-1);
362 44077 jjdelcerro
    }
363 44085 jjdelcerro
364 44077 jjdelcerro
    @Override
365
    public void put(FeatureAttributeDescriptor descriptor) {
366 44085 jjdelcerro
        if (descriptor == null) {
367 44077 jjdelcerro
            this.clean();
368
            return;
369
        }
370 44094 jjdelcerro
        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
371 44100 jjdelcerro
        if( descriptor.getFeatureType()!=null ) {
372
            FeatureStore store = descriptor.getFeatureType().getStore();
373 44149 jjdelcerro
            this.featureStoreElement.setFeatureStore(store);
374
            if( store != null ) {
375 44100 jjdelcerro
                Feature sampleFeature = null;
376
                try {
377
                    sampleFeature = store.getFeatureSelection().first();
378
                    if( sampleFeature == null ) {
379
                        sampleFeature = store.first();
380
                    }
381
                } catch (DataException ex) {
382
                }
383
                if( sampleFeature!=null ) {
384
                    FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
385
                    featureSymbolTable.setFeature(sampleFeature);
386
                    this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
387
                }
388
            }
389 44085 jjdelcerro
        }
390 44094 jjdelcerro
        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
391
            this.setEditable(false);
392
        }
393 44085 jjdelcerro
394 44077 jjdelcerro
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
395 44100 jjdelcerro
        this.txtFieldName.setText(descriptor.getName());
396 44077 jjdelcerro
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
397 44085 jjdelcerro
        if (interval == null) {
398
            this.pickerIntervalEnd.set(null);
399
            this.pickerIntervalStart.set(null);
400 44077 jjdelcerro
        } else {
401
            this.pickerIntervalEnd.set(interval.getEnd().toDate());
402
            this.pickerIntervalStart.set(interval.getStart().toDate());
403
        }
404
        this.pickerPrecision.set(descriptor.getPrecision());
405
        this.pickerSize.set(descriptor.getSize());
406 44085 jjdelcerro
407 44077 jjdelcerro
        this.chkAllowNulls.setSelected(descriptor.allowNull());
408
        this.chkIsAutomatic.setSelected(descriptor.isAutomatic());
409
        this.chkIsPrimaryKey.setSelected(descriptor.isPrimaryKey());
410 44085 jjdelcerro
411 44077 jjdelcerro
        FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator();
412 44085 jjdelcerro
        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
413 44077 jjdelcerro
            Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression();
414 44085 jjdelcerro
            this.chkVirtualField.setEnabled(editable);
415 44077 jjdelcerro
            this.chkVirtualField.setSelected(true);
416 44085 jjdelcerro
            this.pickerVirtualField.setEnabled(editable);
417 44077 jjdelcerro
            this.pickerVirtualField.set(expression);
418 44085 jjdelcerro
        } else if (descriptor.isComputed()) {
419
            this.chkVirtualField.setEnabled(false);
420 44077 jjdelcerro
            this.chkVirtualField.setSelected(true);
421
            this.pickerVirtualField.setEnabled(false);
422
            this.pickerVirtualField.set(null);
423
        } else {
424 44085 jjdelcerro
            this.chkVirtualField.setEnabled(editable);
425 44077 jjdelcerro
            this.chkVirtualField.setSelected(false);
426
            this.pickerVirtualField.setEnabled(false);
427
            this.pickerVirtualField.set(null);
428
        }
429 44085 jjdelcerro
430 44077 jjdelcerro
        this.pickerCRS.set(descriptor.getSRS());
431 44085 jjdelcerro
432
        if (descriptor.getGeomType() != null) {
433 44079 jjdelcerro
            ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType());
434
            ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType());
435
        }
436 44085 jjdelcerro
        ListElement.setSelected(cboFieldType, descriptor.getType());
437
438 44128 jjdelcerro
        String profile = descriptor.getDataProfileName();
439
        if( StringUtils.isBlank(profile) ) {
440
            this.cboDataProfile.setSelectedIndex(-1);
441
        } else {
442
           this.cboDataProfile.setSelectedItem(profile);
443
        }
444 44077 jjdelcerro
    }
445
446 44085 jjdelcerro
    private void doFieldTypeChanged() {
447
        try {
448
            Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType);
449
            if (fieldType == null) {
450
                fieldType = DataTypes.UNKNOWN;
451
            }
452 44128 jjdelcerro
            Integer size = this.pickerSize.get();
453
            if( fieldType == DataTypes.STRING ) {
454
                if( size == null ) {
455
                    this.pickerSize.set(50);
456
                }
457
            } else {
458 44100 jjdelcerro
                int maxsize = this.getMaxSizeOfType(fieldType);
459 44128 jjdelcerro
                if( size==null || (maxsize>0 && size>maxsize) ) {
460 44100 jjdelcerro
                    this.pickerSize.set(maxsize);
461
                }
462
            }
463 44128 jjdelcerro
            Integer precision = this.pickerPrecision.get();
464
            if( precision==null ) {
465
                int defaultPrecision = this.getDefaultPrecisionOfType(fieldType);
466
                if( defaultPrecision>0 ) {
467
                    this.pickerPrecision.set(defaultPrecision);
468
                }
469
            }
470
471 44085 jjdelcerro
            switch (fieldType) {
472
                case DataTypes.GEOMETRY:
473
                    this.cboGeometryType.setEnabled(editable);
474
                    this.cboGeometrySubtype.setEnabled(editable);
475
                    this.pickerCRS.setEnabled(editable);
476
                    this.cboDateFormat.setEnabled(false);
477
                    this.pickerIntervalStart.setEnabled(false);
478
                    this.pickerIntervalEnd.setEditable(false);
479
                    this.tabAditionalFields.setEnabledAt(1, true);
480
                    this.tabAditionalFields.setEnabledAt(2, false);
481 44100 jjdelcerro
                    this.pickerSize.set(null);
482
                    this.pickerPrecision.set(null);
483
                    this.pickerSize.setEnabled(false);
484
                    this.pickerPrecision.setEnabled(false);
485 44085 jjdelcerro
                    break;
486
                case DataTypes.INSTANT:
487
                case DataTypes.INTERVAL:
488
                case DataTypes.DATE:
489
                case DataTypes.TIME:
490
                case DataTypes.TIMESTAMP:
491
                    this.cboGeometryType.setEnabled(false);
492
                    this.cboGeometrySubtype.setEnabled(false);
493
                    this.pickerCRS.setEnabled(false);
494
                    this.cboDateFormat.setEnabled(editable);
495
                    this.pickerIntervalStart.setEnabled(editable);
496 44100 jjdelcerro
                    this.pickerIntervalEnd.setEnabled(editable);
497 44085 jjdelcerro
                    this.tabAditionalFields.setEnabledAt(1, false);
498
                    this.tabAditionalFields.setEnabledAt(2, true);
499 44100 jjdelcerro
                    this.pickerSize.set(null);
500
                    this.pickerPrecision.set(null);
501
                    this.pickerSize.setEnabled(false);
502
                    this.pickerPrecision.setEnabled(false);
503 44085 jjdelcerro
                    break;
504 44100 jjdelcerro
                case DataTypes.BYTE:
505
                case DataTypes.INT:
506
                case DataTypes.LONG:
507
                case DataTypes.STRING:
508
                    this.cboGeometryType.setEnabled(false);
509
                    this.cboGeometrySubtype.setEnabled(false);
510
                    this.pickerCRS.setEnabled(false);
511
                    this.cboDateFormat.setEnabled(false);
512
                    this.pickerIntervalStart.setEnabled(false);
513
                    this.pickerIntervalEnd.setEditable(false);
514
                    this.tabAditionalFields.setEnabledAt(1, false);
515
                    this.tabAditionalFields.setEnabledAt(2, false);
516
517
                    this.pickerPrecision.set(null);
518
                    this.pickerSize.setEnabled(true);
519
                    this.pickerPrecision.setEnabled(false);
520
                    break;
521
                case DataTypes.FLOAT:
522
                case DataTypes.DOUBLE:
523
                    this.cboGeometryType.setEnabled(false);
524
                    this.cboGeometrySubtype.setEnabled(false);
525
                    this.pickerCRS.setEnabled(false);
526
                    this.cboDateFormat.setEnabled(false);
527
                    this.pickerIntervalStart.setEnabled(false);
528
                    this.pickerIntervalEnd.setEditable(false);
529
                    this.tabAditionalFields.setEnabledAt(1, false);
530
                    this.tabAditionalFields.setEnabledAt(2, false);
531
532
                    this.pickerSize.setEnabled(true);
533
                    this.pickerPrecision.setEnabled(true);
534
                    break;
535 44085 jjdelcerro
                default:
536
                    this.cboGeometryType.setEnabled(false);
537
                    this.cboGeometrySubtype.setEnabled(false);
538
                    this.pickerCRS.setEnabled(false);
539
                    this.cboDateFormat.setEnabled(false);
540
                    this.pickerIntervalStart.setEnabled(false);
541
                    this.pickerIntervalEnd.setEditable(false);
542
                    this.tabAditionalFields.setEnabledAt(1, false);
543
                    this.tabAditionalFields.setEnabledAt(2, false);
544 44100 jjdelcerro
                    this.pickerSize.set(null);
545
                    this.pickerPrecision.set(null);
546
                    this.pickerSize.setEnabled(false);
547
                    this.pickerPrecision.setEnabled(false);
548 44085 jjdelcerro
            }
549
        } catch (Exception ex) {
550 44128 jjdelcerro
            LOGGER.warn("Problems changing field type.",ex);
551 44085 jjdelcerro
        }
552 44100 jjdelcerro
553 44077 jjdelcerro
    }
554 44085 jjdelcerro
555
    public void setEditable(boolean editable) {
556
        this.editable = editable;
557
        this.pickerDefaultValue.setEditable(editable);
558 44100 jjdelcerro
        this.txtFieldName.setEditable(editable);
559
//        this.pickerFieldName.setEditable(editable);
560 44085 jjdelcerro
        this.pickerIntervalEnd.setEditable(editable);
561
        this.pickerIntervalStart.setEditable(editable);
562
        this.pickerPrecision.setEditable(editable);
563
        this.pickerSize.setEditable(editable);
564 44128 jjdelcerro
        this.cboDataProfile.setEnabled(editable);
565 44085 jjdelcerro
566
        this.chkAllowNulls.setEnabled(editable);
567
        this.chkIsAutomatic.setEnabled(editable);
568
        this.chkIsPrimaryKey.setEnabled(editable);
569
570
        this.chkVirtualField.setEnabled(editable);
571
        this.pickerVirtualField.setEditable(editable);
572
573
        this.cboDateFormat.setEnabled(editable);
574
        this.cboFieldType.setEnabled(editable);
575
        this.cboGeometryType.setEnabled(editable);
576
        this.cboGeometrySubtype.setEnabled(editable);
577
578
    }
579 44100 jjdelcerro
580
    private int getMaxSizeOfType(int dataType) {
581
        switch(dataType) {
582
            case DataTypes.BOOLEAN:
583
                return 1;
584
            case DataTypes.BYTE:
585
                return 3;
586
            case DataTypes.INT:
587
                return 9;
588
            case DataTypes.LONG:
589
                return 19;
590
            case DataTypes.FLOAT:
591
                return 20;
592
            case DataTypes.DOUBLE:
593
                return 20;
594
            case DataTypes.DATE:
595
                return 8;
596
            default:
597
                return -1;
598
        }
599
    }
600
601 44128 jjdelcerro
    private int getDefaultPrecisionOfType(int dataType) {
602
        switch(dataType) {
603
            case DataTypes.FLOAT:
604
                return 6;
605
            case DataTypes.DOUBLE:
606
                return 6;
607
            default:
608
                return -1;
609
        }
610
    }
611
612 44100 jjdelcerro
    private void doCheckSizeAndPrecision() {
613
        Integer size = this.pickerSize.get();
614
        if( size == null ) {
615
            return;
616
        }
617
        int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType));
618
        if( size<1 || (maxsize>0 && size>maxsize) ) {
619
            this.pickerSize.setWarning(true, "The size is not valid for the selected type");
620
        } else {
621
            this.pickerSize.setWarning(false);
622
        }
623
        if( this.pickerPrecision.isEnabled() ) {
624
            Integer precision = this.pickerPrecision.get();
625
            if( precision == null ) {
626
                return ;
627
            }
628
            if( precision < 0 ) {
629
                this.pickerPrecision.setWarning(true, "the precision can not have a negative value");
630
            } else if( precision>size ) {
631
                this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size");
632
            } else {
633
                this.pickerPrecision.setWarning(false);
634
            }
635
        }
636
    }
637
638 44128 jjdelcerro
    @Override
639
    public void setNameAsNew(FeatureType featureType) {
640
        this.txtFieldName.setText(DefaultFeatureTypePanel.getNewFieldName(featureType));
641
    }
642
643
    @Override
644
    public String getName() {
645
        return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null);
646
    }
647
648
649 44077 jjdelcerro
}