source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java@ 6316

Last change on this file since 6316 was 6316, checked in by Don-vip, 11 years ago

Sonar/FindBugs - Loose coupling

  • Property svn:eol-style set to native
File size: 3.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3import java.util.ArrayList;
4import java.util.Collection;
5import java.util.List;
6
7import javax.swing.table.AbstractTableModel;
8
9import org.openstreetmap.josm.Main;
10import org.openstreetmap.josm.data.SelectionChangedListener;
11import org.openstreetmap.josm.data.osm.DataSet;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.gui.MapView;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16import org.openstreetmap.josm.tools.CheckParameterUtil;
17
18public class SelectionTableModel extends AbstractTableModel implements SelectionChangedListener, MapView.LayerChangeListener{
19
20 /** this selection table model only displays selected primitives in this layer */
21 private OsmDataLayer layer;
22 private List<OsmPrimitive> cache;
23
24 /**
25 * constructor
26 *
27 * @param layer the data layer. Must not be null.
28 * @exception IllegalArgumentException thrown if layer is null
29 */
30 public SelectionTableModel(OsmDataLayer layer) throws IllegalArgumentException {
31 CheckParameterUtil.ensureParameterNotNull(layer, "layer");
32 this.layer = layer;
33 cache = new ArrayList<OsmPrimitive>();
34 populateSelectedPrimitives(layer);
35 }
36
37 public void register() {
38 DataSet.addSelectionListener(this);
39 MapView.addLayerChangeListener(this);
40 }
41
42 public void unregister() {
43 DataSet.removeSelectionListener(this);
44 MapView.removeLayerChangeListener(this);
45 }
46
47 @Override
48 public int getColumnCount() {
49 return 1;
50 }
51
52 @Override
53 public int getRowCount() {
54 if (Main.map.mapView.getEditLayer() != layer)
55 return 0;
56 return cache.size();
57 }
58
59 @Override
60 public Object getValueAt(int rowIndex, int columnIndex) {
61 return cache.get(rowIndex);
62 }
63
64 @Override
65 public void activeLayerChange(Layer oldLayer, Layer newLayer) {
66 if (oldLayer == layer) {
67 cache.clear();
68 }
69 if (newLayer == layer) {
70 cache.addAll(((OsmDataLayer)newLayer).data.getAllSelected());
71 }
72 fireTableDataChanged();
73 }
74
75 @Override
76 public void layerAdded(Layer newLayer) {
77 // do nothing
78 }
79
80 @Override
81 public void layerRemoved(Layer oldLayer) {
82 if (oldLayer == layer) {
83 unregister();
84 }
85 this.cache.clear();
86 fireTableDataChanged();
87 }
88
89 @Override
90 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
91 if (layer == Main.map.mapView.getEditLayer()) {
92 cache.clear();
93 cache.addAll(newSelection);
94 } else {
95 cache.clear();
96 }
97 fireTableDataChanged();
98 }
99
100 public List<OsmPrimitive> getSelection() {
101 return cache;
102 }
103
104 /**
105 * populates the model with the primitives currently selected in
106 * <code>layer</code>
107 *
108 * @param layer the data layer
109 */
110 protected void populateSelectedPrimitives(OsmDataLayer layer) {
111 selectionChanged(layer.data.getAllSelected());
112 }
113
114 /**
115 * Replies the primitive at row <code>row</code> in this model
116 *
117 * @param row the row
118 * @return the primitive at row <code>row</code> in this model
119 */
120 public OsmPrimitive getPrimitive(int row) {
121 return cache.get(row);
122 }
123}
Note: See TracBrowser for help on using the repository browser.