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

Last change on this file since 2025 was 2025, checked in by Gubaer, 15 years ago

new: improved dialog for uploading/saving modified layers on exit
new: improved dialog for uploading/saving modified layers if layers are deleted
new: new progress monitor which can delegate rendering to any Swing component
more setters/getters for properties in OSM data classes (fields are @deprecated); started to update references in the code base

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