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

Last change on this file since 6084 was 6084, checked in by bastiK, 11 years ago

see #8902 - add missing @Override annotations (patch by shinigami)

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