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

Last change on this file since 12452 was 12452, checked in by bastiK, 7 years ago

see #14794 - javadoc for the josm.gui.io package

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