Changeset 21664 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-06-12T01:14:01+02:00 (14 years ago)
Author:
upliner
Message:

better handling of deleted objects and its referrers

Location:
applications/editors/josm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java

    r21659 r21664  
    181181            }
    182182        }
    183         layer.mergeFrom(rdr.parseOsm(monitor));
     183        DataSet source = rdr.parseOsm(monitor);
     184        for (OsmPrimitive p : source.allPrimitives()) {
     185            if (!p.isVisible() && !p.isDeleted()) {
     186                p.setDeleted(true);
     187                p.setModified(false);
     188            }
     189        }
     190        layer.mergeFrom(source);
    184191        missing.clear();
    185192    }
     
    205212       
    206213        //////////////////////////////////////////////////////////////////////////
    207         // Create commands to restore/update all affected objects
    208         LinkedList<Command> cmds = new DataSetToCmd(nds,ds).getCommandList();
     214        // Create commands to restore/update all affected objects
     215        DataSetToCmd merger = new DataSetToCmd(nds,ds);
     216        LinkedList<Command> cmds = merger.getCommandList();
    209217
    210218        //////////////////////////////////////////////////////////////////////////
     
    230238       
    231239        HashSet<OsmPrimitive> conflicted = new HashSet<OsmPrimitive>();
     240       
     241        for (Conflict<? extends OsmPrimitive> conflict : merger.getConflicts()) {
     242            cmds.add(new ConflictAddCommand(layer,conflict));
     243        }
     244       
    232245        // Check objects versions
    233246        Iterator<ChangesetDataSetEntry> iterator = cds.iterator();
     
    251264         */
    252265        for (OsmPrimitive p : toDelete.toArray(new OsmPrimitive[0])) {
     266            if (p.isDeleted()) {
     267                toDelete.remove(p);
     268                continue;
     269            }
    253270            for (OsmPrimitive referrer : p.getReferrers()) {
    254271                if (toDelete.contains(referrer)) continue; // object is going to be deleted
  • applications/editors/josm/plugins/reverter/src/reverter/DataSetToCmd.java

    r21659 r21664  
    1010import org.openstreetmap.josm.command.ChangeNodesCommand;
    1111import org.openstreetmap.josm.command.Command;
     12import org.openstreetmap.josm.data.conflict.Conflict;
     13import org.openstreetmap.josm.data.conflict.ConflictCollection;
    1214import org.openstreetmap.josm.data.osm.*;
    1315
     
    1921final class DataSetToCmd {
    2022
     23    /** the collection of conflicts created during merging */
     24    private final ConflictCollection conflicts = new ConflictCollection();
    2125    /** the source dataset where primitives are merged from */
    2226    private final DataSet sourceDataSet;
     
    97101        for (Node sourceNode : source.getNodes()) {
    98102            Node targetNode = (Node)getMergeTarget(sourceNode);
     103            if (targetNode.isDeleted() && sourceNode.isIncomplete()
     104                    && !conflicts.hasConflictForMy(targetNode)) {
     105                conflicts.add(new Conflict<OsmPrimitive>(targetNode, sourceNode, true));
     106                Node undeletedTargetNode = new Node(targetNode);
     107                undeletedTargetNode.setDeleted(false);
     108                cmds.add(new ChangeCommand(targetNode,undeletedTargetNode));
     109            }
    99110            newNodes.add(targetNode);
    100111        }
     
    116127        for (RelationMember sourceMember : source.getMembers()) {
    117128            OsmPrimitive targetMember = getMergeTarget(sourceMember.getMember());
     129            if (targetMember.isDeleted() && sourceMember.getMember().isIncomplete()
     130                    && !conflicts.hasConflictForMy(targetMember)) {
     131                conflicts.add(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true));
     132                OsmPrimitive undeletedTargetMember;
     133                switch(targetMember.getType()) {
     134                case NODE: undeletedTargetMember = new Node((Node)targetMember); break;
     135                case WAY: undeletedTargetMember = new Way((Way)targetMember); break;
     136                case RELATION: undeletedTargetMember = new Relation((Relation)targetMember); break;
     137                default: throw new AssertionError();
     138                }
     139                undeletedTargetMember.setDeleted(false);
     140                cmds.add(new ChangeCommand(targetMember,undeletedTargetMember));
     141            }
    118142            newMembers.add(new RelationMember(sourceMember.getRole(), targetMember));
    119143        }
     
    138162        return cmds;
    139163    }
     164
     165    /**
     166     * replies the map of conflicts
     167     *
     168     * @return the map of conflicts
     169     */
     170    public ConflictCollection getConflicts() {
     171        return conflicts;
     172    }
    140173}
Note: See TracChangeset for help on using the changeset viewer.