Changeset 3034 in josm


Ignore:
Timestamp:
Feb 23, 2010 8:58:12 AM (3 years ago)
Author:
jttt
Message:

Fix #4467 Don't silently drop locally deleted member primitives from downloaded ways and relation (fix the issue when deleted primitive is referenced)

Location:
trunk
Files:
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/command/Command.java

    r2932 r3034  
    22package org.openstreetmap.josm.command; 
    33 
     4import java.util.ArrayList; 
    45import java.util.Collection; 
    56import java.util.HashMap; 
    6 import java.util.HashSet; 
     7import java.util.LinkedHashMap; 
    78import java.util.Map; 
    89import java.util.Map.Entry; 
     
    3233 
    3334    private static final class CloneVisitor extends AbstractVisitor { 
    34         public Map<OsmPrimitive, PrimitiveData> orig = new HashMap<OsmPrimitive, PrimitiveData>(); 
     35        public final Map<OsmPrimitive, PrimitiveData> orig = new LinkedHashMap<OsmPrimitive, PrimitiveData>(); 
    3536 
    3637        public void visit(Node n) { 
     
    7273    public boolean executeCommand() { 
    7374        CloneVisitor visitor = new CloneVisitor(); 
    74         Collection<OsmPrimitive> all = new HashSet<OsmPrimitive>(); 
     75        Collection<OsmPrimitive> all = new ArrayList<OsmPrimitive>(); 
    7576        fillModifiedData(all, all, all); 
    7677        for (OsmPrimitive osm : all) { 
  • trunk/src/org/openstreetmap/josm/command/CoordinateConflictResolveCommand.java

    r2512 r3034  
    2323 
    2424    /** the conflict to resolve */ 
    25     private Conflict<Node> conflict; 
     25    private Conflict<? extends OsmPrimitive> conflict; 
    2626 
    2727    /** the merge decision */ 
     
    3535     * @param decision the merge decision 
    3636     */ 
    37     public CoordinateConflictResolveCommand(Node my, Node their, MergeDecisionType decision) { 
    38         this.conflict = new Conflict<Node>(my,their); 
     37    public CoordinateConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, MergeDecisionType decision) { 
     38        this.conflict = conflict; 
    3939        this.decision = decision; 
    4040    } 
     
    6161            // do nothing 
    6262        } else if (decision.equals(MergeDecisionType.KEEP_THEIR)) { 
    63             Node my = conflict.getMy(); 
    64             Node their = conflict.getTheir(); 
     63            Node my = (Node)conflict.getMy(); 
     64            Node their = (Node)conflict.getTheir(); 
    6565            my.setCoor(their.getCoor()); 
    6666        } else 
  • trunk/src/org/openstreetmap/josm/command/DeletedStateConflictResolveCommand.java

    r2945 r3034  
    2323 
    2424    /** the conflict to resolve */ 
    25     private Conflict<OsmPrimitive> conflict; 
     25    private Conflict<? extends OsmPrimitive> conflict; 
    2626 
    2727    /** the merge decision */ 
     
    3535     * @param decision the merge decision 
    3636     */ 
    37     public DeletedStateConflictResolveCommand(OsmPrimitive my, OsmPrimitive their, MergeDecisionType decision) { 
    38         this.conflict = new Conflict<OsmPrimitive>(my, their); 
     37    public DeletedStateConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, MergeDecisionType decision) { 
     38        this.conflict = conflict; 
    3939        this.decision = decision; 
    4040    } 
     
    6161 
    6262        if (decision.equals(MergeDecisionType.KEEP_MINE)) { 
    63             if (conflict.getMy().isDeleted()) { 
     63            if (conflict.getMy().isDeleted() || conflict.isMyDeleted()) { 
    6464                // because my was involved in a conflict it my still be referred 
    6565                // to from a way or a relation. Fix this now. 
    6666                // 
    6767                layer.data.unlinkReferencesToPrimitive(conflict.getMy()); 
     68                conflict.getMy().setDeleted(true); 
    6869            } 
    6970        } else if (decision.equals(MergeDecisionType.KEEP_THEIR)) { 
     
    8687            Collection<OsmPrimitive> added) { 
    8788        modified.add(conflict.getMy()); 
     89        modified.addAll(conflict.getMy().getReferrers()); 
    8890    } 
    8991} 
  • trunk/src/org/openstreetmap/josm/command/ModifiedConflictResolveCommand.java

    r2844 r3034  
    2424 
    2525    /** the conflict to resolve */ 
    26     private Conflict<OsmPrimitive> conflict; 
     26    private Conflict<? extends OsmPrimitive> conflict; 
    2727 
    2828    /** 
     
    3131     * @param their their primitive (i.e. the primitive from the server) 
    3232     */ 
    33     public ModifiedConflictResolveCommand(OsmPrimitive my, OsmPrimitive their) { 
    34         conflict = new Conflict<OsmPrimitive>(my, their); 
     33    public ModifiedConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict) { 
     34        this.conflict = conflict; 
    3535    } 
    3636 
  • trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java

    r2990 r3034  
    2929 
    3030    /** the conflict to resolve */ 
    31     private Conflict<OsmPrimitive> conflict; 
     31    private Conflict<? extends OsmPrimitive> conflict; 
    3232 
    3333    /** the list of merge decisions, represented as {@see TagMergeItem}s */ 
     
    5656     * @param mergeItems the list of merge decisions, represented as {@see TagMergeItem}s 
    5757     */ 
    58     public TagConflictResolveCommand(OsmPrimitive my, OsmPrimitive their, List<TagMergeItem> mergeItems) { 
    59         this.conflict = new Conflict<OsmPrimitive>(my,their); 
     58    public TagConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict, List<TagMergeItem> mergeItems) { 
     59        this.conflict = conflict; 
    6060        this.mergeItems = mergeItems; 
    6161    } 
  • trunk/src/org/openstreetmap/josm/command/VersionConflictResolveCommand.java

    r2844 r3034  
    2424 
    2525    /** the conflict to resolve */ 
    26     private Conflict<OsmPrimitive> conflict; 
     26    private Conflict<? extends OsmPrimitive> conflict; 
    2727 
    2828    /** 
     
    3131     * @param their their primitive (i.e. the primitive from the server) 
    3232     */ 
    33     public VersionConflictResolveCommand(OsmPrimitive my, OsmPrimitive their) { 
    34         conflict = new Conflict<OsmPrimitive>(my, their); 
     33    public VersionConflictResolveCommand(Conflict<? extends OsmPrimitive> conflict) { 
     34        this.conflict = conflict; 
    3535    } 
    3636 
     
    3939        String msg = ""; 
    4040        switch(OsmPrimitiveType.from(conflict.getMy())) { 
    41             case NODE: msg = marktr("Resolve version conflict for node {0}"); break; 
    42             case WAY: msg = marktr("Resolve version conflict for way {0}"); break; 
    43             case RELATION: msg = marktr("Resolve version conflict for relation {0}"); break; 
     41        case NODE: msg = marktr("Resolve version conflict for node {0}"); break; 
     42        case WAY: msg = marktr("Resolve version conflict for way {0}"); break; 
     43        case RELATION: msg = marktr("Resolve version conflict for relation {0}"); break; 
    4444        } 
    4545        return new DefaultMutableTreeNode( 
  • trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java

    r2512 r3034  
    4141     * @param mergedNodeList  the list of merged nodes 
    4242     */ 
    43     public WayNodesConflictResolverCommand(Way my, Way their, List<Node> mergedNodeList) { 
    44         conflict = new Conflict<Way>(my,their); 
     43    @SuppressWarnings("unchecked") 
     44    public WayNodesConflictResolverCommand(Conflict<? extends OsmPrimitive> conflict, List<Node> mergedNodeList) { 
     45        this.conflict = (Conflict<Way>) conflict; 
    4546        this.mergedNodeList = mergedNodeList; 
    4647    } 
  • trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java

    r2979 r3034  
    2121    private final T my; 
    2222    private final T their; 
     23    private final boolean isMyDeleted; 
    2324 
    2425    public Conflict(T my, T their) { 
     26        this(my, their, false); 
     27    } 
     28 
     29    public Conflict(T my, T their, boolean isMyDeleted) { 
    2530        this.my = my; 
    2631        this.their = their; 
     32        this.isMyDeleted = isMyDeleted; 
    2733    } 
    2834 
     
    96102        return true; 
    97103    } 
     104 
     105    /** 
     106     *  
     107     * @return True if my primitive was deleted but it has set non deleted status because it's referred by another 
     108     * primitive and references to deleted primitives are not allowed. 
     109     */ 
     110    public boolean isMyDeleted() { 
     111        return isMyDeleted; 
     112    } 
    98113} 
  • trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java

    r2949 r3034  
    3333 * </ul> 
    3434 */ 
    35 public class ConflictCollection implements Iterable<Conflict<?>>{ 
    36     private final List<Conflict<?>> conflicts; 
     35public class ConflictCollection implements Iterable<Conflict<? extends OsmPrimitive>>{ 
     36    private final List<Conflict<? extends OsmPrimitive>> conflicts; 
    3737    private CopyOnWriteArrayList<IConflictListener> listeners; 
    3838 
  • trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java

    r3033 r3034  
    1313import java.util.logging.Logger; 
    1414 
     15import org.openstreetmap.josm.data.conflict.Conflict; 
    1516import org.openstreetmap.josm.data.conflict.ConflictCollection; 
    1617import org.openstreetmap.josm.tools.CheckParameterUtil; 
     
    160161     * @param other 
    161162     */ 
     163    //TODO This method is probably useless 
    162164    protected void fixIncompleteParentWays(Node other) { 
    163165        Node myNode = (Node)getMergeTarget(other); 
     
    224226                    newNodes.add(targetNode); 
    225227                    if (targetNode.isDeleted() && !conflicts.hasConflictForMy(targetNode)) { 
    226                         conflicts.add(targetNode, sourceNode); 
     228                        conflicts.add(new Conflict<OsmPrimitive>(targetNode, sourceNode, true)); 
     229                        targetNode.setDeleted(false); 
    227230                    } 
    228231                } else { 
     
    255258                newMembers.add(newMember); 
    256259                if (targetMember.isDeleted() && !conflicts.hasConflictForMy(targetMember)) { 
    257                     conflicts.add(targetMember, sourceMember.getMember()); 
     260                    conflicts.add(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true)); 
     261                    targetMember.setDeleted(false); 
    258262                } 
    259263            } else { 
     
    319323            for (OsmPrimitive referrer: source.getReferrers()) { 
    320324                if (targetDataSet.getPrimitiveById(referrer.getPrimitiveId()) == null) { 
    321                     conflicts.add(target, source); 
     325                    conflicts.add(new Conflict<OsmPrimitive>(target, source, true)); 
     326                    target.setDeleted(false); 
    322327                    break; 
    323328                } 
  • trunk/src/org/openstreetmap/josm/data/osm/User.java

    r2863 r3034  
    2727 
    2828    private static long getNextLocalUid() { 
    29         synchronized(User.class) { 
    30             return uidCounter.decrementAndGet(); 
    31         } 
     29        return uidCounter.decrementAndGet(); 
    3230    } 
    3331 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java

    r2945 r3034  
    1919import org.openstreetmap.josm.command.SequenceCommand; 
    2020import org.openstreetmap.josm.command.VersionConflictResolveCommand; 
     21import org.openstreetmap.josm.data.conflict.Conflict; 
    2122import org.openstreetmap.josm.data.osm.Node; 
    2223import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     
    7778    private OsmPrimitive my; 
    7879    private OsmPrimitive their; 
     80    private Conflict<? extends OsmPrimitive> conflict; 
    7981 
    8082    private ImageIcon mergeComplete; 
     
    228230     * 
    229231     */ 
    230     public void populate(OsmPrimitive my, OsmPrimitive their) { 
    231         setMy(my); 
    232         setTheir(their); 
    233         propertiesMerger.populate(my, their); 
     232    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
     233        setMy(conflict.getMy()); 
     234        setTheir(conflict.getTheir()); 
     235        this.conflict = conflict; 
     236        propertiesMerger.populate(conflict); 
    234237        if (propertiesMerger.getModel().hasVisibleStateConflict()) { 
    235238            tabbedPane.setEnabledAt(1, false); 
     
    239242        } 
    240243        tabbedPane.setEnabledAt(0, true); 
    241         tagMerger.populate(my, their); 
     244        tagMerger.populate(conflict); 
    242245        tabbedPane.setEnabledAt(1, true); 
    243246 
     
    246249            tabbedPane.setEnabledAt(3,false); 
    247250        } else if (my instanceof Way) { 
    248             nodeListMerger.populate(my, their); 
     251            nodeListMerger.populate(conflict); 
    249252            tabbedPane.setEnabledAt(2, true); 
    250253            tabbedPane.setEnabledAt(3, false); 
     
    252255            tabbedPane.setIconAt(3, null); 
    253256        } else if (my instanceof Relation) { 
    254             relationMemberMerger.populate(my, their); 
     257            relationMemberMerger.populate(conflict); 
    255258            tabbedPane.setEnabledAt(2, false); 
    256259            tabbedPane.setTitleAt(2,tr("Nodes")); 
     
    271274        if (propertiesMerger.getModel().hasVisibleStateConflict()) { 
    272275            if (propertiesMerger.getModel().isDecidedVisibleState()) { 
    273                 commands.addAll(propertiesMerger.getModel().buildResolveCommand(my, their)); 
     276                commands.addAll(propertiesMerger.getModel().buildResolveCommand(conflict)); 
    274277            } 
    275278        } else { 
    276279            if (tagMerger.getModel().getNumResolvedConflicts() > 0) { 
    277                 commands.add(tagMerger.getModel().buildResolveCommand(my, their)); 
    278             } 
    279             commands.addAll(propertiesMerger.getModel().buildResolveCommand(my, their)); 
     280                commands.add(tagMerger.getModel().buildResolveCommand(conflict)); 
     281            } 
     282            commands.addAll(propertiesMerger.getModel().buildResolveCommand(conflict)); 
    280283            if (my instanceof Way && nodeListMerger.getModel().isFrozen()) { 
    281284                NodeListMergeModel model  =(NodeListMergeModel)nodeListMerger.getModel(); 
    282                 commands.add(model.buildResolveCommand((Way)my, (Way)their)); 
     285                commands.add(model.buildResolveCommand(conflict)); 
    283286            } else if (my instanceof Relation && relationMemberMerger.getModel().isFrozen()) { 
    284287                RelationMemberListMergeModel model  =(RelationMemberListMergeModel)relationMemberMerger.getModel(); 
     
    286289            } 
    287290            if (isResolvedCompletely()) { 
    288                 commands.add(new VersionConflictResolveCommand(my, their)); 
    289                 commands.add(new ModifiedConflictResolveCommand(my, their)); 
     291                commands.add(new VersionConflictResolveCommand(conflict)); 
     292                commands.add(new ModifiedConflictResolveCommand(conflict)); 
    290293            } 
    291294        } 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java

    r2945 r3034  
    22package org.openstreetmap.josm.gui.conflict.pair; 
    33 
     4import org.openstreetmap.josm.data.conflict.Conflict; 
    45import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    56 
     
    78 
    89    void deletePrimitive(boolean deleted); 
    9     void populate(OsmPrimitive my, OsmPrimitive their); 
     10    void populate(Conflict<? extends OsmPrimitive> conflict); 
    1011 
    1112} 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java

    r2949 r3034  
    99 
    1010import org.openstreetmap.josm.command.WayNodesConflictResolverCommand; 
     11import org.openstreetmap.josm.data.conflict.Conflict; 
    1112import org.openstreetmap.josm.data.osm.DataSet; 
    1213import org.openstreetmap.josm.data.osm.Node; 
     
    6162     * @param their  their way. Must not be null 
    6263     * @return the command 
    63      * @exception IllegalArgumentException thrown, if my is null or not a {@see Way} 
    64      * @exception IllegalArgumentException thrown, if their is null or not a {@see Way} 
    6564     * @exception IllegalStateException thrown, if the merge is not yet frozen 
    6665     */ 
    67     public WayNodesConflictResolverCommand buildResolveCommand(Way my, Way their) { 
    68         CheckParameterUtil.ensureParameterNotNull(my, "my"); 
    69         CheckParameterUtil.ensureParameterNotNull(their, "their"); 
     66    public WayNodesConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) { 
    7067        if (! isFrozen()) 
    7168            throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Cannot build resolution command.")); 
    72         return new WayNodesConflictResolverCommand(my, their, getMergedEntries()); 
     69        return new WayNodesConflictResolverCommand(conflict, getMergedEntries()); 
    7370    } 
    7471 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java

    r2945 r3034  
    44import javax.swing.JTable; 
    55 
     6import org.openstreetmap.josm.data.conflict.Conflict; 
    67import org.openstreetmap.josm.data.osm.Node; 
    78import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     
    6364    } 
    6465 
    65     public void populate(OsmPrimitive my, OsmPrimitive their) { 
    66         ((NodeListMergeModel)model).populate((Way)my, (Way)their); 
     66    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
     67        ((NodeListMergeModel)model).populate((Way)conflict.getMy(), (Way)conflict.getTheir()); 
    6768    } 
    6869 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergeModel.java

    r2940 r3034  
    2121import org.openstreetmap.josm.command.PurgePrimitivesCommand; 
    2222import org.openstreetmap.josm.command.UndeletePrimitivesCommand; 
     23import org.openstreetmap.josm.data.conflict.Conflict; 
    2324import org.openstreetmap.josm.data.coor.LatLon; 
    2425import org.openstreetmap.josm.data.osm.DataSet; 
     
    161162     * @param their their version of the primitive 
    162163     */ 
    163     public void populate(OsmPrimitive my, OsmPrimitive their) { 
    164         this.my = my; 
     164    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
     165        this.my = conflict.getMy(); 
     166        OsmPrimitive their = conflict.getTheir(); 
    165167        if (my instanceof Node) { 
    166168            myCoords = ((Node)my).getCoor(); 
     
    171173        } 
    172174 
    173         myDeletedState = my.isDeleted(); 
     175        myDeletedState =  conflict.isMyDeleted() || my.isDeleted(); 
    174176        theirDeletedState = their.isDeleted(); 
    175177 
     
    418420     * @return the list of commands 
    419421     */ 
    420     public List<Command> buildResolveCommand(OsmPrimitive my, OsmPrimitive their) throws OperationCancelledException{ 
    421         ArrayList<Command> cmds = new ArrayList<Command>(); 
     422    public List<Command> buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) throws OperationCancelledException{ 
     423        OsmPrimitive my = conflict.getMy(); 
     424        List<Command> cmds = new ArrayList<Command>(); 
    422425        if (hasVisibleStateConflict() && isDecidedVisibleState()) { 
    423426            if (isVisibleStateDecision(MergeDecisionType.KEEP_MINE)) { 
     
    436439        } 
    437440        if (hasCoordConflict() && isDecidedCoord()) { 
    438             cmds.add(new CoordinateConflictResolveCommand((Node)my, (Node)their, coordMergeDecision)); 
     441            cmds.add(new CoordinateConflictResolveCommand(conflict, coordMergeDecision)); 
    439442        } 
    440443        if (hasDeletedStateConflict() && isDecidedDeletedState()) { 
    441             cmds.add(new DeletedStateConflictResolveCommand(my, their, deletedMergeDecision)); 
     444            cmds.add(new DeletedStateConflictResolveCommand(conflict, deletedMergeDecision)); 
    442445        } 
    443446        return cmds; 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java

    r2945 r3034  
    2222import javax.swing.JPanel; 
    2323 
     24import org.openstreetmap.josm.data.conflict.Conflict; 
    2425import org.openstreetmap.josm.data.coor.LatLon; 
    2526import org.openstreetmap.josm.data.osm.OsmPrimitive; 
     
    718719    } 
    719720 
    720     public void populate(OsmPrimitive my, OsmPrimitive their) { 
    721         model.populate(my, their); 
     721    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
     722        model.populate(conflict); 
    722723    } 
    723724} 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java

    r2945 r3034  
    55import javax.swing.JTable; 
    66 
     7import org.openstreetmap.josm.data.conflict.Conflict; 
    78import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    89import org.openstreetmap.josm.data.osm.Relation; 
     
    5455    } 
    5556 
    56     public void populate(OsmPrimitive my, OsmPrimitive their) { 
     57    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
    5758        RelationMemberListMergeModel model = (RelationMemberListMergeModel)getModel(); 
    58         model.populate((Relation)my, (Relation)their); 
     59        model.populate((Relation)conflict.getMy(), (Relation)conflict.getTheir()); 
    5960    } 
    6061 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java

    r2945 r3034  
    1212 
    1313import org.openstreetmap.josm.command.TagConflictResolveCommand; 
     14import org.openstreetmap.josm.data.conflict.Conflict; 
    1415import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    1516import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType; 
     
    189190    } 
    190191 
    191     public TagConflictResolveCommand buildResolveCommand(OsmPrimitive my, OsmPrimitive their) { 
    192         return new TagConflictResolveCommand(my,  their, tagMergeItems); 
     192    public TagConflictResolveCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) { 
     193        return new TagConflictResolveCommand(conflict, tagMergeItems); 
    193194    } 
    194195 
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java

    r2945 r3034  
    2626import javax.swing.event.ListSelectionListener; 
    2727 
     28import org.openstreetmap.josm.data.conflict.Conflict; 
    2829import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    2930import org.openstreetmap.josm.gui.conflict.pair.IConflictResolver; 
     
    421422    } 
    422423 
    423     public void populate(OsmPrimitive my, OsmPrimitive their) { 
    424         model.populate(my, their); 
     424    public void populate(Conflict<? extends OsmPrimitive> conflict) { 
     425        model.populate(conflict.getMy(), conflict.getTheir()); 
    425426        mineTable.getSelectionModel().setSelectionInterval(0, 0); 
    426427        theirTable.getSelectionModel().setSelectionInterval(0, 0); 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r2945 r3034  
    144144        } 
    145145 
    146         Conflict<?> c = conflicts.get(index); 
    147         OsmPrimitive my = c.getMy(); 
    148         OsmPrimitive their = c.getTheir(); 
     146        Conflict<? extends OsmPrimitive> c = conflicts.get(index); 
    149147        ConflictResolutionDialog dialog = new ConflictResolutionDialog(Main.parent); 
    150         dialog.getConflictResolver().populate(my, their); 
     148        dialog.getConflictResolver().populate(c); 
    151149        dialog.setVisible(true); 
    152150 
  • trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergerTest.java

    r2041 r3034  
    66import javax.swing.JFrame; 
    77 
     8import org.openstreetmap.josm.data.conflict.Conflict; 
    89import org.openstreetmap.josm.data.osm.Node; 
     10import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    911import org.openstreetmap.josm.data.osm.Way; 
    10 import org.openstreetmap.josm.gui.conflict.pair.nodes.NodeListMerger; 
    1112 
    1213public class NodeListMergerTest extends JFrame { 
     
    3536        w2.addNode(new Node(6)); 
    3637 
    37         nodeListMerger.populate(w1, w2); 
     38        nodeListMerger.populate(new Conflict<OsmPrimitive>(w1, w2)); 
    3839 
    3940    } 
     
    4950            w2.addNode(new Node(i)); 
    5051        } 
    51         nodeListMerger.populate(w1, w2); 
     52        nodeListMerger.populate(new Conflict<OsmPrimitive>(w1, w2)); 
    5253 
    5354    } 
  • trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMergerTest.java

    r2077 r3034  
    77 
    88import org.openstreetmap.josm.Main; 
     9import org.openstreetmap.josm.data.conflict.Conflict; 
    910import org.openstreetmap.josm.data.coor.LatLon; 
    1011import org.openstreetmap.josm.data.osm.Node; 
     12import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    1113import org.openstreetmap.josm.data.projection.Epsg4326; 
    12 import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMerger; 
    1314 
    1415public class PropertiesMergerTest extends JFrame{ 
     
    3132        their.setCoor(new LatLon(10,10)); 
    3233 
    33         merger.getModel().populate(my, their); 
     34        merger.getModel().populate(new Conflict<OsmPrimitive>(my, their)); 
    3435    } 
    3536 
  • trunk/test/functional/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMergerTest.java

    r2041 r3034  
    66import javax.swing.JFrame; 
    77 
     8import org.openstreetmap.josm.data.conflict.Conflict; 
    89import org.openstreetmap.josm.data.osm.Node; 
     10import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    911import org.openstreetmap.josm.data.osm.Relation; 
    1012import org.openstreetmap.josm.data.osm.RelationMember; 
    1113import org.openstreetmap.josm.data.osm.Way; 
    12 import org.openstreetmap.josm.gui.conflict.pair.relation.RelationMemberMerger; 
    1314 
    1415public class RelationMemberMergerTest extends JFrame { 
     
    2829        r2.addMember(new RelationMember("role3", new Relation(3))); 
    2930 
    30         merger.populate(r1, r2); 
     31        merger.populate(new Conflict<OsmPrimitive>(r1, r2)); 
    3132 
    3233    } 
  • trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java

    r1912 r3034  
    44import javax.swing.JFrame; 
    55 
     6import org.openstreetmap.josm.data.conflict.Conflict; 
    67import org.openstreetmap.josm.data.osm.Node; 
     8import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    79import org.openstreetmap.josm.data.osm.Way; 
    810 
     
    2729        w2.addNode(new Node(11)); 
    2830 
    29         dialog.getConflictResolver().populate(w1, w2); 
     31        dialog.getConflictResolver().populate(new Conflict<OsmPrimitive>(w1, w2)); 
    3032    } 
    3133 
  • trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java

    r3025 r3034  
    815815     * Their dataset includes a way with three nodes, the first one being my node. 
    816816     * 
    817      * => the merged way should include two nodes only. the deleted node should still be 
    818      * in the data set. 
     817     * => the merged way should include all three nodes. Deleted node should have deleted=false and 
     818     * special conflict with isDeleted should exist 
    819819     * 
    820820     */ 
     
    848848        theirWay.addNode(tn2); 
    849849        theirWay.addNode(tn3); 
    850         User user = User.getById(1111); 
    851         if (user == null) { 
    852             User.createOsmUser(1111, "their"); 
    853         } 
    854         theirWay.setUser(user); 
     850        theirWay.setUser(User.createOsmUser(1111, "their")); 
    855851        theirWay.setTimestamp(new Date()); 
    856852        their.addPrimitive(theirWay); 
     
    860856 
    861857        assertEquals(1, visitor.getConflicts().size()); 
     858        assertTrue(visitor.getConflicts().get(0).isMyDeleted()); 
    862859 
    863860        Way myWay = (Way)my.getPrimitiveById(4, OsmPrimitiveType.WAY); 
     
    865862 
    866863        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE); 
    867         assertTrue(!myWay.getNodes().contains(n)); 
    868         assertTrue(n != null); 
    869  
    870         //a node was removed from the way,it should thus be modified 
    871         assertTrue(myWay.isModified()); 
     864        assertTrue(myWay.getNodes().contains(n)); 
     865 
     866        assertFalse(myWay.isModified()); 
    872867    } 
    873868 
     
    876871     * Their dataset includes a relation with three nodes, the first one being my node. 
    877872     * 
    878      * => the merged relation should include two nodes only. the deleted node should still be 
    879      * in the data set 
     873     * => the merged relation should include all three nodes. There should be conflict for deleted 
     874     * node with isMyDeleted set 
    880875     * 
    881876     */ 
     
    884879 
    885880 
    886         Node n1 = new Node(new LatLon(0,0)); 
    887         n1.setOsmId(1,1); 
    888         n1.setDeleted(true); 
    889         my.addPrimitive(n1); 
    890  
    891  
    892         Node n3 = new Node(new LatLon(0,0)); 
    893         n3.setOsmId(1,1); 
    894         their.addPrimitive(n3); 
    895  
    896         Node n4 = new Node(new LatLon(1,1)); 
    897         n4.setOsmId(2,1); 
    898         their.addPrimitive(n4); 
    899  
    900         Node n5 = new Node(new LatLon(2,2)); 
    901         n5.setOsmId(3,1); 
    902         their.addPrimitive(n5); 
     881        Node mn1 = new Node(new LatLon(0,0)); 
     882        mn1.setOsmId(1,1); 
     883        mn1.setDeleted(true); 
     884        my.addPrimitive(mn1); 
     885 
     886 
     887        Node tn1 = new Node(new LatLon(0,0)); 
     888        tn1.setOsmId(1,1); 
     889        their.addPrimitive(tn1); 
     890 
     891        Node tn2 = new Node(new LatLon(1,1)); 
     892        tn2.setOsmId(2,1); 
     893        their.addPrimitive(tn2); 
     894 
     895        Node tn3 = new Node(new LatLon(2,2)); 
     896        tn3.setOsmId(3,1); 
     897        their.addPrimitive(tn3); 
    903898 
    904899 
     
    906901        theirRelation.setOsmId(4,1); 
    907902 
    908         theirRelation.addMember(new RelationMember("", n3)); 
    909         theirRelation.addMember(new RelationMember("", n4)); 
    910         theirRelation.addMember(new RelationMember("", n5)); 
     903        theirRelation.addMember(new RelationMember("", tn1)); 
     904        theirRelation.addMember(new RelationMember("", tn2)); 
     905        theirRelation.addMember(new RelationMember("", tn3)); 
    911906        their.addPrimitive(theirRelation); 
    912907 
    913908        DataSetMerger visitor = new DataSetMerger(my,their); 
    914909        visitor.merge(); 
    915  
    916         assertEquals(0,visitor.getConflicts().size()); 
    917  
    918         Relation r = (Relation)my.getPrimitiveById(4,OsmPrimitiveType.RELATION); 
    919         assertEquals(2, r.getMembersCount()); 
    920910 
    921911        Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE); 
    922912        assertTrue(n != null); 
    923913 
    924         assertTrue(r.isModified()); 
     914        assertEquals(1, visitor.getConflicts().size()); 
     915        assertTrue(visitor.getConflicts().hasConflictForMy(n)); 
     916        assertTrue(visitor.getConflicts().get(0).isMyDeleted()); 
     917 
     918        Relation r = (Relation)my.getPrimitiveById(4,OsmPrimitiveType.RELATION); 
     919        assertEquals(3, r.getMembersCount()); 
     920 
     921        assertFalse(r.isModified()); 
    925922    } 
    926923 
  • trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java

    r3025 r3034  
    1212import org.junit.Test; 
    1313import org.openstreetmap.josm.Main; 
     14import org.openstreetmap.josm.data.conflict.Conflict; 
    1415import org.openstreetmap.josm.data.coor.LatLon; 
    1516import org.openstreetmap.josm.data.osm.DataSet; 
    1617import org.openstreetmap.josm.data.osm.Node; 
     18import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    1719import org.openstreetmap.josm.data.osm.Relation; 
    1820import org.openstreetmap.josm.data.osm.Way; 
     
    4749    } 
    4850 
     51    private void populate(OsmPrimitive my, OsmPrimitive their) { 
     52        model.populate(new Conflict<OsmPrimitive>(my, their)); 
     53    } 
     54 
    4955    @Test 
    5056    public void populate() { 
     
    5561        d1.addPrimitive(n1); 
    5662        d2.addPrimitive(n2); 
    57         model.populate(n1, n2); 
     63        populate(n1, n2); 
    5864 
    5965        Way w1 = new Way(1); 
     
    6167        d1.addPrimitive(w1); 
    6268        d2.addPrimitive(w2); 
    63         model.populate(w2, w2); 
     69        populate(w2, w2); 
    6470 
    6571        Relation r1 = new Relation(1); 
     
    6773        d1.addPrimitive(r1); 
    6874        d2.addPrimitive(r2); 
    69         model.populate(r1, r2); 
     75        populate(r1, r2); 
    7076    } 
    7177 
     
    7985        d1.addPrimitive(n1); 
    8086        d2.addPrimitive(n2); 
    81         model.populate(n1, n2); 
     87        populate(n1, n2); 
    8288        assertFalse(model.hasCoordConflict()); 
    8389 
    8490        n1.setCoor(new LatLon(1,1)); 
    85         model.populate(n1, n2); 
     91        populate(n1, n2); 
    8692        assertTrue(model.hasCoordConflict()); 
    8793 
     
    8995        n1.cloneFrom(new Node(1)); 
    9096        n2.setCoor(new LatLon(2,2)); 
    91         model.populate(n1, n2); 
     97        populate(n1, n2); 
    9298        assertTrue(model.hasCoordConflict()); 
    9399 
    94100        n1.setCoor(new LatLon(1,1)); 
    95101        n2.setCoor(new LatLon(2,2)); 
    96         model.populate(n1, n2); 
     102        populate(n1, n2); 
    97103        assertTrue(model.hasCoordConflict()); 
    98104 
Note: See TracChangeset for help on using the changeset viewer.