Revision 42806

View differences:

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/FeatureTable.java
38 38
import javax.swing.table.TableColumn;
39 39
import javax.swing.table.TableColumnModel;
40 40
import javax.swing.table.TableModel;
41

  
41 42
import org.gvsig.fmap.dal.feature.Feature;
42 43
import org.gvsig.fmap.dal.feature.FeatureStoreNotification;
43 44
import org.gvsig.fmap.dal.swing.FeatureTableModel;
44
import org.gvsig.fmap.geom.Geometry;
45 45
import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
46
import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.FormattedCellEditor;
47
import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.GeometryWKTCellEditor;
46 48
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.FeatureCellRenderer;
47
import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.FormattedCellEditor;
48 49
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.FormattedCellRenderer;
49
import org.gvsig.fmap.dal.swing.impl.featuretable.table.editors.GeometryWKTCellEditor;
50
import org.gvsig.fmap.dal.swing.impl.featuretable.table.GeometryWKTCellRenderer;
50
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.GeometryWKTCellRenderer;
51 51
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.JToggleButtonHeaderCellRenderer;
52
import org.gvsig.fmap.geom.Geometry;
52 53
import org.gvsig.tools.observer.Observable;
53 54
import org.gvsig.tools.observer.Observer;
54 55

  
......
73 74
    public void addColumnSelectionListener(ActionListener listener) {
74 75
       this.columnSelectionListeners.add(listener);
75 76
    }
76
    
77

  
77 78
    public void fireColumnSelection(ActionEvent e) {
78 79
        for( ActionListener listener : this.columnSelectionListeners ) {
79 80
            try {
80 81
                listener.actionPerformed(e);
81 82
            } catch(Exception ex) {
82
                
83

  
83 84
            }
84 85
        }
85 86
    }
......
191 192
        }
192 193
        this.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
193 194
    }
194
    
195

  
195 196
    @Override
196 197
    public void setModel(TableModel dataModel) {
197 198
        super.setModel(dataModel);
198 199
    }
199
    
200

  
200 201
    @Override
201 202
    public int getSelectedColumnCount() {
202 203
        return headerCellRenderer.getSelectedColumns().length;
......
206 207
    public int[] getSelectedColumns() {
207 208
        return headerCellRenderer.getSelectedColumns();
208 209
    }
209
    
210

  
210 211
    @Override
211 212
    public void tableChanged(TableModelEvent e) {
212 213
        // Clear the header selection
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/renders/GetFeatureAtException.java
25 25
 * AUTHORS (In addition to CIT):
26 26
 * 2008 {DiSiD Technologies}  {{Task}}
27 27
 */
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table;
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
29 29

  
30 30
import java.util.Collections;
31 31
import java.util.Map;
......
35 35
/**
36 36
 * Exception thrown when there is an error while getting a Feature in a
37 37
 * position.
38
 * 
38
 *
39 39
 * @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a>
40 40
 */
41 41
public class GetFeatureAtException extends BaseRuntimeException {
......
51 51

  
52 52
    /**
53 53
     * Creates a new Exception when getting a Feature.
54
     * 
54
     *
55 55
     * @param rowIndex
56 56
     *            the position of the Feature
57 57
     */
......
62 62

  
63 63
    /**
64 64
     * Creates a new Exception when getting a Feature.
65
     * 
65
     *
66 66
     * @param rowIndex
67 67
     *            the position of the Feature
68 68
     * @param cause
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/renders/GeometryCellRenderer.java
25 25
 * AUTHORS (In addition to CIT):
26 26
 * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
27 27
 */
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table;
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
29 29

  
30 30
import javax.swing.table.DefaultTableCellRenderer;
31 31

  
......
35 35

  
36 36
/**
37 37
 * Simple renderer for cells of type {@link Geometry} .
38
 * 
38
 *
39 39
 * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
40 40
 */
41 41
public class GeometryCellRenderer extends DefaultTableCellRenderer {
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/renders/GeometryToWKTException.java
25 25
 * AUTHORS (In addition to CIT):
26 26
 * 2008 {DiSiD Technologies}  {{Task}}
27 27
 */
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table;
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
29 29

  
30 30
import org.gvsig.tools.exception.BaseRuntimeException;
31 31

  
32 32
/**
33 33
 * Exception thrown when there is an error while converting a Geometry to WKT
34 34
 * into a table cell.
35
 * 
35
 *
36 36
 * @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a>
37 37
 */
38 38
public class GeometryToWKTException extends BaseRuntimeException {
......
46 46

  
47 47
    /**
48 48
     * Creates a new Exception when getting a Geometry cell as WKT.
49
     * 
49
     *
50 50
     */
51 51
    public GeometryToWKTException() {
52 52
        super(MESSAGE, KEY, serialVersionUID);
......
54 54

  
55 55
    /**
56 56
     * Creates a new Exception when getting a Geometry cell as WKT.
57
     * 
57
     *
58 58
     * @param cause
59 59
     *            the original Throwable
60 60
     */
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/renders/GeometryWKTCellRenderer.java
25 25
 * AUTHORS (In addition to CIT):
26 26
 * 2008 {DiSiD Technologies}  {Create a JTable TableModel for a FeatureCollection}
27 27
 */
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table;
28
package org.gvsig.fmap.dal.swing.impl.featuretable.table.renders;
29 29

  
30 30
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.TextAreaCellRenderer;
31 31
import org.gvsig.fmap.geom.Geometry;
......
34 34

  
35 35
/**
36 36
 * Renderer for cells of type {@link Geometry}, showing it in WKT format.
37
 * 
37
 *
38 38
 * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
39 39
 */
40 40
public class GeometryWKTCellRenderer extends TextAreaCellRenderer {
41 41

  
42 42
    private static final Logger logger = LoggerFactory.getLogger(GeometryWKTCellRenderer.class);
43
            
43

  
44 44
    private static final long serialVersionUID = -2470239399517077869L;
45
    
45

  
46 46
    public static final int DEFAULT_MAX_WKT_LENGTH = 800;
47
    
47

  
48 48
    public static final int DEFAULT_MAX_ROW_HEIGHT = 80;
49 49

  
50 50
    /**
......
57 57

  
58 58
    /**
59 59
     * Creates a new GeometryWKTCellRenderer.
60
     * 
60
     *
61 61
     * @param maxWKTLength
62 62
     *            the maximum WTK length to be rendered.
63 63
     * @param maxRowHeight
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
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
}
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/editors/GeometryWKTCellEditor.java
35 35
import javax.swing.DefaultCellEditor;
36 36
import javax.swing.JOptionPane;
37 37
import javax.swing.JTable;
38

  
38 39
import org.apache.commons.lang3.StringUtils;
39
import org.gvsig.fmap.dal.swing.impl.featuretable.table.GeometryToWKTException;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
40 42

  
43
import org.gvsig.fmap.dal.swing.impl.featuretable.table.renders.GeometryToWKTException;
41 44
import org.gvsig.fmap.geom.Geometry;
42 45
import org.gvsig.fmap.geom.GeometryLocator;
43 46
import org.gvsig.fmap.geom.GeometryManager;
44 47
import org.gvsig.i18n.Messages;
45
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
47 48

  
48 49
/**
49 50
 * Editor for cells of type Geometry in WKT format.
......
51 52
 * If the WKT to represent a Geometry is too big, editing is not allowed, as the
52 53
 * rendering of that big text is too slow.
53 54
 * </p>
54
 * 
55
 *
55 56
 * @author <a href="mailto:cordin@disid.com">C�sar Ordi�ana</a>
56 57
 */
57 58
public class GeometryWKTCellEditor extends TextAreaCellEditor {
......
60 61
    public static final int DEFAULT_MAX_WKT_LENGTH = 10000;
61 62

  
62 63
    private static final long serialVersionUID = -2296004227902843851L;
63
    
64

  
64 65
    private int maxRowHeight;
65 66

  
66 67
    /**
......
72 73

  
73 74
    /**
74 75
     * Creates a new editor for Geometries in WKT format.
75
     * 
76
     *
76 77
     * @param maxWKTLength
77 78
     *            the maximum WTK length allowed to be edited.
78 79
     * @param maxRowHeight

Also available in: Unified diff