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 @ 44259

History | View | Annotate | Download (42.7 KB)

1 44077 jjdelcerro
package org.gvsig.fmap.dal.swing.impl.featuretype;
2
3 44202 jjdelcerro
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5 44096 jjdelcerro
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
6 44085 jjdelcerro
import java.awt.event.ItemEvent;
7
import java.awt.event.ItemListener;
8 44077 jjdelcerro
import java.util.ArrayList;
9
import java.util.Comparator;
10
import java.util.List;
11 44202 jjdelcerro
import java.util.Objects;
12
import javax.swing.ComboBoxModel;
13 44077 jjdelcerro
import javax.swing.DefaultComboBoxModel;
14 44202 jjdelcerro
import javax.swing.JButton;
15
import javax.swing.JComboBox;
16 44077 jjdelcerro
import javax.swing.JComponent;
17 44085 jjdelcerro
import javax.swing.JOptionPane;
18
import javax.swing.SwingUtilities;
19
import javax.swing.event.ChangeEvent;
20
import javax.swing.event.ChangeListener;
21 44202 jjdelcerro
import javax.swing.text.JTextComponent;
22 44128 jjdelcerro
import org.apache.commons.lang3.StringUtils;
23 44077 jjdelcerro
import org.cresques.cts.IProjection;
24
import org.gvsig.expressionevaluator.Expression;
25
import org.gvsig.expressionevaluator.swing.CalculatorController;
26
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
27
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
28
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
29 44085 jjdelcerro
import org.gvsig.fmap.dal.DALLocator;
30
import org.gvsig.fmap.dal.DataManager;
31 44077 jjdelcerro
import org.gvsig.fmap.dal.DataTypes;
32 44100 jjdelcerro
import org.gvsig.fmap.dal.exception.DataException;
33 44077 jjdelcerro
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
34 44100 jjdelcerro
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
35 44128 jjdelcerro
import org.gvsig.fmap.dal.feature.DataProfile;
36 44077 jjdelcerro
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
37 44100 jjdelcerro
import org.gvsig.fmap.dal.feature.Feature;
38 44077 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
39
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
40 44100 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureStore;
41 44128 jjdelcerro
import org.gvsig.fmap.dal.feature.FeatureType;
42 44077 jjdelcerro
import org.gvsig.fmap.dal.swing.DALSwingLocator;
43 44085 jjdelcerro
import org.gvsig.fmap.dal.swing.DataSwingManager;
44 44149 jjdelcerro
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
45 44077 jjdelcerro
import org.gvsig.fmap.geom.Geometry;
46 44085 jjdelcerro
import org.gvsig.fmap.geom.GeometryLocator;
47
import org.gvsig.fmap.geom.GeometryManager;
48
import org.gvsig.fmap.geom.type.GeometryType;
49 44077 jjdelcerro
import org.gvsig.timesupport.RelativeInterval;
50
import org.gvsig.tools.ToolsLocator;
51
import org.gvsig.tools.dataTypes.DataTypesManager;
52 44202 jjdelcerro
import org.gvsig.tools.dynobject.DynObjectValueItem;
53 44152 jjdelcerro
import org.gvsig.tools.i18n.I18nManager;
54 44077 jjdelcerro
import org.gvsig.tools.swing.api.ListElement;
55
import org.gvsig.tools.swing.api.ToolsSwingLocator;
56
import org.gvsig.tools.swing.api.ToolsSwingManager;
57
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
58
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
59 44085 jjdelcerro
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
60 44128 jjdelcerro
import org.slf4j.Logger;
61
import org.slf4j.LoggerFactory;
62 44077 jjdelcerro
63
/**
64
 *
65
 * @author jjdelcerro
66
 */
67 44085 jjdelcerro
@SuppressWarnings("UseSpecificCatch")
68
public class DefaultFeatureTypeAttributePanel
69
        extends FeatureTypeAttributePanelView
70
        implements FeatureTypeAttributePanel {
71 44077 jjdelcerro
72 44128 jjdelcerro
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypeAttributePanel.class);
73 44202 jjdelcerro
74
    private static class AvailableValuesController {
75
        private final JComboBox cboValues;
76
        private final JTextComponent txtLabel;
77
        private final JTextComponent txtValue;
78
        private final JButton btnAdd;
79
        private final JButton btnUpdate;
80
        private final JButton btnRemove;
81
82
        public AvailableValuesController(
83
                JComboBox cblValues,
84
                JTextComponent txtLabel,
85
                JTextComponent txtValue,
86
                JButton btnAdd,
87
                JButton btnUpdate,
88
                JButton btnRemove
89
            ) {
90
            this.cboValues = cblValues;
91
            this.txtLabel = txtLabel;
92
            this.txtValue = txtValue;
93
            this.btnAdd = btnAdd;
94
            this.btnUpdate = btnUpdate;
95
            this.btnRemove = btnRemove;
96
97
            this.cboValues.addItemListener(new ItemListener() {
98
                @Override
99
                public void itemStateChanged(ItemEvent e) {
100
                    doValuesChanged();
101
                }
102
            });
103
            this.btnAdd.addActionListener(new ActionListener() {
104
                @Override
105
                public void actionPerformed(ActionEvent e) {
106
                    doAdd();
107
                }
108
            });
109
            this.btnUpdate.addActionListener(new ActionListener() {
110
                @Override
111
                public void actionPerformed(ActionEvent e) {
112
                    doUpdate();
113
                }
114
            });
115
            this.btnRemove.addActionListener(new ActionListener() {
116
                @Override
117
                public void actionPerformed(ActionEvent e) {
118
                    doRemove();
119
                }
120
            });
121
        }
122
123
        public void clean() {
124
            this.cboValues.setModel(new DefaultComboBoxModel());
125
            this.txtLabel.setText("");
126
            this.txtValue.setText("");
127
            this.cboValues.setSelectedIndex(-1);
128
        }
129
130
        public DynObjectValueItem[] get() {
131
            ComboBoxModel<DynObjectValueItem> model = this.cboValues.getModel();
132
            DynObjectValueItem[] values = new DynObjectValueItem[model.getSize()];
133
            for (int i = 0; i < model.getSize(); i++) {
134
                values[i] = model.getElementAt(i);
135
            }
136
            return values;
137
        }
138
139
        public void set(DynObjectValueItem[] availableValues) {
140
            DefaultComboBoxModel model = new DefaultComboBoxModel();
141
            if( availableValues!=null ) {
142
                for (DynObjectValueItem availableValue : availableValues) {
143
                    model.addElement(availableValue);
144
                }
145
            }
146
            this.cboValues.setModel(model);
147
            if(model.getSize()>0 ) {
148
                this.cboValues.setSelectedIndex(0);
149
            } else {
150
                this.cboValues.setSelectedIndex(-1);
151
            }
152
        }
153
154
        public void setEditable(boolean editable) {
155
            this.cboValues.setEnabled(editable);
156
            this.txtLabel.setEditable(editable);
157
            this.txtValue.setEditable(editable);
158
            this.btnAdd.setEnabled(editable);
159
            this.btnUpdate.setEnabled(editable);
160
            this.btnRemove.setEnabled(editable);
161
        }
162
163
        private void doValuesChanged() {
164
            DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem();
165
            if( value == null ) {
166
                this.txtLabel.setText("");
167
                this.txtValue.setText("");
168
                this.btnAdd.setEnabled(true);
169
                this.btnUpdate.setEnabled(false);
170
                this.btnRemove.setEnabled(false);
171
                return;
172
            }
173
            this.txtLabel.setText(value.getLabel());
174
            this.txtValue.setText(Objects.toString(value.getValue(),""));
175
            this.btnAdd.setEnabled(true);
176
            this.btnUpdate.setEnabled(true);
177
            this.btnRemove.setEnabled(true);
178
        }
179
180
        private void doAdd() {
181
            DynObjectValueItem value = new DynObjectValueItem("Value", "Label");
182
            DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel();
183
            model.addElement(value);
184
            this.cboValues.setSelectedIndex(model.getSize()-1);
185
        }
186
187
        private void doUpdate() {
188
            DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem();
189
            if( value == null ) {
190
                return; // EEhh?? esto no deberia pasar
191
            }
192
            value.setLabel(this.txtLabel.getText());
193
            value.setValue(this.txtValue.getText());
194
        }
195
196
        private void doRemove() {
197
            int n = this.cboValues.getSelectedIndex();
198
            if( n<0 ) {
199
                return; // EEhh?? esto no deberia pasar
200
            }
201
            DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel();
202
            model.removeElementAt(n);
203
            if( --n <0 ) {
204
                n = 0;
205
            }
206
            this.cboValues.setSelectedIndex(n);
207
        }
208
209
    }
210
211 44077 jjdelcerro
    private final List<ListElement<Integer>> fieldTypes;
212
    private final List<ListElement<Integer>> geometryTypes;
213
    private final List<ListElement<Integer>> geometrySubtypes;
214 44085 jjdelcerro
215 44077 jjdelcerro
    private DatePickerController pickerIntervalEnd;
216
    private DatePickerController pickerIntervalStart;
217
    private CalculatorController<Integer> pickerSize;
218
    private CalculatorController<Integer> pickerPrecision;
219
    private CalculatorController<Object> pickerDefaultValue;
220
    private PickerController<IProjection> pickerCRS;
221
    private ExpressionPickerController pickerVirtualField;
222 44202 jjdelcerro
    private CalculatorController<Integer> pickerOrder;
223
    private AvailableValuesController availableValuesController;
224 44253 jjdelcerro
    private TagsController tagsController;
225 44077 jjdelcerro
226 44085 jjdelcerro
    private boolean editable;
227 44149 jjdelcerro
    private FeatureStoreElement featureStoreElement;
228 44077 jjdelcerro
229
    public DefaultFeatureTypeAttributePanel() {
230 44085 jjdelcerro
        this.editable = true;
231 44077 jjdelcerro
        DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
232
        this.fieldTypes = new ArrayList<>();
233
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BOOLEAN), DataTypes.BOOLEAN));
234
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DATE), DataTypes.DATE));
235
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIME), DataTypes.TIME));
236
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.TIMESTAMP), DataTypes.TIMESTAMP));
237
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INT), DataTypes.INT));
238
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.DOUBLE), DataTypes.DOUBLE));
239
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LONG), DataTypes.LONG));
240
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INTERVAL), DataTypes.INTERVAL));
241 44085 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.INSTANT), DataTypes.INSTANT));
242 44077 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING));
243 44085 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.GEOMETRY), DataTypes.GEOMETRY));
244 44187 jjdelcerro
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BYTEARRAY), DataTypes.BYTEARRAY));
245 44077 jjdelcerro
        this.fieldTypes.sort(new Comparator<ListElement<Integer>>() {
246
            @Override
247
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
248
                return o1.toString().compareTo(o2.toString());
249
            }
250
        });
251
252
        this.geometryTypes = new ArrayList<>();
253
        this.geometryTypes.add(new ListElement("Point", Geometry.TYPES.POINT));
254
        this.geometryTypes.add(new ListElement("Line", Geometry.TYPES.LINE));
255
        this.geometryTypes.add(new ListElement("Polygon", Geometry.TYPES.POLYGON));
256
        this.geometryTypes.add(new ListElement("MultiPoint", Geometry.TYPES.MULTIPOINT));
257
        this.geometryTypes.add(new ListElement("MultiLine", Geometry.TYPES.MULTILINE));
258
        this.geometryTypes.add(new ListElement("MultiPolygon", Geometry.TYPES.MULTIPOLYGON));
259
        this.geometryTypes.sort(new Comparator<ListElement<Integer>>() {
260
            @Override
261
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
262
                return o1.toString().compareTo(o2.toString());
263
            }
264
        });
265 44085 jjdelcerro
266 44077 jjdelcerro
        this.geometrySubtypes = new ArrayList<>();
267
        this.geometrySubtypes.add(new ListElement("2D", Geometry.SUBTYPES.GEOM2D));
268
        this.geometrySubtypes.add(new ListElement("2DM", Geometry.SUBTYPES.GEOM3D));
269
        this.geometrySubtypes.add(new ListElement("3D", Geometry.SUBTYPES.GEOM2DM));
270
        this.geometrySubtypes.add(new ListElement("3DM", Geometry.SUBTYPES.GEOM3DM));
271
        this.geometrySubtypes.sort(new Comparator<ListElement<Integer>>() {
272
            @Override
273
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
274
                return o1.toString().compareTo(o2.toString());
275
            }
276
        });
277 44085 jjdelcerro
278 44077 jjdelcerro
        this.initComponents();
279
    }
280 44085 jjdelcerro
281 44077 jjdelcerro
    private void initComponents() {
282
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
283
        ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager();
284 44149 jjdelcerro
        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
285
286 44077 jjdelcerro
        DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>();
287
        for (ListElement<Integer> element : fieldTypes) {
288
            modelTypes.addElement(element);
289
        }
290
        this.cboFieldType.setModel(modelTypes);
291
292
        DefaultComboBoxModel<ListElement<Integer>> modelGeomTypes = new DefaultComboBoxModel<>();
293
        for (ListElement<Integer> element : this.geometryTypes) {
294
            modelGeomTypes.addElement(element);
295
        }
296
        this.cboGeometryType.setModel(modelGeomTypes);
297
298
        DefaultComboBoxModel<ListElement<Integer>> modelGeomSubtypes = new DefaultComboBoxModel<>();
299
        for (ListElement<Integer> element : this.geometrySubtypes) {
300
            modelGeomSubtypes.addElement(element);
301
        }
302 44085 jjdelcerro
303
        this.cboGeometrySubtype.setModel(modelGeomSubtypes);
304
305 44128 jjdelcerro
        swingManager.translate(this.lblAllowNulls);
306
        swingManager.translate(this.lblCRS);
307
        swingManager.translate(this.lblDataProfile);
308
        swingManager.translate(this.lblDateFormat);
309
        swingManager.translate(this.lblDefaultValue);
310
        swingManager.translate(this.lblFieldName);
311
        swingManager.translate(this.lblFieldType);
312
        swingManager.translate(this.lblGeometrySubtype);
313
        swingManager.translate(this.lblGeometryType);
314
        swingManager.translate(this.lblInterval);
315
        swingManager.translate(this.lblIntervalEnd);
316
        swingManager.translate(this.lblIntervalStart);
317
        swingManager.translate(this.lblIsAutomatic);
318
        swingManager.translate(this.lblIsPrimaryKey);
319
        swingManager.translate(this.lblPrecision);
320
        swingManager.translate(this.lblSize);
321
        swingManager.translate(this.chkVirtualField);
322
        swingManager.translate(this.tabAditionalFields);
323 44202 jjdelcerro
        swingManager.translate(this.tabLayout);
324
        swingManager.translate(this.lblGroup);
325
        swingManager.translate(this.lblOrder);
326
        swingManager.translate(this.lblHidden);
327
        swingManager.translate(this.lblLabel);
328
        swingManager.translate(this.lblDescription);
329
        swingManager.translate(this.lblMinValue);
330
        swingManager.translate(this.lblMaxValue);
331
        swingManager.translate(this.lblAvailableValues);
332
        swingManager.translate(this.lblAvailableValuesLabel);
333
        swingManager.translate(this.lblAvailableValuesValue);
334
        swingManager.translate(this.btnAvailableValuesAdd);
335
        swingManager.translate(this.btnAvailableValuesUpdate);
336
        swingManager.translate(this.btnAvailableValuesRemove);
337 44253 jjdelcerro
        swingManager.translate(this.lblTagsName);
338
        swingManager.translate(this.lblTagsValue);
339
340 44077 jjdelcerro
        swingManager.addClearButton(this.txtDefaultValue);
341
        swingManager.addClearButton(this.txtFieldName);
342
        swingManager.addClearButton(this.txtIntervalEnd);
343
        swingManager.addClearButton(this.txtIntervalStart);
344
        swingManager.addClearButton(this.txtPrecision);
345
        swingManager.addClearButton(this.txtSize);
346 44202 jjdelcerro
        swingManager.addClearButton(this.txtLabel);
347
        swingManager.addClearButton(this.txtDescription);
348
        swingManager.addClearButton(this.cboGroup);
349
        swingManager.addClearButton(this.txtMaxValue);
350
        swingManager.addClearButton(this.txtMinValue);
351
        swingManager.addClearButton(this.txtAvailableValuesLabel);
352 44253 jjdelcerro
        swingManager.addClearButton(this.txtAvailableValuesValue);
353 44202 jjdelcerro
354 44077 jjdelcerro
        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
355
        swingManager.setDefaultPopupMenu(this.txtFieldName);
356
        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
357
        swingManager.setDefaultPopupMenu(this.txtIntervalStart);
358
        swingManager.setDefaultPopupMenu(this.txtPrecision);
359
        swingManager.setDefaultPopupMenu(this.txtSize);
360
        swingManager.setDefaultPopupMenu(this.cboDateFormat);
361
        swingManager.setDefaultPopupMenu(this.cboFieldType);
362
        swingManager.setDefaultPopupMenu(this.cboGeometrySubtype);
363
        swingManager.setDefaultPopupMenu(this.cboGeometryType);
364 44128 jjdelcerro
        swingManager.setDefaultPopupMenu(this.cboDataProfile);
365 44085 jjdelcerro
366 44202 jjdelcerro
        swingManager.setDefaultPopupMenu(this.cboGroup);
367
        swingManager.setDefaultPopupMenu(this.txtOrder);
368
        swingManager.setDefaultPopupMenu(this.txtLabel);
369
        swingManager.setDefaultPopupMenu(this.txtDescription);
370
        swingManager.setDefaultPopupMenu(this.txtMinValue);
371
        swingManager.setDefaultPopupMenu(this.txtMaxValue);
372
        swingManager.setDefaultPopupMenu(this.txtAvailableValuesLabel);
373
        swingManager.setDefaultPopupMenu(this.txtAvailableValuesValue);
374
375 44077 jjdelcerro
        this.pickerIntervalEnd = swingManager.createDatePickerController(
376 44085 jjdelcerro
                this.txtIntervalEnd,
377 44077 jjdelcerro
                this.btnIntervalEnd
378
        );
379
        this.pickerIntervalStart = swingManager.createDatePickerController(
380 44085 jjdelcerro
                this.txtIntervalStart,
381 44077 jjdelcerro
                this.btnIntervalStart
382
        );
383
        this.pickerSize = evaluatorManager.createCalculatorController(
384 44085 jjdelcerro
                this.txtSize, DataTypes.INT
385 44077 jjdelcerro
        );
386
        this.pickerPrecision = evaluatorManager.createCalculatorController(
387 44085 jjdelcerro
                this.txtPrecision, DataTypes.INT
388 44077 jjdelcerro
        );
389
        this.pickerDefaultValue = evaluatorManager.createCalculatorController(
390 44085 jjdelcerro
                this.txtDefaultValue, DataTypes.OBJECT
391 44077 jjdelcerro
        );
392 44202 jjdelcerro
        this.pickerOrder = evaluatorManager.createCalculatorController(
393
                this.txtOrder, DataTypes.INT
394
        );
395 44085 jjdelcerro
396 44202 jjdelcerro
        this.availableValuesController = new AvailableValuesController(
397
                cboAvailableValues,
398
                txtAvailableValuesLabel,
399
                txtAvailableValuesValue,
400
                btnAvailableValuesAdd,
401
                btnAvailableValuesUpdate,
402
                btnAvailableValuesRemove
403
        );
404 44253 jjdelcerro
        this.tagsController = new TagsController(
405
                tblTags,
406
                cboTagsName,
407
                txtTagsValue,
408
                btnTagsAdd,
409
                btnTagsUpdate,
410
                btnTagsRemove,
411
                lblTagsDescription
412
        );
413 44202 jjdelcerro
        this.txtMinValue.setEnabled(false);
414
        this.txtMaxValue.setEnabled(false);
415
416 44085 jjdelcerro
        this.btnVirtualField.setText("");
417 44259 jjdelcerro
        this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
418 44077 jjdelcerro
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
419
                .createExpressionPickerController(txtVirtualField, btnVirtualField);
420 44149 jjdelcerro
        this.pickerVirtualField.addElement(this.featureStoreElement);
421
        this.chkVirtualField.addChangeListener(new ChangeListener() {
422
            @Override
423
            public void stateChanged(ChangeEvent e) {
424
                if (chkVirtualField.isSelected()) {
425
                    pickerVirtualField.setEnabled(editable);
426
                } else {
427
                    pickerVirtualField.setEnabled(false);
428
                }
429
            }
430
        });
431 44077 jjdelcerro
432 44085 jjdelcerro
433 44149 jjdelcerro
        this.pickerCRS = dataSwingManager.createProjectionPickerController(
434
                this.txtCRS, this.btnCRS
435
        );
436
437 44085 jjdelcerro
        this.cboFieldType.addItemListener(new ItemListener() {
438
            @Override
439
            public void itemStateChanged(ItemEvent e) {
440
                SwingUtilities.invokeLater(new Runnable() {
441
                    @Override
442
                    public void run() {
443
                        doFieldTypeChanged();
444
                    }
445
                });
446
447
            }
448
        });
449
450 44100 jjdelcerro
        this.pickerPrecision.addChangeListener(new ChangeListener() {
451
            @Override
452
            public void stateChanged(ChangeEvent e) {
453
                doCheckSizeAndPrecision();
454
            }
455
        });
456
        this.pickerSize.addChangeListener(new ChangeListener() {
457
            @Override
458
            public void stateChanged(ChangeEvent e) {
459
                doCheckSizeAndPrecision();
460
            }
461
        });
462 44128 jjdelcerro
463 44253 jjdelcerro
        DefaultComboBoxModel dataProfilesModel = new DefaultComboBoxModel<>();
464
        dataProfilesModel.addElement(new ListElement<>("",null));
465 44128 jjdelcerro
        for (DataProfile profile : DALLocator.getDataManager().getDataProfiles()) {
466 44253 jjdelcerro
            dataProfilesModel.addElement(new ListElement<>(profile.getName(), profile.getID()));
467 44128 jjdelcerro
        }
468
        this.cboDataProfile.setModel(dataProfilesModel);
469 44077 jjdelcerro
    }
470 44085 jjdelcerro
471 44077 jjdelcerro
    @Override
472
    public JComponent asJComponent() {
473
        return this;
474
    }
475
476
    @Override
477
    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
478 44152 jjdelcerro
        I18nManager i18n = ToolsLocator.getI18nManager();
479 44085 jjdelcerro
        try {
480 44223 jjdelcerro
            if( !this.chkAllowNulls.isSelected() ) {
481
                if( descriptor.allowNull() ) {
482
                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
483
                    dialogs.messageDialog(
484
                            i18n.getTranslation("_You_have_marked_not_allow_nulls")+ "\n" +
485
                            i18n.getTranslation("If_you_are_not_fully_aware_of_the_repercussions_of_this_it_is_advisable_to_allow_nulls"),
486
                            null,
487
                            i18n.getTranslation("_Warning"),
488
                            JOptionPane.INFORMATION_MESSAGE,
489
                            "AllowNullsInFeatureTypeEditing"
490
                    );
491
                }
492
            }
493 44085 jjdelcerro
            descriptor.setDataType((int) ListElement.getSelected(this.cboFieldType));
494
            descriptor.setName(this.txtFieldName.getText());
495
            descriptor.setAllowNull(this.chkAllowNulls.isSelected());
496
            descriptor.setIsPrimaryKey(this.chkIsPrimaryKey.isSelected());
497
            descriptor.setIsAutomatic(this.chkIsAutomatic.isSelected());
498 44152 jjdelcerro
            descriptor.setSize(this.pickerSize.get(0));
499
            descriptor.setPrecision(this.pickerPrecision.get(0));
500 44085 jjdelcerro
            descriptor.setDefaultValue(this.pickerDefaultValue.get());
501 44253 jjdelcerro
            descriptor.setDataProfileName((String) ListElement.getSelected(this.cboDataProfile));
502 44085 jjdelcerro
            switch (descriptor.getType()) {
503
                case DataTypes.GEOMETRY:
504
                    GeometryManager geomManager = GeometryLocator.getGeometryManager();
505
                    GeometryType geomType = geomManager.getGeometryType(
506
                            (int) ListElement.getSelected(this.cboGeometryType),
507
                            (int) ListElement.getSelected(this.cboGeometrySubtype)
508
                    );
509
                    descriptor.setGeometryType(geomType);
510
                    descriptor.setSRS(this.pickerCRS.get());
511
                    break;
512
                case DataTypes.INSTANT:
513
                case DataTypes.INTERVAL:
514
                case DataTypes.DATE:
515
                case DataTypes.TIME:
516
                case DataTypes.TIMESTAMP:
517
                    // FIXME
518
                    break;
519
                default:
520
                    break;
521
            }
522 44154 jjdelcerro
            descriptor.setDataProfileName(
523 44253 jjdelcerro
                StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile),null)
524 44154 jjdelcerro
            );
525
526 44085 jjdelcerro
            if( this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled() ) {
527
                Expression expression = this.pickerVirtualField.get();
528
                if( expression==null ) {
529 44253 jjdelcerro
                    descriptor.setFeatureAttributeEmulator((String)null);
530 44085 jjdelcerro
                } else {
531
                    DataManager dataManager = DALLocator.getDataManager();
532
                    FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
533
                            descriptor.getFeatureType(),
534
                            expression
535
                    );
536 44154 jjdelcerro
                    if( !emulator.isValid() ) {
537
                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
538
                        dialogs.messageDialog(
539
                                i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
540
                                    "\n"+
541
                                    emulator.getErrorMessage(),
542
                                i18n.getTranslation("_Warning"),
543
                                JOptionPane.WARNING_MESSAGE
544
                        );
545
                        return null;
546
                    }
547
                    for (String requiredFieldName : emulator.getRequiredFieldNames()) {
548
                        if( StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName()) ) {
549
                            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
550
                            dialogs.messageDialog(
551
                                    i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
552
                                        "\n\n"+
553
                                        i18n.getTranslation("_The_expression_contains_a_reference_to_itself"),
554
                                    i18n.getTranslation("_Warning"),
555
                                    JOptionPane.WARNING_MESSAGE
556
                            );
557
                            return null;
558
                        }
559
                    }
560 44155 jjdelcerro
                    descriptor.setFeatureAttributeEmulator(emulator);
561 44154 jjdelcerro
                    //
562
                    // No se porque esto de abajo no funciona.
563
                    // Nunca se lanza la excepcion en el get(Feature) de
564
                    // DefaultFeatureAttributeEmulatorExpression.
565
                    //
566
//                    try {
567
//                        emulator.setEnableExceptions(true);
568
//                        descriptor.setFeatureAttributeEmulator(emulator);
569
//                        this.pickerVirtualField.getPreviewSymbolTable().value(descriptor.getName());
570
//                    } catch(Throwable ex) {
571
//                        emulator.setEnableExceptions(false);
572
//                        descriptor.setFeatureAttributeEmulator(null);
573
//                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
574
//                        dialogs.messageDialog(
575
//                                i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
576
//                                    "\n"+
577
//                                    ex.getMessage(),
578
//                                i18n.getTranslation("_Warning"),
579
//                                JOptionPane.WARNING_MESSAGE
580
//                        );
581
//                        return null;
582
//                    } finally {
583
//                        emulator.setEnableExceptions(false);
584
//                    }
585 44085 jjdelcerro
                }
586
            }
587
        } catch (Exception ex) {
588 44152 jjdelcerro
            LOGGER.warn("Can't retrieve information from user form.",ex);
589 44085 jjdelcerro
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
590
            dialogs.messageDialog(
591 44152 jjdelcerro
                    i18n.getTranslation("_Cant_retrieve_information_from_user_form")+
592
                        "\n"+
593
                        i18n.getTranslation("_See_log_for_details"),
594
                    i18n.getTranslation("_Warning"),
595 44085 jjdelcerro
                    JOptionPane.WARNING_MESSAGE
596
            );
597 44152 jjdelcerro
            return null;
598 44085 jjdelcerro
        }
599 44202 jjdelcerro
600
        descriptor.setGroup(StringUtils.defaultIfBlank((String) this.cboGroup.getSelectedItem(), null));
601
        descriptor.setOrder(this.pickerOrder.get(0));
602
        descriptor.setHidden(this.chkHidden.isSelected());
603
        descriptor.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null));
604
        descriptor.setDescription(StringUtils.defaultIfBlank(this.txtDescription.getText(), null));
605
606
//        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
607
//        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
608
609
        descriptor.setAvailableValues(this.availableValuesController.get());
610 44253 jjdelcerro
        this.tagsController.fetch(descriptor.getTags());
611 44202 jjdelcerro
612 44077 jjdelcerro
        return descriptor;
613
    }
614
615 44202 jjdelcerro
    @Override
616 44077 jjdelcerro
    public void clean() {
617
        this.pickerDefaultValue.set(null);
618 44100 jjdelcerro
        this.txtFieldName.setText("");
619
//        this.pickerFieldName.set(null);
620 44077 jjdelcerro
        this.pickerIntervalEnd.set(null);
621
        this.pickerIntervalStart.set(null);
622
        this.pickerPrecision.set(null);
623
        this.pickerSize.set(null);
624
625
        this.chkAllowNulls.setSelected(false);
626
        this.chkIsAutomatic.setSelected(false);
627
        this.chkIsPrimaryKey.setSelected(false);
628 44085 jjdelcerro
629 44077 jjdelcerro
        this.chkVirtualField.setSelected(false);
630 44085 jjdelcerro
        this.chkVirtualField.setEnabled(editable);
631 44077 jjdelcerro
        this.pickerVirtualField.setEnabled(false);
632
        this.pickerVirtualField.set(null);
633
634
        ListElement.setSelected(cboGeometryType, null);
635
        ListElement.setSelected(cboGeometrySubtype, null);
636 44085 jjdelcerro
637
        ListElement.setSelected(cboFieldType, DataTypes.STRING);
638 44128 jjdelcerro
639
        this.cboDataProfile.setSelectedIndex(-1);
640 44202 jjdelcerro
641
        this.cboGroup.setSelectedIndex(-1);
642
        this.pickerOrder.set(null);
643
        this.chkHidden.setSelected(false);
644
        this.txtLabel.setText("");
645
        this.txtDescription.setText("");
646
        this.txtMinValue.setText("");
647
        this.txtMaxValue.setText("");
648
        this.availableValuesController.clean();
649 44253 jjdelcerro
        this.tagsController.clean();
650 44077 jjdelcerro
    }
651 44085 jjdelcerro
652 44077 jjdelcerro
    @Override
653
    public void put(FeatureAttributeDescriptor descriptor) {
654 44085 jjdelcerro
        if (descriptor == null) {
655 44077 jjdelcerro
            this.clean();
656
            return;
657
        }
658 44202 jjdelcerro
        FeatureType featureType = descriptor.getFeatureType();
659
        DefaultComboBoxModel groupModel = new DefaultComboBoxModel();
660
661
        if( featureType!=null ) {
662 44100 jjdelcerro
            FeatureStore store = descriptor.getFeatureType().getStore();
663 44149 jjdelcerro
            this.featureStoreElement.setFeatureStore(store);
664
            if( store != null ) {
665 44100 jjdelcerro
                Feature sampleFeature = null;
666
                try {
667
                    sampleFeature = store.getFeatureSelection().first();
668
                    if( sampleFeature == null ) {
669
                        sampleFeature = store.first();
670
                    }
671
                } catch (DataException ex) {
672
                }
673
                if( sampleFeature!=null ) {
674
                    FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
675
                    featureSymbolTable.setFeature(sampleFeature);
676
                    this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
677
                }
678
            }
679 44202 jjdelcerro
            List<String> groups = new ArrayList<>();
680
            for (FeatureAttributeDescriptor otherdesc : featureType) {
681
                String group = otherdesc.getGroup();
682
                if( !StringUtils.isBlank(group) && !groups.contains(group) ) {
683
                    groups.add(group);
684
                }
685
            }
686
            for (String group : groups) {
687
                groupModel.addElement(group);
688
            }
689 44085 jjdelcerro
        }
690 44094 jjdelcerro
        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
691
            this.setEditable(false);
692
        }
693 44085 jjdelcerro
694 44077 jjdelcerro
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
695 44100 jjdelcerro
        this.txtFieldName.setText(descriptor.getName());
696 44077 jjdelcerro
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
697 44085 jjdelcerro
        if (interval == null) {
698
            this.pickerIntervalEnd.set(null);
699
            this.pickerIntervalStart.set(null);
700 44077 jjdelcerro
        } else {
701
            this.pickerIntervalEnd.set(interval.getEnd().toDate());
702
            this.pickerIntervalStart.set(interval.getStart().toDate());
703
        }
704
        this.pickerPrecision.set(descriptor.getPrecision());
705
        this.pickerSize.set(descriptor.getSize());
706 44085 jjdelcerro
707 44077 jjdelcerro
        this.chkAllowNulls.setSelected(descriptor.allowNull());
708
        this.chkIsAutomatic.setSelected(descriptor.isAutomatic());
709
        this.chkIsPrimaryKey.setSelected(descriptor.isPrimaryKey());
710 44085 jjdelcerro
711 44077 jjdelcerro
        FeatureAttributeEmulator attrEmulator = descriptor.getFeatureAttributeEmulator();
712 44085 jjdelcerro
        if (attrEmulator instanceof FeatureAttributeEmulatorExpression) {
713 44077 jjdelcerro
            Expression expression = ((FeatureAttributeEmulatorExpression) attrEmulator).getExpression();
714 44085 jjdelcerro
            this.chkVirtualField.setEnabled(editable);
715 44077 jjdelcerro
            this.chkVirtualField.setSelected(true);
716 44085 jjdelcerro
            this.pickerVirtualField.setEnabled(editable);
717 44077 jjdelcerro
            this.pickerVirtualField.set(expression);
718 44085 jjdelcerro
        } else if (descriptor.isComputed()) {
719
            this.chkVirtualField.setEnabled(false);
720 44077 jjdelcerro
            this.chkVirtualField.setSelected(true);
721
            this.pickerVirtualField.setEnabled(false);
722
            this.pickerVirtualField.set(null);
723
        } else {
724 44085 jjdelcerro
            this.chkVirtualField.setEnabled(editable);
725 44077 jjdelcerro
            this.chkVirtualField.setSelected(false);
726
            this.pickerVirtualField.setEnabled(false);
727
            this.pickerVirtualField.set(null);
728
        }
729 44085 jjdelcerro
730 44077 jjdelcerro
        this.pickerCRS.set(descriptor.getSRS());
731 44085 jjdelcerro
732
        if (descriptor.getGeomType() != null) {
733 44079 jjdelcerro
            ListElement.setSelected(cboGeometryType, descriptor.getGeomType().getType());
734
            ListElement.setSelected(cboGeometrySubtype, descriptor.getGeomType().getSubType());
735
        }
736 44085 jjdelcerro
        ListElement.setSelected(cboFieldType, descriptor.getType());
737
738 44128 jjdelcerro
        String profile = descriptor.getDataProfileName();
739
        if( StringUtils.isBlank(profile) ) {
740 44253 jjdelcerro
           this.cboDataProfile.setSelectedIndex(-1);
741 44128 jjdelcerro
        } else {
742 44253 jjdelcerro
           ListElement.setSelected(this.cboDataProfile,profile);
743 44128 jjdelcerro
        }
744 44202 jjdelcerro
745
        this.cboGroup.setModel(groupModel);
746
        this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(),""));
747
        this.pickerOrder.set(descriptor.getOder());
748
        this.chkHidden.setSelected(descriptor.isHidden());
749
        this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(),""));
750
        this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(),""));
751
        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
752
        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
753
        this.availableValuesController.set(descriptor.getAvailableValues());
754 44253 jjdelcerro
        this.tagsController.set(descriptor.getTags());
755 44202 jjdelcerro
756 44077 jjdelcerro
    }
757
758 44085 jjdelcerro
    private void doFieldTypeChanged() {
759
        try {
760
            Integer fieldType = (Integer) ListElement.getSelected(this.cboFieldType);
761
            if (fieldType == null) {
762
                fieldType = DataTypes.UNKNOWN;
763
            }
764 44128 jjdelcerro
            Integer size = this.pickerSize.get();
765
            if( fieldType == DataTypes.STRING ) {
766
                if( size == null ) {
767
                    this.pickerSize.set(50);
768
                }
769
            } else {
770 44100 jjdelcerro
                int maxsize = this.getMaxSizeOfType(fieldType);
771 44128 jjdelcerro
                if( size==null || (maxsize>0 && size>maxsize) ) {
772 44100 jjdelcerro
                    this.pickerSize.set(maxsize);
773
                }
774
            }
775 44128 jjdelcerro
            Integer precision = this.pickerPrecision.get();
776
            if( precision==null ) {
777
                int defaultPrecision = this.getDefaultPrecisionOfType(fieldType);
778
                if( defaultPrecision>0 ) {
779
                    this.pickerPrecision.set(defaultPrecision);
780
                }
781
            }
782
783 44085 jjdelcerro
            switch (fieldType) {
784
                case DataTypes.GEOMETRY:
785
                    this.cboGeometryType.setEnabled(editable);
786
                    this.cboGeometrySubtype.setEnabled(editable);
787
                    this.pickerCRS.setEnabled(editable);
788
                    this.cboDateFormat.setEnabled(false);
789
                    this.pickerIntervalStart.setEnabled(false);
790
                    this.pickerIntervalEnd.setEditable(false);
791
                    this.tabAditionalFields.setEnabledAt(1, true);
792
                    this.tabAditionalFields.setEnabledAt(2, false);
793 44100 jjdelcerro
                    this.pickerSize.set(null);
794
                    this.pickerPrecision.set(null);
795
                    this.pickerSize.setEnabled(false);
796
                    this.pickerPrecision.setEnabled(false);
797 44085 jjdelcerro
                    break;
798
                case DataTypes.INSTANT:
799
                case DataTypes.INTERVAL:
800
                case DataTypes.DATE:
801
                case DataTypes.TIME:
802
                case DataTypes.TIMESTAMP:
803
                    this.cboGeometryType.setEnabled(false);
804
                    this.cboGeometrySubtype.setEnabled(false);
805
                    this.pickerCRS.setEnabled(false);
806
                    this.cboDateFormat.setEnabled(editable);
807
                    this.pickerIntervalStart.setEnabled(editable);
808 44100 jjdelcerro
                    this.pickerIntervalEnd.setEnabled(editable);
809 44085 jjdelcerro
                    this.tabAditionalFields.setEnabledAt(1, false);
810
                    this.tabAditionalFields.setEnabledAt(2, true);
811 44100 jjdelcerro
                    this.pickerSize.set(null);
812
                    this.pickerPrecision.set(null);
813
                    this.pickerSize.setEnabled(false);
814
                    this.pickerPrecision.setEnabled(false);
815 44085 jjdelcerro
                    break;
816 44100 jjdelcerro
                case DataTypes.BYTE:
817
                case DataTypes.INT:
818
                case DataTypes.LONG:
819
                case DataTypes.STRING:
820
                    this.cboGeometryType.setEnabled(false);
821
                    this.cboGeometrySubtype.setEnabled(false);
822
                    this.pickerCRS.setEnabled(false);
823
                    this.cboDateFormat.setEnabled(false);
824
                    this.pickerIntervalStart.setEnabled(false);
825
                    this.pickerIntervalEnd.setEditable(false);
826
                    this.tabAditionalFields.setEnabledAt(1, false);
827
                    this.tabAditionalFields.setEnabledAt(2, false);
828
829
                    this.pickerPrecision.set(null);
830
                    this.pickerSize.setEnabled(true);
831
                    this.pickerPrecision.setEnabled(false);
832
                    break;
833
                case DataTypes.FLOAT:
834
                case DataTypes.DOUBLE:
835
                    this.cboGeometryType.setEnabled(false);
836
                    this.cboGeometrySubtype.setEnabled(false);
837
                    this.pickerCRS.setEnabled(false);
838
                    this.cboDateFormat.setEnabled(false);
839
                    this.pickerIntervalStart.setEnabled(false);
840
                    this.pickerIntervalEnd.setEditable(false);
841
                    this.tabAditionalFields.setEnabledAt(1, false);
842
                    this.tabAditionalFields.setEnabledAt(2, false);
843
844
                    this.pickerSize.setEnabled(true);
845
                    this.pickerPrecision.setEnabled(true);
846
                    break;
847 44085 jjdelcerro
                default:
848
                    this.cboGeometryType.setEnabled(false);
849
                    this.cboGeometrySubtype.setEnabled(false);
850
                    this.pickerCRS.setEnabled(false);
851
                    this.cboDateFormat.setEnabled(false);
852
                    this.pickerIntervalStart.setEnabled(false);
853
                    this.pickerIntervalEnd.setEditable(false);
854
                    this.tabAditionalFields.setEnabledAt(1, false);
855
                    this.tabAditionalFields.setEnabledAt(2, false);
856 44100 jjdelcerro
                    this.pickerSize.set(null);
857
                    this.pickerPrecision.set(null);
858
                    this.pickerSize.setEnabled(false);
859
                    this.pickerPrecision.setEnabled(false);
860 44085 jjdelcerro
            }
861
        } catch (Exception ex) {
862 44128 jjdelcerro
            LOGGER.warn("Problems changing field type.",ex);
863 44085 jjdelcerro
        }
864 44100 jjdelcerro
865 44077 jjdelcerro
    }
866 44085 jjdelcerro
867 44202 jjdelcerro
    @Override
868 44085 jjdelcerro
    public void setEditable(boolean editable) {
869
        this.editable = editable;
870
        this.pickerDefaultValue.setEditable(editable);
871 44100 jjdelcerro
        this.txtFieldName.setEditable(editable);
872
//        this.pickerFieldName.setEditable(editable);
873 44085 jjdelcerro
        this.pickerIntervalEnd.setEditable(editable);
874
        this.pickerIntervalStart.setEditable(editable);
875
        this.pickerPrecision.setEditable(editable);
876
        this.pickerSize.setEditable(editable);
877 44128 jjdelcerro
        this.cboDataProfile.setEnabled(editable);
878 44085 jjdelcerro
879
        this.chkAllowNulls.setEnabled(editable);
880
        this.chkIsAutomatic.setEnabled(editable);
881
        this.chkIsPrimaryKey.setEnabled(editable);
882
883
        this.chkVirtualField.setEnabled(editable);
884
        this.pickerVirtualField.setEditable(editable);
885
886
        this.cboDateFormat.setEnabled(editable);
887
        this.cboFieldType.setEnabled(editable);
888
        this.cboGeometryType.setEnabled(editable);
889
        this.cboGeometrySubtype.setEnabled(editable);
890 44191 jjdelcerro
        this.pickerCRS.setEditable(editable);
891 44085 jjdelcerro
892 44202 jjdelcerro
        this.cboGroup.setEnabled(editable);
893
        this.pickerOrder.setEditable(editable);
894
        this.chkHidden.setEnabled(editable);
895
        this.txtLabel.setEditable(editable);
896
        this.txtDescription.setEditable(editable);
897
        this.txtMinValue.setEditable(false);
898
        this.txtMaxValue.setEditable(false);
899
        this.availableValuesController.setEditable(editable);
900 44253 jjdelcerro
        this.tagsController.setEditable(editable);
901 44085 jjdelcerro
    }
902 44100 jjdelcerro
903
    private int getMaxSizeOfType(int dataType) {
904
        switch(dataType) {
905
            case DataTypes.BOOLEAN:
906
                return 1;
907
            case DataTypes.BYTE:
908
                return 3;
909
            case DataTypes.INT:
910
                return 9;
911
            case DataTypes.LONG:
912
                return 19;
913
            case DataTypes.FLOAT:
914
                return 20;
915
            case DataTypes.DOUBLE:
916
                return 20;
917
            case DataTypes.DATE:
918
                return 8;
919
            default:
920
                return -1;
921
        }
922
    }
923
924 44128 jjdelcerro
    private int getDefaultPrecisionOfType(int dataType) {
925
        switch(dataType) {
926
            case DataTypes.FLOAT:
927
                return 6;
928
            case DataTypes.DOUBLE:
929
                return 6;
930
            default:
931
                return -1;
932
        }
933
    }
934
935 44100 jjdelcerro
    private void doCheckSizeAndPrecision() {
936
        Integer size = this.pickerSize.get();
937
        if( size == null ) {
938
            return;
939
        }
940
        int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType));
941
        if( size<1 || (maxsize>0 && size>maxsize) ) {
942
            this.pickerSize.setWarning(true, "The size is not valid for the selected type");
943
        } else {
944
            this.pickerSize.setWarning(false);
945
        }
946
        if( this.pickerPrecision.isEnabled() ) {
947
            Integer precision = this.pickerPrecision.get();
948
            if( precision == null ) {
949
                return ;
950
            }
951
            if( precision < 0 ) {
952
                this.pickerPrecision.setWarning(true, "the precision can not have a negative value");
953
            } else if( precision>size ) {
954
                this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size");
955
            } else {
956
                this.pickerPrecision.setWarning(false);
957
            }
958
        }
959
    }
960
961 44128 jjdelcerro
    @Override
962
    public void setNameAsNew(FeatureType featureType) {
963
        this.txtFieldName.setText(DefaultFeatureTypePanel.getNewFieldName(featureType));
964
    }
965
966
    @Override
967
    public String getName() {
968
        return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null);
969
    }
970
971
972 44077 jjdelcerro
}