source: josm/trunk/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java@ 11848

Last change on this file since 11848 was 11608, checked in by Don-vip, 7 years ago

fix #14402 - add blacklist for leisure area values to avoid false positives - improve globally the detection of keys/tags

  • Property svn:eol-style set to native
File size: 8.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5import static org.openstreetmap.josm.tools.I18n.trn;
6
7import java.awt.BorderLayout;
8import java.beans.PropertyChangeEvent;
9import java.beans.PropertyChangeListener;
10import java.util.Optional;
11
12import javax.swing.BorderFactory;
13import javax.swing.JLabel;
14import javax.swing.JPanel;
15import javax.swing.event.HyperlinkEvent;
16import javax.swing.event.HyperlinkListener;
17
18import org.openstreetmap.josm.data.osm.Changeset;
19import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
20import org.openstreetmap.josm.io.Capabilities;
21import org.openstreetmap.josm.io.OsmApi;
22import org.openstreetmap.josm.tools.ImageProvider;
23
24// FIXME this class should extend HtmlPanel instead (duplicated code in here)
25public class UploadParameterSummaryPanel extends JPanel implements HyperlinkListener, PropertyChangeListener {
26 private transient UploadStrategySpecification spec = new UploadStrategySpecification();
27 private int numObjects;
28 private JMultilineLabel jepMessage;
29 private JLabel lblWarning;
30
31 private transient Changeset selectedChangeset;
32 private boolean closeChangesetAfterNextUpload;
33 private transient ConfigurationParameterRequestHandler configHandler;
34
35 /**
36 * Constructs a new {@code UploadParameterSummaryPanel}.
37 */
38 public UploadParameterSummaryPanel() {
39 build();
40 updateSummary();
41 }
42
43 protected String buildChangesetSummary() {
44 StringBuilder msg = new StringBuilder(96);
45 if (selectedChangeset == null || selectedChangeset.isNew()) {
46 msg.append(tr("Objects are uploaded to a <strong>new changeset</strong>."));
47 } else {
48 msg.append(tr("Objects are uploaded to the <strong>open changeset</strong> {0} with upload comment ''{1}''.",
49 selectedChangeset.getId(),
50 Optional.ofNullable(selectedChangeset.get("comment")).orElse("")
51 ));
52 }
53 msg.append(' ');
54 if (closeChangesetAfterNextUpload) {
55 msg.append(tr("The changeset is going to be <strong>closed</strong> after this upload"));
56 } else {
57 msg.append(tr("The changeset is <strong>left open</strong> after this upload"));
58 }
59 msg.append(" (<a href=\"urn:changeset-configuration\">").append(tr("configure changeset")).append("</a>)");
60 return msg.toString();
61 }
62
63 protected String buildStrategySummary() {
64 if (spec == null)
65 return "";
66 // check whether we can use one changeset only or whether we have to use multiple changesets
67 //
68 boolean useOneChangeset = true;
69 Capabilities capabilities = OsmApi.getOsmApi().getCapabilities();
70 int maxChunkSize = capabilities != null ? capabilities.getMaxChangesetSize() : -1;
71 if (maxChunkSize > 0 && numObjects > maxChunkSize) {
72 useOneChangeset = false;
73 }
74
75 int numRequests = spec.getNumRequests(numObjects);
76 String msg = null;
77 if (useOneChangeset) {
78 lblWarning.setVisible(false);
79 if (numRequests == 0) {
80 msg = trn(
81 "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>",
82 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>",
83 numObjects, numObjects
84 );
85 } else if (numRequests == 1) {
86 msg = trn(
87 "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using <strong>1 request</strong>",
88 "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>1 request</strong>",
89 numObjects, numObjects
90 );
91 } else if (numRequests > 1) {
92 msg = tr("Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>{1} requests</strong>",
93 numObjects, numRequests);
94 }
95 msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
96 } else {
97 lblWarning.setVisible(true);
98 if (numRequests == 0) {
99 msg = tr("{0} objects exceed the max. allowed {1} objects in a changeset on the server ''{2}''. " +
100 "Please <a href=\"urn:advanced-configuration\">configure</a> how to proceed with <strong>multiple changesets</strong>",
101 numObjects, maxChunkSize, OsmApi.getOsmApi().getBaseUrl());
102 } else if (numRequests > 1) {
103 msg = tr("Uploading <strong>{0} objects</strong> to <strong>multiple changesets</strong> using <strong>{1} requests</strong>",
104 numObjects, numRequests);
105 msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
106 }
107 }
108 return msg;
109 }
110
111 protected void build() {
112 jepMessage = new JMultilineLabel("");
113 jepMessage.addHyperlinkListener(this);
114
115 setLayout(new BorderLayout());
116 add(jepMessage, BorderLayout.CENTER);
117 lblWarning = new JLabel("");
118 lblWarning.setVisible(false);
119 lblWarning.setLabelFor(jepMessage);
120 lblWarning.setIcon(ImageProvider.get("warning-small"));
121 lblWarning.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
122 JPanel pnl = new JPanel(new BorderLayout());
123 pnl.add(lblWarning, BorderLayout.NORTH);
124 add(pnl, BorderLayout.WEST);
125 }
126
127 public void setConfigurationParameterRequestListener(ConfigurationParameterRequestHandler handler) {
128 this.configHandler = handler;
129 }
130
131 public void setUploadStrategySpecification(UploadStrategySpecification spec) {
132 this.spec = spec;
133 updateSummary();
134 }
135
136 public void setNumObjects(int numObjects) {
137 this.numObjects = numObjects;
138 updateSummary();
139 }
140
141 public void setCloseChangesetAfterNextUpload(boolean value) {
142 this.closeChangesetAfterNextUpload = value;
143 updateSummary();
144 }
145
146 protected void updateSummary() {
147 StringBuilder sb = new StringBuilder(32);
148 sb.append("<html>")
149 .append(buildStrategySummary())
150 .append("<br><br>")
151 .append(buildChangesetSummary())
152 .append("</html>");
153 jepMessage.setText(sb.toString());
154 }
155
156 /* --------------------------------------------------------------------- */
157 /* Interface HyperlinkListener
158 /* --------------------------------------------------------------------- */
159 @Override
160 public void hyperlinkUpdate(HyperlinkEvent e) {
161 if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
162 String desc = e.getDescription();
163 if (desc == null || configHandler == null)
164 return;
165 if ("urn:changeset-configuration".equals(desc)) {
166 configHandler.handleChangesetConfigurationRequest();
167 } else if ("urn:advanced-configuration".equals(desc)) {
168 configHandler.handleUploadStrategyConfigurationRequest();
169 }
170 }
171 }
172
173 /* --------------------------------------------------------------------- */
174 /* Interface PropertyChangeListener
175 /* --------------------------------------------------------------------- */
176 @Override
177 public void propertyChange(PropertyChangeEvent evt) {
178 if (evt.getPropertyName().equals(ChangesetManagementPanel.SELECTED_CHANGESET_PROP)) {
179 selectedChangeset = (Changeset) evt.getNewValue();
180 updateSummary();
181 } else if (evt.getPropertyName().equals(ChangesetManagementPanel.CLOSE_CHANGESET_AFTER_UPLOAD)) {
182 closeChangesetAfterNextUpload = (Boolean) evt.getNewValue();
183 updateSummary();
184 } else if (evt.getPropertyName().equals(UploadedObjectsSummaryPanel.NUM_OBJECTS_TO_UPLOAD_PROP)) {
185 numObjects = (Integer) evt.getNewValue();
186 updateSummary();
187 } else if (evt.getPropertyName().equals(UploadStrategySelectionPanel.UPLOAD_STRATEGY_SPECIFICATION_PROP)) {
188 this.spec = (UploadStrategySpecification) evt.getNewValue();
189 updateSummary();
190 }
191 }
192}
Note: See TracBrowser for help on using the repository browser.