Revision 44262 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
12 12
import javax.swing.ComboBoxModel;
13 13
import javax.swing.DefaultComboBoxModel;
14 14
import javax.swing.JButton;
15
import javax.swing.JCheckBox;
15 16
import javax.swing.JComboBox;
16 17
import javax.swing.JComponent;
17 18
import javax.swing.JOptionPane;
19
import javax.swing.JTextField;
18 20
import javax.swing.SwingUtilities;
19 21
import javax.swing.event.ChangeEvent;
20 22
import javax.swing.event.ChangeListener;
......
22 24
import org.apache.commons.lang3.StringUtils;
23 25
import org.cresques.cts.IProjection;
24 26
import org.gvsig.expressionevaluator.Expression;
27
import org.gvsig.expressionevaluator.ExpressionUtils;
25 28
import org.gvsig.expressionevaluator.swing.CalculatorController;
26 29
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
27 30
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
28 31
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
29 32
import org.gvsig.fmap.dal.DALLocator;
30 33
import org.gvsig.fmap.dal.DataManager;
34
import org.gvsig.fmap.dal.DataStore;
31 35
import org.gvsig.fmap.dal.DataTypes;
36
import org.gvsig.fmap.dal.StoresRepository;
37
import org.gvsig.fmap.dal.complements.Search;
32 38
import org.gvsig.fmap.dal.exception.DataException;
33 39
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
34 40
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
35 41
import org.gvsig.fmap.dal.feature.DataProfile;
36 42
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
43
import org.gvsig.fmap.dal.feature.EditableForeingKey;
37 44
import org.gvsig.fmap.dal.feature.Feature;
38 45
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
39 46
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
40 47
import org.gvsig.fmap.dal.feature.FeatureStore;
41 48
import org.gvsig.fmap.dal.feature.FeatureType;
49
import org.gvsig.fmap.dal.feature.ForeingKey;
42 50
import org.gvsig.fmap.dal.swing.DALSwingLocator;
43 51
import org.gvsig.fmap.dal.swing.DataSwingManager;
44 52
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
......
71 79

  
72 80
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypeAttributePanel.class);
73 81

  
82
    private static class ForeingKeyController {
83

  
84
        private final JCheckBox chkIsForeingKey;
85
        private final JCheckBox chkIsSelectable;
86
        private final JComboBox cboTable;
87
        private final JComboBox cboCode;
88
        private final JTextField txtFormula;
89
        private final JButton btnFormula;
90
        private ExpressionPickerController pickerFormula;
91
        private boolean editable;
92
        private FeatureStoreElement featureStoreElement;
93
        
94
        public ForeingKeyController(
95
                JCheckBox chkIsForeingKey,
96
                JCheckBox chkIsSelectable,
97
                JComboBox cboTable,
98
                JComboBox cboCode,
99
                JTextField txtFormula,
100
                JButton btnFormula
101
        ) {
102
            this.chkIsForeingKey = chkIsForeingKey;
103
            this.chkIsSelectable = chkIsSelectable;
104
            this.cboTable = cboTable;
105
            this.cboCode = cboCode;
106
            this.txtFormula = txtFormula;
107
            this.btnFormula = btnFormula;
108
            this.initComponents();
109
        }
110

  
111
        private void initComponents() {
112
            DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
113
    
114
            this.editable = true;
115
            
116
            DefaultComboBoxModel<String> model = new DefaultComboBoxModel();
117
            StoresRepository repository = DALLocator.getDataManager().getStoresRepository();
118
            for (String tableName : repository.keySet()) {
119
                model.addElement(tableName);
120
            }
121
            this.cboTable.setModel(model);
122
            this.cboTable.addItemListener(new ItemListener() {
123
                @Override
124
                public void itemStateChanged(ItemEvent e) {
125
                    if (e.getStateChange() != ItemEvent.SELECTED) {
126
                        return;
127
                    }
128
                    Thread th = new Thread(new Runnable() {
129
                        @Override
130
                        public void run() {
131
                            doPopulateComboCode();
132
                        }
133
                    }, "FeatureTypePanelForeingKeyPopulateComboCode");
134
                    th.start();
135
                }
136
            });
137
            this.btnFormula.setText("");
138
            this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
139
            this.pickerFormula = ExpressionEvaluatorSwingLocator.getManager()
140
                    .createExpressionPickerController(txtFormula, btnFormula);
141
            this.pickerFormula.addElement(this.featureStoreElement);
142
            
143
//            this.chkIsForeingKey.addChangeListener(new ChangeListener() {
144
//                @Override
145
//                public void stateChanged(ChangeEvent e) {
146
//                    if (chkIsForeingKey.isSelected()) {
147
//                        setEnabled(editable);
148
//                    } else {
149
//                        setEnabled(false);
150
//                    }
151
//                }
152
//            });
153
        }
154

  
155
        private void doPopulateComboCode() {
156
            String tableName = (String) this.cboTable.getSelectedItem();
157
            if( StringUtils.isBlank(tableName) ) {
158
                return;
159
            }
160
            StoresRepository repository = DALLocator.getDataManager().getStoresRepository();
161
            DataStore store = repository.get(tableName);
162
            if( !(store instanceof FeatureStore) ) {
163
                return;
164
            }
165
            this.featureStoreElement.setFeatureStore((FeatureStore) store);
166
            FeatureType featureType;
167
            try {
168
                featureType = ((FeatureStore)store).getDefaultFeatureType();
169
            } catch (DataException ex) {
170
                return;
171
            }
172
            Search search = (Search) ToolsLocator.getComplementsManager().get(
173
                    Search.COMPLEMENT_MANE, featureType
174
            );
175
            List<FeatureAttributeDescriptor> attributes = search.getOrderedAttributes(
176
                    Search.BASIC_TYPES_FILTER,
177
                    Search.LABEL_ORDER, 
178
                    -1
179
            );
180
            final DefaultComboBoxModel model = new DefaultComboBoxModel();
181
            for (FeatureAttributeDescriptor attribute : attributes) {
182
                model.addElement(attribute.getName());
183
            }
184
            SwingUtilities.invokeLater(new Runnable() {
185
                @Override
186
                public void run() {
187
                    cboCode.setModel(model);
188
                }
189
            });
190
        }
191

  
192
        public void setEditable(boolean editable) {
193
            this.chkIsForeingKey.setEnabled(editable);
194
            this.chkIsSelectable.setEnabled(editable);
195
            this.cboTable.setEnabled(editable);
196
            this.cboCode.setEnabled(editable);
197
            this.btnFormula.setEnabled(editable);
198
            this.txtFormula.setEditable(editable);
199
            this.editable = editable;
200
        }
201
        
202
        public void setEnabled(boolean enabled) {
203
            if( !editable ) {
204
                enabled =  false;
205
            }
206
            this.chkIsForeingKey.setEnabled(enabled);
207
            this.chkIsSelectable.setEnabled(enabled);
208
            this.cboTable.setEnabled(enabled);
209
            this.cboCode.setEnabled(enabled);
210
            this.btnFormula.setEnabled(enabled);
211
            this.txtFormula.setEnabled(enabled);
212
        }
213
        
214
        public void clean() {
215
            this.chkIsForeingKey.setSelected(false);
216
            this.chkIsSelectable.setSelected(false);
217
            this.cboTable.setSelectedItem("");
218
            this.cboCode.setSelectedItem("");
219
            this.pickerFormula.set(null);
220
        }
221
        
222
        public void put(ForeingKey foreingKey) {
223
            if( foreingKey==null ) {
224
                this.clean();
225
                return;
226
            }
227
            this.chkIsForeingKey.setSelected(foreingKey.isForeingKey());
228
            this.chkIsSelectable.setSelected(foreingKey.isSelectable());
229
            this.cboTable.setSelectedItem(foreingKey.getTableName());
230
            this.cboCode.setSelectedItem(foreingKey.getCodeName());
231
            this.pickerFormula.set(foreingKey.getLabelExpression(null));
232
        }
233
        
234
        public void fetch(EditableForeingKey foreingKey) {
235
            if( foreingKey==null ) {
236
                return;
237
            }
238
            foreingKey.setForeingKey(this.chkIsForeingKey.isSelected());
239
            foreingKey.setSelectable(this.chkIsSelectable.isSelected());
240
            foreingKey.setTableName((String) this.cboTable.getSelectedItem());
241
            foreingKey.setCodeName((String) this.cboCode.getSelectedItem());
242
            Expression exp = this.pickerFormula.get();
243
            if( ExpressionUtils.isPhraseEmpty(exp) ) {
244
                foreingKey.setLabelFormula("");
245
            } else {
246
                foreingKey.setLabelFormula(exp.getPhrase());
247
            }
248
        }
249
    }
250
    
251

  
74 252
    private static class AvailableValuesController {
253

  
75 254
        private final JComboBox cboValues;
76 255
        private final JTextComponent txtLabel;
77 256
        private final JTextComponent txtValue;
78 257
        private final JButton btnAdd;
79 258
        private final JButton btnUpdate;
80 259
        private final JButton btnRemove;
81
        
82
        public AvailableValuesController(   
260

  
261
        public AvailableValuesController(
83 262
                JComboBox cblValues,
84 263
                JTextComponent txtLabel,
85 264
                JTextComponent txtValue,
86 265
                JButton btnAdd,
87 266
                JButton btnUpdate,
88 267
                JButton btnRemove
89
            ) {
268
        ) {
90 269
            this.cboValues = cblValues;
91 270
            this.txtLabel = txtLabel;
92 271
            this.txtValue = txtValue;
93 272
            this.btnAdd = btnAdd;
94 273
            this.btnUpdate = btnUpdate;
95 274
            this.btnRemove = btnRemove;
96
            
275

  
97 276
            this.cboValues.addItemListener(new ItemListener() {
98 277
                @Override
99 278
                public void itemStateChanged(ItemEvent e) {
......
133 312
            for (int i = 0; i < model.getSize(); i++) {
134 313
                values[i] = model.getElementAt(i);
135 314
            }
136
            return values;    
315
            return values;
137 316
        }
138 317

  
139 318
        public void set(DynObjectValueItem[] availableValues) {
140 319
            DefaultComboBoxModel model = new DefaultComboBoxModel();
141
            if( availableValues!=null ) {
320
            if (availableValues != null) {
142 321
                for (DynObjectValueItem availableValue : availableValues) {
143 322
                    model.addElement(availableValue);
144 323
                }
145 324
            }
146 325
            this.cboValues.setModel(model);
147
            if(model.getSize()>0 ) {
326
            if (model.getSize() > 0) {
148 327
                this.cboValues.setSelectedIndex(0);
149 328
            } else {
150 329
                this.cboValues.setSelectedIndex(-1);
151 330
            }
152 331
        }
153
        
332

  
154 333
        public void setEditable(boolean editable) {
155 334
            this.cboValues.setEnabled(editable);
156 335
            this.txtLabel.setEditable(editable);
......
162 341

  
163 342
        private void doValuesChanged() {
164 343
            DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem();
165
            if( value == null ) {
344
            if (value == null) {
166 345
                this.txtLabel.setText("");
167 346
                this.txtValue.setText("");
168 347
                this.btnAdd.setEnabled(true);
......
171 350
                return;
172 351
            }
173 352
            this.txtLabel.setText(value.getLabel());
174
            this.txtValue.setText(Objects.toString(value.getValue(),""));
353
            this.txtValue.setText(Objects.toString(value.getValue(), ""));
175 354
            this.btnAdd.setEnabled(true);
176 355
            this.btnUpdate.setEnabled(true);
177 356
            this.btnRemove.setEnabled(true);
178 357
        }
179
        
358

  
180 359
        private void doAdd() {
181 360
            DynObjectValueItem value = new DynObjectValueItem("Value", "Label");
182 361
            DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel();
183 362
            model.addElement(value);
184
            this.cboValues.setSelectedIndex(model.getSize()-1);
363
            this.cboValues.setSelectedIndex(model.getSize() - 1);
185 364
        }
186
        
365

  
187 366
        private void doUpdate() {
188 367
            DynObjectValueItem value = (DynObjectValueItem) this.cboValues.getSelectedItem();
189
            if( value == null ) {
368
            if (value == null) {
190 369
                return; // EEhh?? esto no deberia pasar
191 370
            }
192 371
            value.setLabel(this.txtLabel.getText());
193 372
            value.setValue(this.txtValue.getText());
194 373
        }
195
        
374

  
196 375
        private void doRemove() {
197 376
            int n = this.cboValues.getSelectedIndex();
198
            if( n<0 ) {
377
            if (n < 0) {
199 378
                return; // EEhh?? esto no deberia pasar
200 379
            }
201 380
            DefaultComboBoxModel model = (DefaultComboBoxModel) this.cboValues.getModel();
202 381
            model.removeElementAt(n);
203
            if( --n <0 ) {
382
            if (--n < 0) {
204 383
                n = 0;
205 384
            }
206 385
            this.cboValues.setSelectedIndex(n);
......
222 401
    private CalculatorController<Integer> pickerOrder;
223 402
    private AvailableValuesController availableValuesController;
224 403
    private TagsController tagsController;
404
    private ForeingKeyController foreingKeyController;
225 405

  
226 406
    private boolean editable;
227 407
    private FeatureStoreElement featureStoreElement;
......
242 422
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.STRING), DataTypes.STRING));
243 423
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.GEOMETRY), DataTypes.GEOMETRY));
244 424
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.BYTEARRAY), DataTypes.BYTEARRAY));
425
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.OBJECT), DataTypes.OBJECT));
426
        this.fieldTypes.add(new ListElement<>(dataManager.getTypeName(DataTypes.LIST), DataTypes.LIST));
245 427
        this.fieldTypes.sort(new Comparator<ListElement<Integer>>() {
246 428
            @Override
247 429
            public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
......
282 464
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
283 465
        ExpressionEvaluatorSwingManager evaluatorManager = ExpressionEvaluatorSwingLocator.getManager();
284 466
        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
285
        
467

  
286 468
        DefaultComboBoxModel<ListElement<Integer>> modelTypes = new DefaultComboBoxModel<>();
287 469
        for (ListElement<Integer> element : fieldTypes) {
288 470
            modelTypes.addElement(element);
......
337 519
        swingManager.translate(this.lblTagsName);
338 520
        swingManager.translate(this.lblTagsValue);
339 521

  
522
        swingManager.translate(this.lblForeingKeyCodeName);
523
        swingManager.translate(this.lblForeingKeyLabelFormula);
524
        swingManager.translate(this.lblForeingKeyTableName);
525
        swingManager.translate(this.lblIsSelectable);
526
        swingManager.translate(this.chkIsForeingKey);
527

  
340 528
        swingManager.addClearButton(this.txtDefaultValue);
341 529
        swingManager.addClearButton(this.txtFieldName);
342 530
        swingManager.addClearButton(this.txtIntervalEnd);
......
349 537
        swingManager.addClearButton(this.txtMaxValue);
350 538
        swingManager.addClearButton(this.txtMinValue);
351 539
        swingManager.addClearButton(this.txtAvailableValuesLabel);
352
        swingManager.addClearButton(this.txtAvailableValuesValue);       
353
        
540
        swingManager.addClearButton(this.txtAvailableValuesValue);
541

  
354 542
        swingManager.setDefaultPopupMenu(this.txtDefaultValue);
355 543
        swingManager.setDefaultPopupMenu(this.txtFieldName);
356 544
        swingManager.setDefaultPopupMenu(this.txtIntervalEnd);
......
363 551
        swingManager.setDefaultPopupMenu(this.cboGeometryType);
364 552
        swingManager.setDefaultPopupMenu(this.cboDataProfile);
365 553

  
554
        swingManager.setDefaultPopupMenu(this.cboForeingKeyCodeName);
555
        swingManager.setDefaultPopupMenu(this.cboForeingKeyTableName);
556

  
366 557
        swingManager.setDefaultPopupMenu(this.cboGroup);
367 558
        swingManager.setDefaultPopupMenu(this.txtOrder);
368 559
        swingManager.setDefaultPopupMenu(this.txtLabel);
......
371 562
        swingManager.setDefaultPopupMenu(this.txtMaxValue);
372 563
        swingManager.setDefaultPopupMenu(this.txtAvailableValuesLabel);
373 564
        swingManager.setDefaultPopupMenu(this.txtAvailableValuesValue);
374
        
565

  
566
        this.foreingKeyController = new ForeingKeyController(
567
                chkIsForeingKey, 
568
                chkIsSelectable, 
569
                cboForeingKeyTableName, 
570
                cboForeingKeyCodeName, 
571
                txtForeingKeyFormula, 
572
                btnForeingKeyFormula
573
        );
375 574
        this.pickerIntervalEnd = swingManager.createDatePickerController(
376 575
                this.txtIntervalEnd,
377 576
                this.btnIntervalEnd
......
394 593
        );
395 594

  
396 595
        this.availableValuesController = new AvailableValuesController(
397
                cboAvailableValues, 
398
                txtAvailableValuesLabel, 
399
                txtAvailableValuesValue, 
400
                btnAvailableValuesAdd, 
401
                btnAvailableValuesUpdate, 
596
                cboAvailableValues,
597
                txtAvailableValuesLabel,
598
                txtAvailableValuesValue,
599
                btnAvailableValuesAdd,
600
                btnAvailableValuesUpdate,
402 601
                btnAvailableValuesRemove
403 602
        );
404 603
        this.tagsController = new TagsController(
405
                tblTags, 
406
                cboTagsName, 
407
                txtTagsValue, 
408
                btnTagsAdd, 
409
                btnTagsUpdate, 
604
                tblTags,
605
                cboTagsName,
606
                txtTagsValue,
607
                btnTagsAdd,
608
                btnTagsUpdate,
410 609
                btnTagsRemove,
411 610
                lblTagsDescription
412 611
        );
413 612
        this.txtMinValue.setEnabled(false);
414 613
        this.txtMaxValue.setEnabled(false);
415
        
614

  
416 615
        this.btnVirtualField.setText("");
417 616
        this.featureStoreElement = dataSwingManager.createFeatureStoreElement();
418 617
        this.pickerVirtualField = ExpressionEvaluatorSwingLocator.getManager()
......
429 628
            }
430 629
        });
431 630

  
432

  
433 631
        this.pickerCRS = dataSwingManager.createProjectionPickerController(
434 632
                this.txtCRS, this.btnCRS
435 633
        );
......
459 657
                doCheckSizeAndPrecision();
460 658
            }
461 659
        });
462
        
660

  
463 661
        DefaultComboBoxModel dataProfilesModel = new DefaultComboBoxModel<>();
464
        dataProfilesModel.addElement(new ListElement<>("",null));
662
        dataProfilesModel.addElement(new ListElement<>("", null));
465 663
        for (DataProfile profile : DALLocator.getDataManager().getDataProfiles()) {
466 664
            dataProfilesModel.addElement(new ListElement<>(profile.getName(), profile.getID()));
467 665
        }
......
477 675
    public EditableFeatureAttributeDescriptor fetch(EditableFeatureAttributeDescriptor descriptor) {
478 676
        I18nManager i18n = ToolsLocator.getI18nManager();
479 677
        try {
480
            if( !this.chkAllowNulls.isSelected() ) {
481
                if( descriptor.allowNull() ) {
678
            if (!this.chkAllowNulls.isSelected()) {
679
                if (descriptor.allowNull()) {
482 680
                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
483 681
                    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"),
682
                            i18n.getTranslation("_You_have_marked_not_allow_nulls") + "\n"
683
                            + i18n.getTranslation("If_you_are_not_fully_aware_of_the_repercussions_of_this_it_is_advisable_to_allow_nulls"),
486 684
                            null,
487
                            i18n.getTranslation("_Warning"), 
685
                            i18n.getTranslation("_Warning"),
488 686
                            JOptionPane.INFORMATION_MESSAGE,
489 687
                            "AllowNullsInFeatureTypeEditing"
490 688
                    );
......
520 718
                    break;
521 719
            }
522 720
            descriptor.setDataProfileName(
523
                StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile),null)
721
                    StringUtils.defaultIfBlank((String) ListElement.getSelected(cboDataProfile), null)
524 722
            );
525 723

  
526
            if( this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled() ) {
724
            if (this.chkVirtualField.isSelected() && this.pickerVirtualField.isEnabled()) {
527 725
                Expression expression = this.pickerVirtualField.get();
528
                if( expression==null ) {
529
                    descriptor.setFeatureAttributeEmulator((String)null);
726
                if (expression == null) {
727
                    descriptor.setFeatureAttributeEmulator((String) null);
530 728
                } else {
531 729
                    DataManager dataManager = DALLocator.getDataManager();
532 730
                    FeatureAttributeEmulatorExpression emulator = dataManager.createFeatureAttributeEmulatorExpression(
533 731
                            descriptor.getFeatureType(),
534 732
                            expression
535 733
                    );
536
                    if( !emulator.isValid() ) {
734
                    if (!emulator.isValid()) {
537 735
                        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
538 736
                        dialogs.messageDialog(
539
                                i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")+
540
                                    "\n"+
541
                                    emulator.getErrorMessage(), 
542
                                i18n.getTranslation("_Warning"), 
737
                                i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")
738
                                + "\n"
739
                                + emulator.getErrorMessage(),
740
                                i18n.getTranslation("_Warning"),
543 741
                                JOptionPane.WARNING_MESSAGE
544 742
                        );
545 743
                        return null;
546 744
                    }
547 745
                    for (String requiredFieldName : emulator.getRequiredFieldNames()) {
548
                        if( StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName()) ) {
746
                        if (StringUtils.equalsIgnoreCase(requiredFieldName, descriptor.getName())) {
549 747
                            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
550 748
                            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"), 
749
                                    i18n.getTranslation("_The_expression_of_virtual_field_is_not_valid")
750
                                    + "\n\n"
751
                                    + i18n.getTranslation("_The_expression_contains_a_reference_to_itself"),
752
                                    i18n.getTranslation("_Warning"),
555 753
                                    JOptionPane.WARNING_MESSAGE
556 754
                            );
557 755
                            return null;
......
585 783
                }
586 784
            }
587 785
        } catch (Exception ex) {
588
            LOGGER.warn("Can't retrieve information from user form.",ex);
786
            LOGGER.warn("Can't retrieve information from user form.", ex);
589 787
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
590 788
            dialogs.messageDialog(
591
                    i18n.getTranslation("_Cant_retrieve_information_from_user_form")+
592
                        "\n"+
593
                        i18n.getTranslation("_See_log_for_details"), 
594
                    i18n.getTranslation("_Warning"), 
789
                    i18n.getTranslation("_Cant_retrieve_information_from_user_form")
790
                    + "\n"
791
                    + i18n.getTranslation("_See_log_for_details"),
792
                    i18n.getTranslation("_Warning"),
595 793
                    JOptionPane.WARNING_MESSAGE
596 794
            );
597 795
            return null;
598 796
        }
599
        
797

  
600 798
        descriptor.setGroup(StringUtils.defaultIfBlank((String) this.cboGroup.getSelectedItem(), null));
601 799
        descriptor.setOrder(this.pickerOrder.get(0));
602 800
        descriptor.setHidden(this.chkHidden.isSelected());
603 801
        descriptor.setLabel(StringUtils.defaultIfBlank(this.txtLabel.getText(), null));
604 802
        descriptor.setDescription(StringUtils.defaultIfBlank(this.txtDescription.getText(), null));
605
        
803

  
606 804
//        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
607 805
//        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
806
        descriptor.setAvailableValues(this.availableValuesController.get());
608 807

  
609
        descriptor.setAvailableValues(this.availableValuesController.get());
610 808
        this.tagsController.fetch(descriptor.getTags());
611
        
809
        this.foreingKeyController.fetch(descriptor.getForeingKey());
612 810
        return descriptor;
613 811
    }
614 812

  
......
635 833
        ListElement.setSelected(cboGeometrySubtype, null);
636 834

  
637 835
        ListElement.setSelected(cboFieldType, DataTypes.STRING);
638
            
836

  
639 837
        this.cboDataProfile.setSelectedIndex(-1);
640
        
838

  
641 839
        this.cboGroup.setSelectedIndex(-1);
642 840
        this.pickerOrder.set(null);
643 841
        this.chkHidden.setSelected(false);
......
646 844
        this.txtMinValue.setText("");
647 845
        this.txtMaxValue.setText("");
648 846
        this.availableValuesController.clean();
649
        this.tagsController.clean();        
847
        this.tagsController.clean();
848
        this.foreingKeyController.clean();
650 849
    }
651 850

  
652 851
    @Override
......
657 856
        }
658 857
        FeatureType featureType = descriptor.getFeatureType();
659 858
        DefaultComboBoxModel groupModel = new DefaultComboBoxModel();
660
        
661
        if( featureType!=null ) {
859

  
860
        if (featureType != null) {
662 861
            FeatureStore store = descriptor.getFeatureType().getStore();
663 862
            this.featureStoreElement.setFeatureStore(store);
664
            if( store != null ) {
863
            if (store != null) {
665 864
                Feature sampleFeature = null;
666 865
                try {
667 866
                    sampleFeature = store.getFeatureSelection().first();
668
                    if( sampleFeature == null ) {
867
                    if (sampleFeature == null) {
669 868
                        sampleFeature = store.first();
670 869
                    }
671 870
                } catch (DataException ex) {
672 871
                }
673
                if( sampleFeature!=null ) {
872
                if (sampleFeature != null) {
674 873
                    FeatureSymbolTable featureSymbolTable = DALLocator.getDataManager().createFeatureSymbolTable();
675 874
                    featureSymbolTable.setFeature(sampleFeature);
676 875
                    this.pickerVirtualField.setPreviewSymbolTable(featureSymbolTable.createParent());
......
679 878
            List<String> groups = new ArrayList<>();
680 879
            for (FeatureAttributeDescriptor otherdesc : featureType) {
681 880
                String group = otherdesc.getGroup();
682
                if( !StringUtils.isBlank(group) && !groups.contains(group) ) {
881
                if (!StringUtils.isBlank(group) && !groups.contains(group)) {
683 882
                    groups.add(group);
684 883
                }
685 884
            }
......
690 889
        if (!(descriptor instanceof EditableFeatureAttributeDescriptor)) {
691 890
            this.setEditable(false);
692 891
        }
693
                
892

  
694 893
        this.pickerDefaultValue.set(descriptor.getDefaultValue());
695 894
        this.txtFieldName.setText(descriptor.getName());
696 895
        RelativeInterval interval = (RelativeInterval) descriptor.getInterval();
......
736 935
        ListElement.setSelected(cboFieldType, descriptor.getType());
737 936

  
738 937
        String profile = descriptor.getDataProfileName();
739
        if( StringUtils.isBlank(profile) ) {
740
           this.cboDataProfile.setSelectedIndex(-1);
938
        if (StringUtils.isBlank(profile)) {
939
            this.cboDataProfile.setSelectedIndex(-1);
741 940
        } else {
742
           ListElement.setSelected(this.cboDataProfile,profile);
941
            ListElement.setSelected(this.cboDataProfile, profile);
743 942
        }
744 943

  
745 944
        this.cboGroup.setModel(groupModel);
746
        this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(),""));
945
        this.cboGroup.setSelectedItem(StringUtils.defaultIfBlank(descriptor.getGroup(), ""));
747 946
        this.pickerOrder.set(descriptor.getOder());
748 947
        this.chkHidden.setSelected(descriptor.isHidden());
749
        this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(),""));
750
        this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(),""));
948
        this.txtLabel.setText(StringUtils.defaultIfBlank(descriptor.getLabel(), ""));
949
        this.txtDescription.setText(StringUtils.defaultIfBlank(descriptor.getDescription(), ""));
751 950
        this.txtMinValue.setText(Objects.toString(descriptor.getMinValue(), ""));
752 951
        this.txtMinValue.setText(Objects.toString(descriptor.getMaxValue(), ""));
753 952
        this.availableValuesController.set(descriptor.getAvailableValues());
754 953
        this.tagsController.set(descriptor.getTags());
755 954

  
955
        this.foreingKeyController.put(descriptor.getForeingKey());
756 956
    }
757 957

  
758 958
    private void doFieldTypeChanged() {
......
762 962
                fieldType = DataTypes.UNKNOWN;
763 963
            }
764 964
            Integer size = this.pickerSize.get();
765
            if( fieldType == DataTypes.STRING ) {
766
                if( size == null ) {
965
            if (fieldType == DataTypes.STRING) {
966
                if (size == null) {
767 967
                    this.pickerSize.set(50);
768 968
                }
769 969
            } else {
770 970
                int maxsize = this.getMaxSizeOfType(fieldType);
771
                if( size==null || (maxsize>0 && size>maxsize) ) {
971
                if (size == null || (maxsize > 0 && size > maxsize)) {
772 972
                    this.pickerSize.set(maxsize);
773 973
                }
774 974
            }
775 975
            Integer precision = this.pickerPrecision.get();
776
            if( precision==null ) {
976
            if (precision == null) {
777 977
                int defaultPrecision = this.getDefaultPrecisionOfType(fieldType);
778
                if( defaultPrecision>0 ) {
978
                if (defaultPrecision > 0) {
779 979
                    this.pickerPrecision.set(defaultPrecision);
780 980
                }
781 981
            }
782
            
982

  
783 983
            switch (fieldType) {
784 984
                case DataTypes.GEOMETRY:
785 985
                    this.cboGeometryType.setEnabled(editable);
......
815 1015
                    break;
816 1016
                case DataTypes.BYTE:
817 1017
                case DataTypes.INT:
818
                case DataTypes.LONG:                    
819
                case DataTypes.STRING:                    
1018
                case DataTypes.LONG:
1019
                case DataTypes.STRING:
820 1020
                    this.cboGeometryType.setEnabled(false);
821 1021
                    this.cboGeometrySubtype.setEnabled(false);
822 1022
                    this.pickerCRS.setEnabled(false);
......
859 1059
                    this.pickerPrecision.setEnabled(false);
860 1060
            }
861 1061
        } catch (Exception ex) {
862
            LOGGER.warn("Problems changing field type.",ex);
1062
            LOGGER.warn("Problems changing field type.", ex);
863 1063
        }
864
        
1064

  
865 1065
    }
866 1066

  
867 1067
    @Override
......
898 1098
        this.txtMaxValue.setEditable(false);
899 1099
        this.availableValuesController.setEditable(editable);
900 1100
        this.tagsController.setEditable(editable);
1101
        this.foreingKeyController.setEditable(editable);
901 1102
    }
902
    
1103

  
903 1104
    private int getMaxSizeOfType(int dataType) {
904
        switch(dataType) {
1105
        switch (dataType) {
905 1106
            case DataTypes.BOOLEAN:
906 1107
                return 1;
907 1108
            case DataTypes.BYTE:
......
922 1123
    }
923 1124

  
924 1125
    private int getDefaultPrecisionOfType(int dataType) {
925
        switch(dataType) {
1126
        switch (dataType) {
926 1127
            case DataTypes.FLOAT:
927 1128
                return 6;
928 1129
            case DataTypes.DOUBLE:
......
934 1135

  
935 1136
    private void doCheckSizeAndPrecision() {
936 1137
        Integer size = this.pickerSize.get();
937
        if( size == null ) {
1138
        if (size == null) {
938 1139
            return;
939 1140
        }
940 1141
        int maxsize = this.getMaxSizeOfType((int) ListElement.getSelected(cboFieldType));
941
        if( size<1 || (maxsize>0 && size>maxsize) ) {
1142
        if (size < 1 || (maxsize > 0 && size > maxsize)) {
942 1143
            this.pickerSize.setWarning(true, "The size is not valid for the selected type");
943 1144
        } else {
944 1145
            this.pickerSize.setWarning(false);
945 1146
        }
946
        if( this.pickerPrecision.isEnabled() ) {
1147
        if (this.pickerPrecision.isEnabled()) {
947 1148
            Integer precision = this.pickerPrecision.get();
948
            if( precision == null ) {
949
                return ;
1149
            if (precision == null) {
1150
                return;
950 1151
            }
951
            if( precision < 0 ) {
1152
            if (precision < 0) {
952 1153
                this.pickerPrecision.setWarning(true, "the precision can not have a negative value");
953
            } else if( precision>size ) {
1154
            } else if (precision > size) {
954 1155
                this.pickerPrecision.setWarning(true, "the precision can not have a value greater than the size");
955 1156
            } else {
956 1157
                this.pickerPrecision.setWarning(false);
......
967 1168
    public String getName() {
968 1169
        return StringUtils.defaultIfBlank(this.txtFieldName.getText(), null);
969 1170
    }
970
    
971
    
1171

  
972 1172
}

Also available in: Unified diff