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

Last change on this file since 19050 was 19050, checked in by taylor.smock, 15 months ago

Revert most var changes from r19048, fix most new compile warnings and checkstyle issues

Also, document why various ErrorProne checks were originally disabled and fix
generic SonarLint issues.

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