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

Last change on this file since 4932 was 4310, checked in by stoecker, 13 years ago

fix #6680, fix #6677 - i18n issues

  • Property svn:eol-style set to native
File size: 6.5 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().exists() && !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 public void setUploadState(OsmDataLayer layer, UploadOrSaveState state) {
156 SaveLayerInfo info = getSaveLayerInfo(layer);
157 if (info != null) {
158 info.setUploadState(state);
159 }
160 fireTableDataChanged();
161 }
162
163 public void setSaveState(OsmDataLayer layer, UploadOrSaveState state) {
164 SaveLayerInfo info = getSaveLayerInfo(layer);
165 if (info != null) {
166 info.setSaveState(state);
167 }
168 fireTableDataChanged();
169 }
170
171 public SaveLayerInfo getSaveLayerInfo(OsmDataLayer layer) {
172 for (SaveLayerInfo info: this.layerInfo) {
173 if (info.getLayer() == layer)
174 return info;
175 }
176 return null;
177 }
178
179 public void resetSaveAndUploadState() {
180 for (SaveLayerInfo info: layerInfo) {
181 info.setSaveState(null);
182 info.setUploadState(null);
183 }
184 }
185
186 public boolean hasUnsavedData() {
187 for (SaveLayerInfo info: layerInfo) {
188 if (info.isDoUploadToServer() && ! UploadOrSaveState.OK.equals(info.getUploadState()))
189 return true;
190 if (info.isDoSaveToFile() && ! UploadOrSaveState.OK.equals(info.getSaveState()))
191 return true;
192 }
193 return false;
194 }
195
196 public int getNumCancel() {
197 int ret = 0;
198 for (SaveLayerInfo info: layerInfo) {
199 if (UploadOrSaveState.CANCELED.equals(info.getSaveState())
200 || UploadOrSaveState.CANCELED.equals(info.getUploadState())) {
201 ret++;
202 }
203 }
204 return ret;
205 }
206
207 public int getNumFailed() {
208 int ret = 0;
209 for (SaveLayerInfo info: layerInfo) {
210 if (UploadOrSaveState.FAILED.equals(info.getSaveState())
211 || UploadOrSaveState.FAILED.equals(info.getUploadState())) {
212 ret++;
213 }
214 }
215 return ret;
216 }
217
218}
Note: See TracBrowser for help on using the repository browser.