001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.command; 003 004import static org.openstreetmap.josm.tools.I18n.marktr; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.util.Collection; 008import javax.swing.Icon; 009 010import org.openstreetmap.josm.data.conflict.Conflict; 011import org.openstreetmap.josm.data.osm.OsmPrimitive; 012import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 013import org.openstreetmap.josm.tools.ImageProvider; 014 015/** 016 * Represents a command for resolving a version conflict between two {@link OsmPrimitive} 017 * 018 * 019 */ 020public class VersionConflictResolveCommand extends ConflictResolveCommand { 021 022 /** the conflict to resolve */ 023 private Conflict<? extends OsmPrimitive> conflict; 024 025 /** 026 * constructor 027 * @param conflict the conflict data set 028 */ 029 public VersionConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict) { 030 this.conflict = conflict; 031 } 032 033 @Override 034 public String getDescriptionText() { 035 String msg = ""; 036 switch(OsmPrimitiveType.from(conflict.getMy())) { 037 case NODE: msg = marktr("Resolve version conflict for node {0}"); break; 038 case WAY: msg = marktr("Resolve version conflict for way {0}"); break; 039 case RELATION: msg = marktr("Resolve version conflict for relation {0}"); break; 040 } 041 return tr(msg, conflict.getMy().getId()); 042 } 043 044 @Override 045 public Icon getDescriptionIcon() { 046 return ImageProvider.get("data", "object"); 047 } 048 049 @Override 050 public boolean executeCommand() { 051 super.executeCommand(); 052 if (!conflict.getMy().isNew()) { 053 long myVersion = conflict.getMy().getVersion(); 054 long theirVersion = conflict.getTheir().getVersion(); 055 conflict.getMy().setOsmId( 056 conflict.getMy().getId(), 057 (int)Math.max(myVersion, theirVersion) 058 ); 059 // update visiblity state 060 if (theirVersion >= myVersion) { 061 conflict.getMy().setVisible(conflict.getTheir().isVisible()); 062 } 063 } 064 getLayer().getConflicts().remove(conflict); 065 rememberConflict(conflict); 066 return true; 067 } 068 069 @Override 070 public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, 071 Collection<OsmPrimitive> added) { 072 modified.add(conflict.getMy()); 073 } 074}