source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java@ 5266

Last change on this file since 5266 was 5266, checked in by bastiK, 12 years ago

fixed majority of javadoc warnings by replacing "{@see" by "{@link"

  • Property svn:eol-style set to native
File size: 6.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.changeset;
3
4import java.beans.PropertyChangeListener;
5import java.beans.PropertyChangeSupport;
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.Collections;
9import java.util.Comparator;
10import java.util.HashSet;
11import java.util.List;
12import java.util.Set;
13
14import javax.swing.DefaultListSelectionModel;
15import javax.swing.table.AbstractTableModel;
16
17import org.openstreetmap.josm.data.osm.Changeset;
18import org.openstreetmap.josm.data.osm.ChangesetCache;
19import org.openstreetmap.josm.data.osm.ChangesetCacheEvent;
20import org.openstreetmap.josm.data.osm.ChangesetCacheListener;
21
22/**
23 * This is the model for the changeset cache manager dialog.
24 *
25 */
26public class ChangesetCacheManagerModel extends AbstractTableModel implements ChangesetCacheListener{
27
28 /** the name of the property for the currently selected changeset in the detail view */
29 public final static String CHANGESET_IN_DETAIL_VIEW_PROP = ChangesetCacheManagerModel.class.getName() + ".changesetInDetailView";
30
31 private final ArrayList<Changeset> data = new ArrayList<Changeset>();
32 private DefaultListSelectionModel selectionModel;
33 private Changeset changesetInDetailView;
34 private final PropertyChangeSupport support = new PropertyChangeSupport(this);
35
36 public ChangesetCacheManagerModel(DefaultListSelectionModel selectionModel) {
37 this.selectionModel = selectionModel;
38 }
39
40 public void addPropertyChangeListener(PropertyChangeListener listener) {
41 support.addPropertyChangeListener(listener);
42 }
43
44 public void removePropertyChangeListener(PropertyChangeListener listener) {
45 support.removePropertyChangeListener(listener);
46 }
47
48 /**
49 * Sets the changeset currently displayed in the detail view. Fires a property change event
50 * for the property {@link #CHANGESET_IN_DETAIL_VIEW_PROP} if necessary.
51 *
52 * @param cs the changeset currently displayed in the detail view.
53 */
54 public void setChangesetInDetailView(Changeset cs) {
55 Changeset oldValue = changesetInDetailView;
56 changesetInDetailView = cs;
57 if (oldValue != cs) {
58 support.firePropertyChange(CHANGESET_IN_DETAIL_VIEW_PROP, oldValue, changesetInDetailView);
59 }
60 }
61
62 /**
63 * Replies true if there is at least one selected changeset
64 *
65 * @return true if there is at least one selected changeset
66 */
67 public boolean hasSelectedChangesets() {
68 return selectionModel.getMinSelectionIndex() >= 0;
69 }
70
71 /**
72 * Replies the list of selected changesets
73 *
74 * @return the list of selected changesets
75 */
76 public List<Changeset> getSelectedChangesets() {
77 ArrayList<Changeset> ret = new ArrayList<Changeset>();
78 for (int i =0; i< data.size();i++) {
79 Changeset cs = data.get(i);
80 if (selectionModel.isSelectedIndex(i)) {
81 ret.add(cs);
82 }
83 }
84 return ret;
85 }
86
87 /**
88 * Replies a set of ids of the selected changesets
89 *
90 * @return a set of ids of the selected changesets
91 */
92 public Set<Integer> getSelectedChangesetIds() {
93 Set<Integer> ret = new HashSet<Integer>();
94 for (Changeset cs: getSelectedChangesets()) {
95 ret.add(cs.getId());
96 }
97 return ret;
98 }
99
100 /**
101 * Selects the changesets in <code>selected</code>.
102 *
103 * @param selected the collection of changesets to select. Ignored if empty.
104 */
105 public void setSelectedChangesets(Collection<Changeset> selected) {
106 selectionModel.clearSelection();
107 if (selected == null || selected.isEmpty())
108 return;
109 for (Changeset cs: selected) {
110 int idx = data.indexOf(cs);
111 if (idx >= 0) {
112 selectionModel.addSelectionInterval(idx,idx);
113 }
114 }
115 }
116
117 /**
118 * Selects the changeset displayed at row <code>row</code>
119 *
120 * @param row the row. Ignored if < 0 or >= {@link #getRowCount()}
121 */
122 public void setSelectedByIdx(int row) {
123 if (row < 0 || row >= getRowCount()) return;
124 selectionModel.setSelectionInterval(row, row);
125 }
126
127 public int getColumnCount() {
128 return 5;
129 }
130
131 public int getRowCount() {
132 return data.size();
133 }
134
135 public Object getValueAt(int row, int column) {
136 return data.get(row);
137 }
138
139 public void init() {
140 ChangesetCache cc = ChangesetCache.getInstance();
141 List<Changeset> selected = getSelectedChangesets();
142 data.clear();
143 data.addAll(cc.getChangesets());
144 sort();
145 fireTableDataChanged();
146 setSelectedChangesets(selected);
147
148 cc.addChangesetCacheListener(this);
149 }
150
151 public void tearDown() {
152 ChangesetCache.getInstance().removeChangesetCacheListener(this);
153 }
154
155 public DefaultListSelectionModel getSelectionModel() {
156 return selectionModel;
157 }
158
159 protected void sort() {
160 Collections.sort(
161 this.data,
162 new Comparator<Changeset>() {
163 public int compare(Changeset o1, Changeset o2) {
164 if (o1.getId() < o2.getId()) return 1;
165 if (o1.getId() == o2.getId()) return 0;
166 return -1;
167 }
168 }
169 );
170 }
171
172 /* ------------------------------------------------------------------------------ */
173 /* interface ChangesetCacheListener */
174 /* ------------------------------------------------------------------------------ */
175 public void changesetCacheUpdated(ChangesetCacheEvent event) {
176 List<Changeset> selected = getSelectedChangesets();
177 for (Changeset cs: event.getAddedChangesets()) {
178 data.add(cs);
179 }
180 for (Changeset cs: event.getRemovedChangesets()) {
181 data.remove(cs);
182 }
183 for (Changeset cs: event.getUpdatedChangesets()) {
184 int idx = data.indexOf(cs);
185 if (idx >= 0) {
186 Changeset mine = data.get(idx);
187 if (mine != cs) {
188 mine.mergeFrom(cs);
189 }
190 }
191 }
192 sort();
193 fireTableDataChanged();
194 setSelectedChangesets(selected);
195 }
196}
Note: See TracBrowser for help on using the repository browser.