Ignore:
Timestamp:
2010-02-23T08:58:12+01:00 (14 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/src/org/openstreetmap/josm/gui/conflict/pair
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • 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);
Note: See TracChangeset for help on using the changeset viewer.