source: josm/trunk/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java@ 9078

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

sonar - Immutable Field

  • Property svn:eol-style set to native
File size: 7.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import java.beans.PropertyChangeListener;
5import java.beans.PropertyChangeSupport;
6import java.io.File;
7import java.util.ArrayList;
8import java.util.Collections;
9import java.util.Comparator;
10import java.util.List;
11
12import javax.swing.table.DefaultTableModel;
13
14import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16
17public class SaveLayersModel extends DefaultTableModel {
18 public static final String MODE_PROP = SaveLayerInfo.class.getName() + ".mode";
19
20 public enum Mode {
21 EDITING_DATA,
22 UPLOADING_AND_SAVING
23 }
24
25 private transient List<SaveLayerInfo> layerInfo;
26 private Mode mode;
27 private final PropertyChangeSupport support;
28
29 // keep in sync with how the columns are ordered in SaveLayersTableColumnModel#build
30 private static final int columnFilename = 0;
31 private static final int columnActions = 2;
32
33 /**
34 * Constructs a new {@code SaveLayersModel}.
35 */
36 public SaveLayersModel() {
37 mode = Mode.EDITING_DATA;
38 support = new PropertyChangeSupport(this);
39 }
40
41 public void addPropertyChangeListener(PropertyChangeListener l) {
42 support.addPropertyChangeListener(l);
43 }
44
45 public void removePropertyChangeListener(PropertyChangeListener l) {
46 support.removePropertyChangeListener(l);
47 }
48
49 protected void fireModeChanged(Mode oldValue, Mode newValue) {
50 support.firePropertyChange(MODE_PROP, oldValue, newValue);
51 }
52
53 public void setMode(Mode newValue) {
54 Mode oldValue = this.mode;
55 this.mode = newValue;
56 fireModeChanged(oldValue, newValue);
57 }
58
59 public Mode getMode() {
60 return mode;
61 }
62
63 /**
64 * Populates the model with given modifiable layers.
65 * @param layers The layers to use to populate this model
66 * @since 7358
67 */
68 public void populate(List<? extends AbstractModifiableLayer> layers) {
69 layerInfo = new ArrayList<>();
70 if (layers == null) return;
71 for (AbstractModifiableLayer layer: layers) {
72 layerInfo.add(new SaveLayerInfo(layer));
73 }
74 Collections.sort(
75 layerInfo,
76 new Comparator<SaveLayerInfo>() {
77 @Override
78 public int compare(SaveLayerInfo o1, SaveLayerInfo o2) {
79 return o1.compareTo(o2);
80 }
81 }
82 );
83 fireTableDataChanged();
84 }
85
86 @Override
87 public int getRowCount() {
88 if (layerInfo == null) return 0;
89 return layerInfo.size();
90 }
91
92 @Override
93 public Object getValueAt(int row, int column) {
94 if (layerInfo == null) return null;
95 return layerInfo.get(row);
96 }
97
98 @Override
99 public boolean isCellEditable(int row, int column) {
100 return column == columnFilename || column == columnActions;
101 }
102
103 @Override
104 public void setValueAt(Object value, int row, int column) {
105 switch(column) {
106 case columnFilename:
107 this.layerInfo.get(row).setFile((File) value);
108 this.layerInfo.get(row).setDoSaveToFile(true);
109 break;
110 case columnActions:
111 boolean[] values = (boolean[]) value;
112 this.layerInfo.get(row).setDoUploadToServer(values[0]);
113 this.layerInfo.get(row).setDoSaveToFile(values[1]);
114 break;
115 }
116 fireTableDataChanged();
117 }
118
119 public List<SaveLayerInfo> getSafeLayerInfo() {
120 return this.layerInfo;
121 }
122
123 public List<SaveLayerInfo> getLayersWithoutFilesAndSaveRequest() {
124 List<SaveLayerInfo> ret = new ArrayList<>();
125 for (SaveLayerInfo info: layerInfo) {
126 if (info.isDoSaveToFile() && info.getFile() == null) {
127 ret.add(info);
128 }
129 }
130 return ret;
131 }
132
133 public List<SaveLayerInfo> getLayersWithIllegalFilesAndSaveRequest() {
134 List<SaveLayerInfo> ret = new ArrayList<>();
135 for (SaveLayerInfo info: layerInfo) {
136 if (info.isDoSaveToFile() && info.getFile() != null && info.getFile().exists() && !info.getFile().canWrite()) {
137 ret.add(info);
138 }
139 }
140 return ret;
141 }
142
143 public List<SaveLayerInfo> getLayersWithConflictsAndUploadRequest() {
144 List<SaveLayerInfo> ret = new ArrayList<>();
145 for (SaveLayerInfo info: layerInfo) {
146 AbstractModifiableLayer l = info.getLayer();
147 if (info.isDoUploadToServer() && l instanceof OsmDataLayer && !((OsmDataLayer) l).getConflicts().isEmpty()) {
148 ret.add(info);
149 }
150 }
151 return ret;
152 }
153
154 public List<SaveLayerInfo> getLayersToUpload() {
155 List<SaveLayerInfo> ret = new ArrayList<>();
156 for (SaveLayerInfo info: layerInfo) {
157 if (info.isDoUploadToServer()) {
158 ret.add(info);
159 }
160 }
161 return ret;
162 }
163
164 public List<SaveLayerInfo> getLayersToSave() {
165 List<SaveLayerInfo> ret = new ArrayList<>();
166 for (SaveLayerInfo info: layerInfo) {
167 if (info.isDoSaveToFile()) {
168 ret.add(info);
169 }
170 }
171 return ret;
172 }
173
174 public void setUploadState(AbstractModifiableLayer layer, UploadOrSaveState state) {
175 SaveLayerInfo info = getSaveLayerInfo(layer);
176 if (info != null) {
177 info.setUploadState(state);
178 }
179 fireTableDataChanged();
180 }
181
182 public void setSaveState(AbstractModifiableLayer layer, UploadOrSaveState state) {
183 SaveLayerInfo info = getSaveLayerInfo(layer);
184 if (info != null) {
185 info.setSaveState(state);
186 }
187 fireTableDataChanged();
188 }
189
190 public SaveLayerInfo getSaveLayerInfo(AbstractModifiableLayer layer) {
191 for (SaveLayerInfo info: this.layerInfo) {
192 if (info.getLayer() == layer)
193 return info;
194 }
195 return null;
196 }
197
198 public void resetSaveAndUploadState() {
199 for (SaveLayerInfo info: layerInfo) {
200 info.setSaveState(null);
201 info.setUploadState(null);
202 }
203 }
204
205 public boolean hasUnsavedData() {
206 for (SaveLayerInfo info: layerInfo) {
207 if (info.isDoUploadToServer() && !UploadOrSaveState.OK.equals(info.getUploadState()))
208 return true;
209 if (info.isDoSaveToFile() && !UploadOrSaveState.OK.equals(info.getSaveState()))
210 return true;
211 }
212 return false;
213 }
214
215 public int getNumCancel() {
216 int ret = 0;
217 for (SaveLayerInfo info: layerInfo) {
218 if (UploadOrSaveState.CANCELED.equals(info.getSaveState())
219 || UploadOrSaveState.CANCELED.equals(info.getUploadState())) {
220 ret++;
221 }
222 }
223 return ret;
224 }
225
226 public int getNumFailed() {
227 int ret = 0;
228 for (SaveLayerInfo info: layerInfo) {
229 if (UploadOrSaveState.FAILED.equals(info.getSaveState())
230 || UploadOrSaveState.FAILED.equals(info.getUploadState())) {
231 ret++;
232 }
233 }
234 return ret;
235 }
236}
Note: See TracBrowser for help on using the repository browser.