Revision 42806 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/featuretable/table/DefaultFeatureTableModel.java

View differences:

DefaultFeatureTableModel.java
34 34
import java.util.List;
35 35
import java.util.Locale;
36 36
import java.util.Map;
37

  
37 38
import javax.swing.SwingUtilities;
38 39
import javax.swing.Timer;
39

  
40 40
import javax.swing.event.TableModelEvent;
41 41
import javax.swing.table.AbstractTableModel;
42 42

  
43
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
45

  
43 46
import org.gvsig.fmap.dal.DataTypes;
44 47
import org.gvsig.fmap.dal.exception.DataException;
45 48
import org.gvsig.fmap.dal.feature.EditableFeature;
......
54 57
import org.gvsig.fmap.dal.feature.FeatureType;
55 58
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
56 59
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
60
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.GetFeatureAtException;
57 61
import org.gvsig.tools.exception.BaseException;
58 62
import org.gvsig.tools.observer.ComplexNotification;
59 63
import org.gvsig.tools.observer.ComplexObserver;
60 64
import org.gvsig.tools.observer.Observable;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63 65

  
64 66
public class DefaultFeatureTableModel extends AbstractTableModel implements org.gvsig.fmap.dal.swing.FeatureTableModel,  ComplexObserver  {
65 67

  
66 68
    private static final long serialVersionUID = -8223987814719746492L;
67
    
69

  
68 70
    private static final Logger logger = LoggerFactory.getLogger(DefaultFeatureTableModel.class);
69 71

  
70 72
    private List<String> columnNames;
......
79 81

  
80 82
    private Map<String,String> patterns = null;
81 83

  
82
    private Locale localeOfData;    
84
    private Locale localeOfData;
83 85

  
84 86
    private final FeaturePagingHelper featurePager;
85 87

  
......
87 89
    private EditableFeature editableFeature;
88 90

  
89 91
    private boolean selectionLocked=false;
90
    
92

  
91 93
    private final DelayAction delayAction = new DelayAction();
92 94

  
93 95

  
......
99 101

  
100 102
    private void initialize() {
101 103
        this.getFeatureStore().addObserver(this);
102
        
104

  
103 105
        int columns = this.getOriginalColumnCount();
104 106

  
105 107
        // Initilize visible columns
......
116 118
            }
117 119
        }
118 120
        visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
119
        
121

  
120 122
        // Initialize alias
121 123
        name2Alias = new HashMap<>(columns);
122 124
        name2AliasOriginal = new HashMap<>(columns);
......
127 129

  
128 130
    private void initializeFormatingPatterns() {
129 131
        int columns = this.getOriginalColumnCount();
130
        
132

  
131 133
        this.patterns = new HashMap<>();
132 134
        for (int i = 0; i < columns; i++) {
133 135
            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
......
155 157
                this.patterns.put(columnName,null);
156 158
            }
157 159
        }
158
        
160

  
159 161
    }
160
    
162

  
161 163
    private void updatePagerWithHiddenColums() {
162 164
        FeatureQuery query = this.getFeaturePager().getFeatureQuery();
163 165
        if (this.getFeaturePager().getFeatureStore().isEditing()) {
......
173 175
            logger.warn("Can't reload paging-helper.", ex);
174 176
        }
175 177
    }
176
    
178

  
177 179
    @Override
178 180
    public FeaturePagingHelper getFeaturePager() {
179 181
        return this.featurePager;
180 182
    }
181
        
183

  
182 184
    @Override
183 185
    public FeatureQuery getFeatureQuery() {
184 186
        return this.getFeaturePager().getFeatureQuery();
......
188 190
    public FeatureType getFeatureType() {
189 191
        return this.getFeaturePager().getFeatureType();
190 192
    }
191
    
193

  
192 194
    @Override
193 195
    public FeatureStore getFeatureStore() {
194 196
        return this.getFeaturePager().getFeatureStore();
......
213 215
    @Override
214 216
    public Class<?> getColumnClass(int columnIndex) {
215 217
        int originalIndex = getOriginalColumnIndex(columnIndex);
216
        
218

  
217 219
        // Return the class of the FeatureAttributeDescriptor for the value
218 220
        FeatureAttributeDescriptor attributeDesc = this.getInternalColumnDescriptor(originalIndex);
219 221
        if (attributeDesc == null) {
......
228 230
        int originalIndex = getOriginalColumnIndex(columnIndex);
229 231
        return this.getInternalColumnDescriptor(originalIndex);
230 232
    }
231
    
233

  
232 234
    protected FeatureAttributeDescriptor getInternalColumnDescriptor(int columnIndex) {
233 235
        FeatureType featureType = getFeatureType();
234 236
        if( featureType == null ) {
......
265 267
        // Check if there is a new column name
266 268
        List<String> newColumns = new ArrayList<>();
267 269
        List<String> renamedColumnsNewName = new ArrayList<>();
268
        
270

  
269 271
        Iterator<FeatureAttributeDescriptor> attrIter = featureType.iterator();
270 272
        FeatureAttributeDescriptor fad ;
271 273
        EditableFeatureAttributeDescriptor efad ;
272
        
274

  
273 275
        String colName;
274 276
        while (attrIter.hasNext()) {
275 277
            fad = attrIter.next();
276 278
            colName = fad.getName();
277 279
            if (!columnNames.contains(colName)) {
278 280
                if (fad instanceof EditableFeatureAttributeDescriptor) {
279
                    efad = (EditableFeatureAttributeDescriptor) fad; 
281
                    efad = (EditableFeatureAttributeDescriptor) fad;
280 282
                    /*
281 283
                     * If editable att descriptor,
282 284
                     * check original name
......
343 345
        name2Alias.keySet().retainAll(columnNames);
344 346
        name2AliasOriginal.keySet().retainAll(columnNames);
345 347

  
346
        initializeFormatingPatterns();    
347
        
348
        initializeFormatingPatterns();
349

  
348 350
        getFeatureQuery().setFeatureType(featureType);
349 351
        reloadFeatures();
350 352
        //Selection must be locked to avoid losing it when the table is refreshed
......
357 359
        }finally{
358 360
            //The locked selection is unlocked.
359 361
            selectionLocked=false;
360
        }        
362
        }
361 363

  
362 364
    }
363 365

  
......
368 370
            throw new FeaturesDataReloadException(ex);
369 371
        }
370 372
    }
371
    
373

  
372 374
    /**
373 375
     * keeps order of first parameter
374
     * 
376
     *
375 377
     * @param lista
376 378
     * @param listb
377 379
     * @return
378 380
     */
379 381
    private List<String> intersectKeepOrder(List<String> lista, List<String> listb) {
380
        
382

  
381 383
        List<String> resp = new ArrayList<>();
382 384
        resp.addAll(lista);
383 385
        resp.retainAll(listb);
......
386 388

  
387 389
    public void setVisibleColumns(List<String> names) {
388 390
        // Recreate the visible column names list
389
        // to maintain the original order        
391
        // to maintain the original order
390 392
        visibleColumnNames = new ArrayList<>(names.size());
391 393
        for (int i = 0; i < columnNames.size(); i++) {
392 394
            String columnName = columnNames.get(i);
......
401 403
    protected String[] getHiddenColumnNames() {
402 404
        List<String> hiddenColumns = new ArrayList<String>();
403 405
        hiddenColumns.addAll(columnNames);
404
        
406

  
405 407
        for (int i = 0; i < visibleColumnNames.size(); i++) {
406 408
            String columnName = visibleColumnNames.get(i);
407 409
            hiddenColumns.remove(columnName);
......
411 413
        }
412 414
        return (String[]) hiddenColumns.toArray(new String[hiddenColumns.size()]);
413 415
    }
414
        
416

  
415 417
    /**
416 418
     * Changes all columns to be visible.
417 419
     */
......
482 484
        Feature feature = getFeatureAt(rowIndex);
483 485
        return feature == null ? null : getFeatureValue(feature, columnIndex);
484 486
    }
485
    
487

  
486 488
    @Override
487 489
    public Feature getFeatureAt(int rowIndex) {
488 490
        try {
......
490 492
        } catch (BaseException ex) {
491 493
            throw new GetFeatureAtException(rowIndex, ex);
492 494
        }
493
    }    
494
    
495
    }
496

  
495 497
    protected Object getFeatureValue(Feature feature, int columnIndex) {
496 498
        int realColumnIndex = getOriginalColumnIndex(columnIndex);
497 499
        return feature.get(realColumnIndex);
......
504 506
        editableFeature.set(realColumnIndex, value);
505 507
        return editableFeature;
506 508
    }
507
    
508 509

  
510

  
509 511
    public void acceptChanges() {
510 512
    	visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
511 513
    	name2AliasOriginal = new HashMap<>(name2Alias);
512 514
    }
513
    
515

  
514 516
    public void cancelChanges() {
515 517
    	visibleColumnNames = new ArrayList<>(visibleColumnNamesOriginal);
516 518
    	name2Alias = new HashMap<>(name2AliasOriginal);
517 519
    	fireTableStructureChanged();
518 520
    }
519 521

  
520
    
522

  
521 523
    @Override
522 524
    public String getColumnFormattingPattern(int column) {
523 525
        String columnName = this.visibleColumnNames.get(column);
524 526
        return this.getColumnFormattingPattern(columnName);
525 527
    }
526
    
528

  
527 529
    @Override
528 530
    public String getColumnFormattingPattern(String columnName) {
529 531
        String pattern = this.patterns.get(columnName);
530 532
        return pattern;
531 533
    }
532
    
534

  
533 535
    @Override
534 536
    public void setColumnFormattingPattern(String columnName, String pattern) {
535 537
        this.patterns.put(columnName,pattern);
536 538
    }
537
    
539

  
538 540
    @Override
539 541
    public Locale getLocaleOfData() {
540 542
        return this.localeOfData;
541 543
    }
542
    
544

  
543 545
    @Override
544 546
    public void setLocaleOfData(Locale locale) {
545 547
        this.localeOfData = locale;
546 548
    }
547
    
549

  
548 550
    public boolean isSelectionLocked() {
549 551
        return selectionLocked;
550
    }    
552
    }
551 553

  
552 554
    @Override
553 555
    public boolean isSelectionUp() {
554 556
        return this.getFeaturePager().isSelectionUp();
555
    }    
557
    }
556 558

  
557 559
    @Override
558 560
    public void setSelectionUp(boolean selectionUp) {
559 561
        this.getFeaturePager().setSelectionUp(selectionUp);
560 562
        fireTableChanged(new TableModelEvent(this, 0, getRowCount() - 1));
561 563
    }
562
    
564

  
563 565
    private class DelayAction extends Timer implements ActionListener, Runnable {
564 566
        private static final int STATE_NONE = 0;
565 567
        private static final int STATE_NEED_RELOADALL = 1;
......
569 571
        private static final int STATE_NEED_RELOAD_FEATURE_TYPE = 16;
570 572
        private static final int STATE_NEED_SELECTION_UP = 32;
571 573
        private static final int STATE_NEED_RELOAD_ALL_FEATURES=64;
572
        
574

  
573 575
        private static final long serialVersionUID = -5692569125344166705L;
574 576

  
575 577
        private int state = STATE_NONE;
......
856 858
            throw new RuntimeException("Can't get selection of the FeatureTableModel",ex);
857 859
        }
858 860
    }
859
    
860
    
861

  
862

  
861 863
}

Also available in: Unified diff