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

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

fix some Sonar issues

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