diff --git a/src/org/openstreetmap/josm/data/osm/Changeset.java b/src/org/openstreetmap/josm/data/osm/Changeset.java
index 5abc6d4..fc1af76 100644
|
a
|
b
|
public final class Changeset implements Tagged {
|
| 87 | 87 | } |
| 88 | 88 | } |
| 89 | 89 | |
| | 90 | public static Changeset fromPrimitive(final OsmPrimitive p) { |
| | 91 | final Changeset changeset = new Changeset(p.getChangesetId()); |
| | 92 | changeset.setUser(p.getUser()); |
| | 93 | changeset.setCreatedAt(p.getTimestamp()); // not accurate in all cases |
| | 94 | return changeset; |
| | 95 | } |
| | 96 | |
| 90 | 97 | public void visit(Visitor v) { |
| 91 | 98 | v.visit(this); |
| 92 | 99 | } |
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
index 03b634c..8e0d2b7 100644
|
a
|
b
|
import org.openstreetmap.josm.gui.DefaultNameFormatter;
|
| 26 | 26 | import org.openstreetmap.josm.gui.conflict.ConflictColors; |
| 27 | 27 | import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver; |
| 28 | 28 | import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType; |
| | 29 | import org.openstreetmap.josm.gui.history.VersionInfoPanel; |
| 29 | 30 | import org.openstreetmap.josm.tools.ImageProvider; |
| 30 | 31 | |
| 31 | 32 | /** |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 47 | 48 | private JLabel lblTheirReferrers; |
| 48 | 49 | |
| 49 | 50 | private final transient PropertiesMergeModel model; |
| | 51 | private final VersionInfoPanel mineVersionInfo = new VersionInfoPanel(); |
| | 52 | private final VersionInfoPanel theirVersionInfo = new VersionInfoPanel(); |
| 50 | 53 | |
| 51 | 54 | /** |
| 52 | 55 | * Constructs a new {@code PropertiesMerger}. |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 77 | 80 | gc.anchor = GridBagConstraints.CENTER; |
| 78 | 81 | gc.weightx = 0.0; |
| 79 | 82 | gc.weighty = 0.0; |
| 80 | | gc.insets = new Insets(10, 0, 10, 0); |
| | 83 | gc.insets = new Insets(10, 0, 0, 0); |
| 81 | 84 | JLabel lblMyVersion = new JLabel(tr("My version")); |
| 82 | 85 | lblMyVersion.setToolTipText(tr("Properties in my dataset, i.e. the local dataset")); |
| 83 | 86 | add(lblMyVersion, gc); |
| 84 | 87 | |
| 85 | 88 | gc.gridx = 3; |
| 86 | | gc.gridy = 0; |
| 87 | 89 | JLabel lblMergedVersion = new JLabel(tr("Merged version")); |
| 88 | 90 | lblMergedVersion.setToolTipText( |
| 89 | 91 | tr("Properties in the merged element. They will replace properties in my elements when merge decisions are applied.")); |
| 90 | 92 | add(lblMergedVersion, gc); |
| 91 | 93 | |
| 92 | 94 | gc.gridx = 5; |
| 93 | | gc.gridy = 0; |
| 94 | 95 | JLabel lblTheirVersion = new JLabel(tr("Their version")); |
| 95 | 96 | lblTheirVersion.setToolTipText(tr("Properties in their dataset, i.e. the server dataset")); |
| 96 | 97 | add(lblTheirVersion, gc); |
| | 98 | |
| | 99 | gc.gridx = 1; |
| | 100 | gc.gridy = 1; |
| | 101 | gc.fill = GridBagConstraints.HORIZONTAL; |
| | 102 | gc.anchor = GridBagConstraints.LINE_START; |
| | 103 | gc.insets = new Insets(0, 0, 20, 0); |
| | 104 | add(mineVersionInfo, gc); |
| | 105 | |
| | 106 | gc.gridx = 5; |
| | 107 | add(theirVersionInfo, gc); |
| | 108 | |
| 97 | 109 | } |
| 98 | 110 | |
| 99 | 111 | protected void buildCoordinateConflictRows() { |
| 100 | 112 | GridBagConstraints gc = new GridBagConstraints(); |
| 101 | 113 | |
| 102 | 114 | gc.gridx = 0; |
| 103 | | gc.gridy = 1; |
| | 115 | gc.gridy = 2; |
| 104 | 116 | gc.gridwidth = 1; |
| 105 | 117 | gc.gridheight = 1; |
| 106 | 118 | gc.fill = GridBagConstraints.HORIZONTAL; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 111 | 123 | add(new JLabel(tr("Coordinates:")), gc); |
| 112 | 124 | |
| 113 | 125 | gc.gridx = 1; |
| 114 | | gc.gridy = 1; |
| 115 | 126 | gc.fill = GridBagConstraints.BOTH; |
| 116 | 127 | gc.anchor = GridBagConstraints.CENTER; |
| 117 | 128 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 119 | 130 | add(lblMyCoordinates = buildValueLabel("label.mycoordinates"), gc); |
| 120 | 131 | |
| 121 | 132 | gc.gridx = 2; |
| 122 | | gc.gridy = 1; |
| 123 | 133 | gc.fill = GridBagConstraints.NONE; |
| 124 | 134 | gc.anchor = GridBagConstraints.CENTER; |
| 125 | 135 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 131 | 141 | add(btnKeepMyCoordinates, gc); |
| 132 | 142 | |
| 133 | 143 | gc.gridx = 3; |
| 134 | | gc.gridy = 1; |
| 135 | 144 | gc.fill = GridBagConstraints.BOTH; |
| 136 | 145 | gc.anchor = GridBagConstraints.CENTER; |
| 137 | 146 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 139 | 148 | add(lblMergedCoordinates = buildValueLabel("label.mergedcoordinates"), gc); |
| 140 | 149 | |
| 141 | 150 | gc.gridx = 4; |
| 142 | | gc.gridy = 1; |
| 143 | 151 | gc.fill = GridBagConstraints.NONE; |
| 144 | 152 | gc.anchor = GridBagConstraints.CENTER; |
| 145 | 153 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 150 | 158 | add(btnKeepTheirCoordinates, gc); |
| 151 | 159 | |
| 152 | 160 | gc.gridx = 5; |
| 153 | | gc.gridy = 1; |
| 154 | 161 | gc.fill = GridBagConstraints.BOTH; |
| 155 | 162 | gc.anchor = GridBagConstraints.CENTER; |
| 156 | 163 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 159 | 166 | |
| 160 | 167 | // --------------------------------------------------- |
| 161 | 168 | gc.gridx = 3; |
| 162 | | gc.gridy = 2; |
| | 169 | gc.gridy = 3; |
| 163 | 170 | gc.fill = GridBagConstraints.NONE; |
| 164 | 171 | gc.anchor = GridBagConstraints.CENTER; |
| 165 | 172 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 174 | 181 | GridBagConstraints gc = new GridBagConstraints(); |
| 175 | 182 | |
| 176 | 183 | gc.gridx = 0; |
| 177 | | gc.gridy = 3; |
| | 184 | gc.gridy = 4; |
| 178 | 185 | gc.gridwidth = 1; |
| 179 | 186 | gc.gridheight = 1; |
| 180 | 187 | gc.fill = GridBagConstraints.BOTH; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 185 | 192 | add(new JLabel(tr("Deleted State:")), gc); |
| 186 | 193 | |
| 187 | 194 | gc.gridx = 1; |
| 188 | | gc.gridy = 3; |
| 189 | 195 | gc.fill = GridBagConstraints.BOTH; |
| 190 | 196 | gc.anchor = GridBagConstraints.CENTER; |
| 191 | 197 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 193 | 199 | add(lblMyDeletedState = buildValueLabel("label.mydeletedstate"), gc); |
| 194 | 200 | |
| 195 | 201 | gc.gridx = 2; |
| 196 | | gc.gridy = 3; |
| 197 | 202 | gc.fill = GridBagConstraints.NONE; |
| 198 | 203 | gc.anchor = GridBagConstraints.CENTER; |
| 199 | 204 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 205 | 210 | add(btnKeepMyDeletedState, gc); |
| 206 | 211 | |
| 207 | 212 | gc.gridx = 3; |
| 208 | | gc.gridy = 3; |
| 209 | 213 | gc.fill = GridBagConstraints.BOTH; |
| 210 | 214 | gc.anchor = GridBagConstraints.CENTER; |
| 211 | 215 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 213 | 217 | add(lblMergedDeletedState = buildValueLabel("label.mergeddeletedstate"), gc); |
| 214 | 218 | |
| 215 | 219 | gc.gridx = 4; |
| 216 | | gc.gridy = 3; |
| 217 | 220 | gc.fill = GridBagConstraints.NONE; |
| 218 | 221 | gc.anchor = GridBagConstraints.CENTER; |
| 219 | 222 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 225 | 228 | add(btnKeepTheirDeletedState, gc); |
| 226 | 229 | |
| 227 | 230 | gc.gridx = 5; |
| 228 | | gc.gridy = 3; |
| 229 | 231 | gc.fill = GridBagConstraints.BOTH; |
| 230 | 232 | gc.anchor = GridBagConstraints.CENTER; |
| 231 | 233 | gc.weightx = 0.33; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 234 | 236 | |
| 235 | 237 | // --------------------------------------------------- |
| 236 | 238 | gc.gridx = 3; |
| 237 | | gc.gridy = 4; |
| | 239 | gc.gridy = 5; |
| 238 | 240 | gc.fill = GridBagConstraints.NONE; |
| 239 | 241 | gc.anchor = GridBagConstraints.CENTER; |
| 240 | 242 | gc.weightx = 0.0; |
| … |
… |
public class PropertiesMerger extends JPanel implements Observer, IConflictResol
|
| 506 | 508 | @Override |
| 507 | 509 | public void populate(Conflict<? extends OsmPrimitive> conflict) { |
| 508 | 510 | model.populate(conflict); |
| | 511 | mineVersionInfo.update(conflict.getMy(), true); |
| | 512 | theirVersionInfo.update(conflict.getTheir(), false); |
| 509 | 513 | } |
| 510 | 514 | } |
diff --git a/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java b/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
index a7cfcf5..8b6fa24 100644
|
a
|
b
|
import org.openstreetmap.josm.data.conflict.Conflict;
|
| 30 | 30 | import org.openstreetmap.josm.data.osm.OsmPrimitive; |
| 31 | 31 | import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver; |
| 32 | 32 | import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType; |
| | 33 | import org.openstreetmap.josm.gui.history.VersionInfoPanel; |
| 33 | 34 | import org.openstreetmap.josm.tools.ImageProvider; |
| 34 | 35 | |
| 35 | 36 | /** |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 42 | 43 | private JTable mergedTable; |
| 43 | 44 | private JTable theirTable; |
| 44 | 45 | private final TagMergeModel model; |
| | 46 | private final VersionInfoPanel mineVersionInfo = new VersionInfoPanel(); |
| | 47 | private final VersionInfoPanel theirVersionInfo = new VersionInfoPanel(); |
| 45 | 48 | private transient AdjustmentSynchronizer adjustmentSynchronizer; |
| 46 | 49 | |
| 47 | 50 | /** |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 130 | 133 | gc.anchor = GridBagConstraints.CENTER; |
| 131 | 134 | gc.weightx = 0.0; |
| 132 | 135 | gc.weighty = 0.0; |
| 133 | | gc.insets = new Insets(10, 0, 10, 0); |
| | 136 | gc.insets = new Insets(10, 0, 0, 0); |
| 134 | 137 | JLabel lblMy = new JLabel(tr("My version (local dataset)")); |
| 135 | 138 | add(lblMy, gc); |
| 136 | 139 | |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 153 | 156 | gc.anchor = GridBagConstraints.CENTER; |
| 154 | 157 | gc.weightx = 0.0; |
| 155 | 158 | gc.weighty = 0.0; |
| 156 | | gc.insets = new Insets(0, 0, 0, 0); |
| 157 | 159 | JLabel lblTheir = new JLabel(tr("Their version (server dataset)")); |
| 158 | 160 | add(lblTheir, gc); |
| 159 | 161 | |
| 160 | 162 | gc.gridx = 0; |
| 161 | 163 | gc.gridy = 1; |
| | 164 | gc.fill = GridBagConstraints.HORIZONTAL; |
| | 165 | gc.anchor = GridBagConstraints.FIRST_LINE_START; |
| | 166 | gc.insets = new Insets(0, 0, 20, 0); |
| | 167 | add(mineVersionInfo, gc); |
| | 168 | |
| | 169 | gc.gridx = 4; |
| | 170 | gc.gridy = 1; |
| | 171 | gc.fill = GridBagConstraints.HORIZONTAL; |
| | 172 | gc.anchor = GridBagConstraints.FIRST_LINE_START; |
| | 173 | add(theirVersionInfo, gc); |
| | 174 | |
| | 175 | gc.gridx = 0; |
| | 176 | gc.gridy = 2; |
| 162 | 177 | gc.gridwidth = 1; |
| 163 | 178 | gc.gridheight = 1; |
| 164 | 179 | gc.fill = GridBagConstraints.BOTH; |
| 165 | 180 | gc.anchor = GridBagConstraints.FIRST_LINE_START; |
| 166 | 181 | gc.weightx = 0.3; |
| 167 | 182 | gc.weighty = 1.0; |
| | 183 | gc.insets = new Insets(0, 0, 0, 0); |
| 168 | 184 | JScrollPane tabMy = buildMineTagTable(); |
| 169 | 185 | lblMy.setLabelFor(tabMy); |
| 170 | 186 | add(tabMy, gc); |
| 171 | 187 | |
| 172 | 188 | gc.gridx = 1; |
| 173 | | gc.gridy = 1; |
| | 189 | gc.gridy = 2; |
| 174 | 190 | gc.gridwidth = 1; |
| 175 | 191 | gc.gridheight = 1; |
| 176 | 192 | gc.fill = GridBagConstraints.NONE; |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 184 | 200 | add(btnKeepMine, gc); |
| 185 | 201 | |
| 186 | 202 | gc.gridx = 2; |
| 187 | | gc.gridy = 1; |
| | 203 | gc.gridy = 2; |
| 188 | 204 | gc.gridwidth = 1; |
| 189 | 205 | gc.gridheight = 1; |
| 190 | 206 | gc.fill = GridBagConstraints.BOTH; |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 196 | 212 | add(tabMerge, gc); |
| 197 | 213 | |
| 198 | 214 | gc.gridx = 3; |
| 199 | | gc.gridy = 1; |
| | 215 | gc.gridy = 2; |
| 200 | 216 | gc.gridwidth = 1; |
| 201 | 217 | gc.gridheight = 1; |
| 202 | 218 | gc.fill = GridBagConstraints.NONE; |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 209 | 225 | add(btnKeepTheir, gc); |
| 210 | 226 | |
| 211 | 227 | gc.gridx = 4; |
| 212 | | gc.gridy = 1; |
| | 228 | gc.gridy = 2; |
| 213 | 229 | gc.gridwidth = 1; |
| 214 | 230 | gc.gridheight = 1; |
| 215 | 231 | gc.fill = GridBagConstraints.BOTH; |
| … |
… |
public class TagMerger extends JPanel implements IConflictResolver {
|
| 441 | 457 | int index = table.getRowCount() > 0 ? 0 : -1; |
| 442 | 458 | table.getSelectionModel().setSelectionInterval(index, index); |
| 443 | 459 | } |
| | 460 | mineVersionInfo.update(conflict.getMy(), true); |
| | 461 | theirVersionInfo.update(conflict.getTheir(), false); |
| 444 | 462 | } |
| 445 | 463 | } |
diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
index 1f3ec85..2199452 100644
|
a
|
b
|
import java.awt.Insets;
|
| 12 | 12 | import java.awt.event.ActionEvent; |
| 13 | 13 | import java.text.DateFormat; |
| 14 | 14 | import java.util.Collections; |
| | 15 | import java.util.Date; |
| 15 | 16 | import java.util.Observable; |
| 16 | 17 | import java.util.Observer; |
| 17 | 18 | |
| … |
… |
public class VersionInfoPanel extends JPanel implements Observer {
|
| 133 | 134 | return model.getPointInTime(pointInTimeType); |
| 134 | 135 | } |
| 135 | 136 | |
| 136 | | protected String getInfoText() { |
| 137 | | HistoryOsmPrimitive primitive = getPrimitive(); |
| 138 | | if (primitive == null) |
| 139 | | return ""; |
| | 137 | protected String getInfoText(final Date timestamp, final long version, final boolean isLatest) { |
| 140 | 138 | String text; |
| 141 | | if (model.isLatest(primitive)) { |
| | 139 | if (isLatest) { |
| 142 | 140 | OsmDataLayer editLayer = Main.main.getEditLayer(); |
| 143 | 141 | text = tr("<html>Version <strong>{0}</strong> currently edited in layer ''{1}''</html>", |
| 144 | | Long.toString(primitive.getVersion()), |
| | 142 | Long.toString(version), |
| 145 | 143 | editLayer == null ? tr("unknown") : editLayer.getName() |
| 146 | 144 | ); |
| 147 | 145 | } else { |
| 148 | 146 | String date = "?"; |
| 149 | | if (primitive.getTimestamp() != null) { |
| 150 | | date = DateUtils.formatDateTime(primitive.getTimestamp(), DateFormat.SHORT, DateFormat.SHORT); |
| | 147 | if (timestamp != null) { |
| | 148 | date = DateUtils.formatDateTime(timestamp, DateFormat.SHORT, DateFormat.SHORT); |
| 151 | 149 | } |
| 152 | 150 | text = tr( |
| 153 | 151 | "<html>Version <strong>{0}</strong> created on <strong>{1}</strong></html>", |
| 154 | | Long.toString(primitive.getVersion()), date); |
| | 152 | Long.toString(version), date); |
| 155 | 153 | } |
| 156 | 154 | return text; |
| 157 | 155 | } |
| … |
… |
public class VersionInfoPanel extends JPanel implements Observer {
|
| 189 | 187 | |
| 190 | 188 | @Override |
| 191 | 189 | public void update(Observable o, Object arg) { |
| 192 | | lblInfo.setText(getInfoText()); |
| 193 | | |
| 194 | 190 | HistoryOsmPrimitive primitive = getPrimitive(); |
| 195 | 191 | Changeset cs = primitive.getChangeset(); |
| | 192 | update(cs, model.isLatest(primitive), primitive.getTimestamp(), primitive.getVersion()); |
| | 193 | } |
| 196 | 194 | |
| 197 | | if (!model.isLatest(primitive)) { |
| 198 | | User user = primitive.getUser(); |
| 199 | | String url = Main.getBaseBrowseUrl() + "/changeset/" + primitive.getChangesetId(); |
| | 195 | public void update(final OsmPrimitive primitive, final boolean isLatest) { |
| | 196 | update(Changeset.fromPrimitive(primitive), isLatest, primitive.getTimestamp(), primitive.getVersion()); |
| | 197 | } |
| | 198 | |
| | 199 | public void update(final Changeset cs, final boolean isLatest, final Date timestamp, final long version) { |
| | 200 | lblInfo.setText(getInfoText(timestamp, version, isLatest)); |
| | 201 | |
| | 202 | if (!isLatest) { |
| | 203 | User user = cs.getUser(); |
| | 204 | String url = Main.getBaseBrowseUrl() + "/changeset/" + cs.getId(); |
| 200 | 205 | lblChangeset.setUrl(url); |
| 201 | | lblChangeset.setDescription(Long.toString(primitive.getChangesetId())); |
| 202 | | changesetDialogAction.setId((int) primitive.getChangesetId()); |
| | 206 | lblChangeset.setDescription(Long.toString(cs.getId())); |
| | 207 | changesetDialogAction.setId(cs.getId()); |
| 203 | 208 | changesetButton.setEnabled(true); |
| 204 | 209 | |
| 205 | 210 | String username = ""; |
| … |
… |
public class VersionInfoPanel extends JPanel implements Observer {
|
| 227 | 232 | changesetButton.setEnabled(false); |
| 228 | 233 | } |
| 229 | 234 | |
| 230 | | final Changeset oppCs = model.getPointInTime(pointInTimeType.opposite()).getChangeset(); |
| | 235 | final Changeset oppCs = model != null ? model.getPointInTime(pointInTimeType.opposite()).getChangeset() : null; |
| 231 | 236 | updateText(cs, "comment", texChangesetComment, null, oppCs, texChangesetComment); |
| 232 | 237 | updateText(cs, "source", texChangesetSource, lblSource, oppCs, pnlChangesetSource); |
| 233 | 238 | updateText(cs, "imagery_used", texChangesetImageryUsed, lblImageryUsed, oppCs, pnlChangesetImageryUsed); |