Revision 44505 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/DefaultFeatureTypePanel.java

View differences:

DefaultFeatureTypePanel.java
5 5
import java.awt.Dimension;
6 6
import java.awt.event.ActionEvent;
7 7
import java.awt.event.ActionListener;
8
import java.util.Date;
9 8
import java.util.Objects;
10 9
import javax.swing.JComponent;
11 10
import javax.swing.JOptionPane;
......
15 14
import javax.swing.event.TableModelEvent;
16 15
import javax.swing.table.AbstractTableModel;
17 16
import org.apache.commons.lang3.StringUtils;
17
import org.gvsig.configurableactions.ConfigurableActionsMamager;
18
import org.gvsig.expressionevaluator.ExpressionUtils;
18 19
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
19 20
import org.gvsig.fmap.dal.feature.EditableFeatureType;
20 21
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
......
28 29
import org.gvsig.tools.swing.api.ToolsSwingLocator;
29 30
import org.gvsig.tools.swing.api.ToolsSwingManager;
30 31
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
32
import org.gvsig.tools.util.ToolsUtilLocator;
31 33
import org.slf4j.Logger;
32 34
import org.slf4j.LoggerFactory;
33 35

  
......
42 44

  
43 45
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureTypePanel.class);
44 46
    private FeatureType originalFeatureType = null;
45
    
47

  
46 48
    private class FeatureTypeTableModel extends AbstractTableModel {
47 49

  
48 50
        private final FeatureType featureType;
......
142 144
    }
143 145
    
144 146
    private DefaultFeatureTypeAttributePanel descriptorPanel;
145
    private FeatureType featureType;
146
    private boolean editable;
147
    private EditableFeatureType featureType;
148
    private int mode;
147 149
    private FeatureTypeTableModel tableModel;
148 150
    private FeatureStore store;
149 151
    private int currentRow;
......
152 154
    private ChangeListenerHelper changeListenerHelper;
153 155
        
154 156
    public DefaultFeatureTypePanel() {
155
        this.editable = true;
157
        this.mode = MODE_SHOW_ONLY;
156 158
        this.currentRow = -1;
157 159
        this.fieldSelectionAllowed = true;
158 160
        this.initComponents();
......
161 163
    @SuppressWarnings("Convert2Lambda")
162 164
    private void initComponents() {
163 165
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
166
        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();
167
        JComponent c = cfgActionsManager.getConfigurableActionsComponent(CONFIGURABLE_PANEL_ID, this);
168
        this.pnlCfgActions.setLayout(new BorderLayout(0,0));
169
        this.pnlCfgActions.add(c, BorderLayout.CENTER);
164 170

  
165 171
        this.changeListenerHelper = swingManager.createChangeListenerHelper();
166 172
        
......
288 294
        this.descriptorPanel.put(descriptor);
289 295
        updateButtonState();
290 296
        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
291
            this.btnFormFieldModify.setEnabled(this.editable);
297
            this.btnFormFieldModify.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
292 298
        } else {
293 299
            this.btnFormFieldModify.setEnabled(false);
294 300
        }
......
296 302
    
297 303
    private void updateButtonState() {
298 304
        this.descriptorPanel.setEnabled(true);
299
        this.descriptorPanel.setEditable(false);
305
        this.descriptorPanel.setMode(MODE_SHOW_ONLY);
300 306
        this.btnFormFieldAccept.setEnabled(false);
301 307
        this.btnFormFieldDiscard.setEnabled(false);
302
        this.btnFormFieldModify.setEnabled(this.editable);
303
        this.btnNew.setEnabled(this.editable);
304
        this.btnDelete.setEnabled(this.editable);
308
        
309
        switch(this.mode) {
310
            case MODE_EDIT_ALL:
311
                this.btnDelete.setEnabled(true);
312
                this.btnFormFieldModify.setEnabled(true);
313
                this.btnNew.setEnabled(true);
314
                this.tagsController.setEditable(true);
315
                this.txtLabel.setEditable(true);
316
                this.txtDescription.setEditable(true);
317
                break;
318
            case MODE_EDIT_ONLY_METADATA:
319
                this.btnDelete.setEnabled(this.descriptorPanel.isVirtualField());
320
                this.btnFormFieldModify.setEnabled(true);
321
                this.btnNew.setEnabled(true);
322
                this.tagsController.setEditable(true);
323
                this.txtLabel.setEditable(true);
324
                this.txtDescription.setEditable(true);
325
                break;
326
            case MODE_SHOW_ONLY:
327
                this.btnDelete.setEnabled(false);
328
                this.btnFormFieldModify.setEnabled(false);
329
                this.btnNew.setEnabled(false);
330
                this.tagsController.setEditable(false);
331
                this.txtLabel.setEditable(false);
332
                this.txtDescription.setEditable(false);
333
                break;
334
        }
305 335
    }
306 336
    
307 337
    private void doFormFieldModify() {
......
311 341
        }
312 342
        FeatureAttributeDescriptor descriptor = this.featureType.getAttributeDescriptor(row);
313 343
        this.descriptorPanel.put(descriptor);
314
        this.descriptorPanel.setEnabled(true);
315
        this.btnFormFieldAccept.setEnabled(this.editable);
316
        this.btnFormFieldDiscard.setEnabled(this.editable);
344
        this.descriptorPanel.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
345
        this.btnFormFieldAccept.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
346
        this.btnFormFieldDiscard.setEnabled(this.mode==MODE_EDIT_ALL || this.mode==MODE_EDIT_ONLY_METADATA);
317 347
        this.btnFormFieldModify.setEnabled(false);
318 348
        this.btnNew.setEnabled(false);
319 349
        this.btnDelete.setEnabled(false);
320 350
        if( descriptor instanceof EditableFeatureAttributeDescriptor ) {
321
            this.descriptorPanel.setEditable(this.editable);
351
            this.descriptorPanel.setMode(this.mode);
322 352
        } else {
323
            this.descriptorPanel.setEditable(false);
353
            this.descriptorPanel.setMode(MODE_SHOW_ONLY);
324 354
        }
325 355
        this.fieldSelectionAllowed = false;
326 356
        this.changeListenerHelper.fireEvent();
......
382 412
    }
383 413

  
384 414
    @Override
385
    public void setEditable(boolean editable) {
386
        this.editable = editable;
387
        this.btnNew.setEnabled(editable);
388
        this.btnDelete.setEnabled(editable);
415
    public int getMode() {
416
        return this.mode;
417
    }
418
    
419
    @Override
420
    public void setMode(int mode) {
421
        this.mode = mode;
389 422
        updateButtonState();
390 423
    }
391 424

  
392 425
    @Override
393 426
    public EditableFeatureType fetch(EditableFeatureType type) {
394
        ((DynStruct_v2)type).setLabel(
395
                StringUtils.defaultIfBlank(this.txtLabel.getText(), null)
427
        if( type == null ) {
428
            type = (EditableFeatureType) this.featureType.getCopy();
429
        } else {
430
            type.removeAll();
431
            type.addAll(this.featureType);
432
        }
433
        type.setLabel(
434
            StringUtils.defaultIfBlank(this.txtLabel.getText(), null)
396 435
        );
397
        ((DynStruct_v2)type).setDescription(
398
                StringUtils.defaultIfBlank(this.txtDescription.getText(), null)
436
        type.setDescription(
437
            StringUtils.defaultIfBlank(this.txtDescription.getText(), null)
399 438
        );
400
        this.tagsController.fetch(((DynStruct_v2)type).getTags());
439
        this.tagsController.fetch(type.getTags());
401 440
        return type;
402 441
    }
403 442

  
404 443
    @Override
405 444
    public void put(FeatureType type) {
406
        this.featureType = type;
445
        this.featureType = null;
407 446
        this.originalFeatureType = null;
408 447
        if (type == null) {
409 448
            this.store = null;
......
413 452
                ftypeToCompare = type;
414 453
            }
415 454
            this.originalFeatureType = ftypeToCompare.getCopy();
455
            this.featureType = (EditableFeatureType) type.getCopy();
416 456
            // Nos quedamos una referencia para evitar que se destruya, ya que
417 457
            // el featureType se guarda solo una WeakReference.
418 458
            this.store = type.getStore();
......
425 465
            this.tagsController.set(((DynStruct_v2) type).getTags());
426 466
        }
427 467
        if( !(type instanceof EditableFeatureType) ) {
428
            this.setEditable(false);
468
            this.setMode(MODE_SHOW_ONLY);
429 469
        }
430 470
        this.tableModel = new FeatureTypeTableModel(type);
431 471
        this.tblFields.setModel(this.tableModel);
......
443 483
                DataTypes.STRING,
444 484
                50
445 485
        );
486
        if( this.mode == MODE_EDIT_ONLY_METADATA ) {
487
            descriptor.setFeatureAttributeEmulator(ExpressionUtils.createExpression("NULL"));
488
        }
446 489
        this.tableModel.fireUpdateEvent();
447 490
        int row = descriptor.getIndex();
448 491
        this.tblFields.getSelectionModel().addSelectionInterval(row,row);

Also available in: Unified diff