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

Last change on this file since 6040 was 6040, checked in by Don-vip, 11 years ago

fix #8827 - HTML rendering differ if run before or after having launched Help Browser

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