source: josm/trunk/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java@ 4932

Last change on this file since 4932 was 4602, checked in by bastiK, 12 years ago

upgrade historic users to real users, so their CT status can be shown in the history panel

  • Property svn:eol-style set to native
File size: 6.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.BorderLayout;
7import java.awt.FlowLayout;
8import java.awt.GridBagConstraints;
9import java.awt.GridBagLayout;
10import java.io.UnsupportedEncodingException;
11import java.net.URLEncoder;
12import java.text.SimpleDateFormat;
13import java.util.Observable;
14import java.util.Observer;
15
16import javax.swing.JLabel;
17import javax.swing.JPanel;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.actions.AbstractInfoAction;
21import org.openstreetmap.josm.data.osm.User;
22import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
23import org.openstreetmap.josm.gui.JMultilineLabel;
24import org.openstreetmap.josm.gui.layer.OsmDataLayer;
25import org.openstreetmap.josm.io.auth.CredentialsManager;
26import org.openstreetmap.josm.tools.CheckParameterUtil;
27import org.openstreetmap.josm.tools.UrlLabel;
28
29/**
30 * VersionInfoPanel is an UI component which displays the basic properties of a version
31 * of a {@see OsmPrimitive}.
32 *
33 */
34public class VersionInfoPanel extends JPanel implements Observer{
35 private PointInTimeType pointInTimeType;
36 private HistoryBrowserModel model;
37 private JMultilineLabel lblInfo;
38 private UrlLabel lblUser;
39 private UrlLabel lblChangeset;
40 private JPanel pnlUserAndChangeset;
41
42 protected void build() {
43 JPanel pnl1 = new JPanel();
44 pnl1.setLayout(new BorderLayout());
45 lblInfo = new JMultilineLabel("");
46 //lblInfo.setHorizontalAlignment(JLabel.LEFT);
47 pnl1.add(lblInfo, BorderLayout.CENTER);
48
49 pnlUserAndChangeset = new JPanel();
50 pnlUserAndChangeset.setLayout(new FlowLayout(FlowLayout.LEFT));
51 lblUser = new UrlLabel();
52 pnlUserAndChangeset.add(new JLabel(tr("User:")));
53 pnlUserAndChangeset.add(lblUser);
54 pnlUserAndChangeset.add(new JLabel(tr("Changeset:")));
55 lblChangeset = new UrlLabel();
56 pnlUserAndChangeset.add(lblChangeset);
57
58 setLayout(new GridBagLayout());
59 GridBagConstraints gc = new GridBagConstraints();
60 gc.anchor = GridBagConstraints.NORTHWEST;
61 gc.fill = GridBagConstraints.HORIZONTAL;
62 gc.weightx = 1.0;
63 gc.weighty = 1.0;
64 add(pnl1, gc);
65 gc.gridy = 1;
66 gc.weighty = 0.0;
67 add(pnlUserAndChangeset, gc);
68 }
69
70 protected HistoryOsmPrimitive getPrimitive() {
71 if (model == null || pointInTimeType == null)
72 return null;
73 return model.getPointInTime(pointInTimeType);
74 }
75
76 protected OsmDataLayer getEditLayer() {
77 try {
78 return Main.map.mapView.getEditLayer();
79 } catch(NullPointerException e) {
80 return null;
81 }
82 }
83
84 protected String getInfoText() {
85 HistoryOsmPrimitive primitive = getPrimitive();
86 if (primitive == null)
87 return "";
88 String text;
89 if (model.isLatest(primitive)) {
90 text = tr("<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>",
91 Long.toString(primitive.getVersion()),
92 getEditLayer() == null ? tr("unknown") : getEditLayer().getName()
93 );
94 } else {
95 text = tr(
96 "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>",
97 Long.toString(primitive.getVersion()),
98 new SimpleDateFormat().format(primitive.getTimestamp())
99 );
100 }
101 return text;
102 }
103
104 public VersionInfoPanel() {
105 pointInTimeType = null;
106 model = null;
107 build();
108 }
109
110 /**
111 * constructor
112 *
113 * @param model the model (must not be null)
114 * @param pointInTimeType the point in time this panel visualizes (must not be null)
115 * @exception IllegalArgumentException thrown, if model is null
116 * @exception IllegalArgumentException thrown, if pointInTimeType is null
117 *
118 */
119 public VersionInfoPanel(HistoryBrowserModel model, PointInTimeType pointInTimeType) throws IllegalArgumentException {
120 CheckParameterUtil.ensureParameterNotNull(pointInTimeType, "pointInTimeType");
121 CheckParameterUtil.ensureParameterNotNull(model, "model");
122
123 this.model = model;
124 this.pointInTimeType = pointInTimeType;
125 model.addObserver(this);
126 build();
127 }
128
129 public void update(Observable o, Object arg) {
130 lblInfo.setText(getInfoText());
131
132 if (!model.isLatest(getPrimitive())) {
133 String url = AbstractInfoAction.getBaseBrowseUrl() + "/changeset/" + getPrimitive().getChangesetId();
134 lblChangeset.setUrl(url);
135 lblChangeset.setDescription(Long.toString(getPrimitive().getChangesetId()));
136
137 try {
138 if (getPrimitive().getUser() != null && getPrimitive().getUser() != User.getAnonymous()) {
139 url = AbstractInfoAction.getBaseUserUrl() + "/" + URLEncoder.encode(getPrimitive().getUser().getName(), "UTF-8").replaceAll("\\+", "%20");
140 lblUser.setUrl(url);
141 } else {
142 lblUser.setUrl(null);
143 }
144 } catch(UnsupportedEncodingException e) {
145 e.printStackTrace();
146 lblUser.setUrl(null);
147 }
148 String username = "";
149 if (getPrimitive().getUser() != null) {
150 username = getPrimitive().getUser().getName();
151 }
152 lblUser.setDescription(username);
153 } else {
154 String user = CredentialsManager.getInstance().getUsername();
155 if (user == null) {
156 lblUser.setDescription(tr("anonymous"));
157 } else {
158 try {
159 String url = AbstractInfoAction.getBaseUserUrl() + "/" + URLEncoder.encode(user, "UTF-8").replaceAll("\\+", "%20");
160 lblUser.setUrl(url);
161 } catch(UnsupportedEncodingException e) {
162 e.printStackTrace();
163 lblUser.setUrl(null);
164 }
165 lblUser.setDescription(user);
166 }
167 lblChangeset.setDescription(tr("none"));
168 lblChangeset.setUrl(null);
169 }
170 }
171}
Note: See TracBrowser for help on using the repository browser.