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

Last change on this file since 5003 was 5003, checked in by xeen, 12 years ago

fix #3409

  • 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 public int compare(SaveLayerInfo o1, SaveLayerInfo o2) {
68 return o1.compareTo(o2);
69 }
70 }
71 );
72 fireTableDataChanged();
73 }
74
75 @Override
76 public int getRowCount() {
77 if (layerInfo == null) return 0;
78 return layerInfo.size();
79 }
80
81 @Override
82 public Object getValueAt(int row, int column) {
83 if (layerInfo == null) return null;
84 return layerInfo.get(row);
85 }
86
87 @Override
88 public boolean isCellEditable(int row, int column) {
89 return column == columnFilename || column == columnActions;
90 }
91
92 @Override
93 public void setValueAt(Object value, int row, int column) {
94 switch(column) {
95 case columnFilename:
96 this.layerInfo.get(row).setFile((File)value);
97 this.layerInfo.get(row).setDoSaveToFile(true);
98 break;
99 case columnActions:
100 boolean[] values = (boolean[]) value;
101 this.layerInfo.get(row).setDoUploadToServer(values[0]);
102 this.layerInfo.get(row).setDoSaveToFile(values[1]);
103 break;
104 }
105 fireTableDataChanged();
106 }
107
108 public List<SaveLayerInfo> getSafeLayerInfo() {
109 return this.layerInfo;
110 }
111
112 public List<SaveLayerInfo> getLayersWithoutFilesAndSaveRequest() {
113 List<SaveLayerInfo> ret = new ArrayList<SaveLayerInfo>();
114 for (SaveLayerInfo info: layerInfo) {
115 if (info.isDoSaveToFile() && info.getFile() == null) {
116 ret.add(info);
117 }
118 }
119 return ret;
120 }
121
122 public List<SaveLayerInfo> getLayersWithIllegalFilesAndSaveRequest() {
123 List<SaveLayerInfo> ret =new ArrayList<SaveLayerInfo>();
124 for (SaveLayerInfo info: layerInfo) {
125 if (info.isDoSaveToFile() && info.getFile() != null && info.getFile().exists() && !info.getFile().canWrite()) {
126 ret.add(info);
127 }
128 }
129 return ret;
130 }
131
132 public List<SaveLayerInfo> getLayersWithConflictsAndUploadRequest() {
133 List<SaveLayerInfo> ret =new ArrayList<SaveLayerInfo>();
134 for (SaveLayerInfo info: layerInfo) {
135 if (info.isDoUploadToServer() && !info.getLayer().getConflicts().isEmpty()) {
136 ret.add(info);
137 }
138 }
139 return ret;
140 }
141
142 public List<SaveLayerInfo> getLayersToUpload() {
143 List<SaveLayerInfo> ret =new ArrayList<SaveLayerInfo>();
144 for (SaveLayerInfo info: layerInfo) {
145 if (info.isDoUploadToServer()) {
146 ret.add(info);
147 }
148 }
149 return ret;
150 }
151
152 public List<SaveLayerInfo> getLayersToSave() {
153 List<SaveLayerInfo> ret =new ArrayList<SaveLayerInfo>();
154 for (SaveLayerInfo info: layerInfo) {
155 if (info.isDoSaveToFile()) {
156 ret.add(info);
157 }
158 }
159 return ret;
160 }
161
162 public void setUploadState(OsmDataLayer layer, UploadOrSaveState state) {
163 SaveLayerInfo info = getSaveLayerInfo(layer);
164 if (info != null) {
165 info.setUploadState(state);
166 }
167 fireTableDataChanged();
168 }
169
170 public void setSaveState(OsmDataLayer layer, UploadOrSaveState state) {
171 SaveLayerInfo info = getSaveLayerInfo(layer);
172 if (info != null) {
173 info.setSaveState(state);
174 }
175 fireTableDataChanged();
176 }
177
178 public SaveLayerInfo getSaveLayerInfo(OsmDataLayer layer) {
179 for (SaveLayerInfo info: this.layerInfo) {
180 if (info.getLayer() == layer)
181 return info;
182 }
183 return null;
184 }
185
186 public void resetSaveAndUploadState() {
187 for (SaveLayerInfo info: layerInfo) {
188 info.setSaveState(null);
189 info.setUploadState(null);
190 }
191 }
192
193 public boolean hasUnsavedData() {
194 for (SaveLayerInfo info: layerInfo) {
195 if (info.isDoUploadToServer() && ! UploadOrSaveState.OK.equals(info.getUploadState()))
196 return true;
197 if (info.isDoSaveToFile() && ! UploadOrSaveState.OK.equals(info.getSaveState()))
198 return true;
199 }
200 return false;
201 }
202
203 public int getNumCancel() {
204 int ret = 0;
205 for (SaveLayerInfo info: layerInfo) {
206 if (UploadOrSaveState.CANCELED.equals(info.getSaveState())
207 || UploadOrSaveState.CANCELED.equals(info.getUploadState())) {
208 ret++;
209 }
210 }
211 return ret;
212 }
213
214 public int getNumFailed() {
215 int ret = 0;
216 for (SaveLayerInfo info: layerInfo) {
217 if (UploadOrSaveState.FAILED.equals(info.getSaveState())
218 || UploadOrSaveState.FAILED.equals(info.getUploadState())) {
219 ret++;
220 }
221 }
222 return ret;
223 }
224}
Note: See TracBrowser for help on using the repository browser.