Ignore:
Timestamp:
2009-09-30T20:00:57+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3556: False positive conflicts when merging nodes
fixed #3460: show only conflicting tags at conflict resolution dialog
fixed #3103: resolve conflicts after combining just one conflict

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java

    r2070 r2220  
    3838
    3939    static private List<Class<? extends OsmPrimitive>> osmPrimitiveClasses;
    40     {
     40    static {
    4141        osmPrimitiveClasses = new ArrayList<Class<? extends OsmPrimitive>>();
    4242        osmPrimitiveClasses.add(Node.class);
     
    6060
    6161    /**
    62      * Replies the subset  of {@see OsmPrimitive}s of <code>type</code> from <code>superSet</code>.
    63      *
    64      * @param <T>
    65      * @param superSet  the super set of primitives
    66      * @param type  the type
    67      * @return
    68      */
    69     protected <T extends OsmPrimitive> Collection<? extends OsmPrimitive> getSubcollectionByType(Collection<? extends OsmPrimitive> superSet, Class<T> type) {
    70         Collection<OsmPrimitive> ret = new ArrayList<OsmPrimitive>();
    71         for (OsmPrimitive p : superSet) {
    72             if (type.isInstance(p)) {
    73                 ret.add(p);
    74             }
    75         }
    76         return ret;
    77     }
    78 
    79     /**
    8062     * Replies all primitives of type <code>type</code> in the current selection.
    8163     *
     
    8567     */
    8668    protected <T extends OsmPrimitive> Collection<? extends OsmPrimitive> getSourcePrimitivesByType(Class<T> type) {
    87         return getSubcollectionByType(Main.pasteBuffer.getSelected(), type);
     69        return OsmPrimitive.getFilteredList(Main.pasteBuffer.getSelected(), type);
    8870    }
    8971
     
    145127        HashMap<OsmPrimitiveType, Integer> ret = new HashMap<OsmPrimitiveType, Integer>();
    146128        for (Class<? extends OsmPrimitive> type: osmPrimitiveClasses) {
    147             int count = getSubcollectionByType(getEditLayer().data.getSelected(), type).size();
     129            int count = OsmPrimitive.getFilteredList(getEditLayer().data.getSelected(), type).size();
    148130            if (count > 0) {
    149131                ret.put(OsmPrimitiveType.from(type), count);
     
    173155            // no tags found to paste. Abort.
    174156            return;
    175 
    176157
    177158        if (!tc.isApplicableToPrimitive()) {
     
    202183     * <code>selection</code>
    203184     */
    204     protected <T extends OsmPrimitive> boolean hasTargetPrimitives(Collection<? extends OsmPrimitive> selection, Class<T> type) {
    205         return !getSubcollectionByType(selection, type).isEmpty();
     185    protected <T extends OsmPrimitive> boolean hasTargetPrimitives(Collection<OsmPrimitive> selection, Class<T> type) {
     186        return !OsmPrimitive.getFilteredList(selection, type).isEmpty();
    206187    }
    207188
     
    212193     * @return true if this a heterogeneous source can be pasted without conflicts to targets
    213194     */
    214     protected boolean canPasteFromHeterogeneousSourceWithoutConflict(Collection<? extends OsmPrimitive> targets) {
     195    protected boolean canPasteFromHeterogeneousSourceWithoutConflict(Collection<OsmPrimitive> targets) {
    215196        if (hasTargetPrimitives(targets, Node.class)) {
    216197            TagCollection tc = TagCollection.unionOfAllPrimitives(getSourcePrimitivesByType(Node.class));
     
    237218     * @param targets the collection of target primitives
    238219     */
    239     protected void pasteFromHeterogeneousSource(Collection<? extends OsmPrimitive> targets) {
     220    protected void pasteFromHeterogeneousSource(Collection<OsmPrimitive> targets) {
    240221        if (canPasteFromHeterogeneousSourceWithoutConflict(targets)) {
    241222            if (hasSourceTagsByType(Node.class) && hasTargetPrimitives(targets, Node.class)) {
     
    264245                return;
    265246            if (hasSourceTagsByType(Node.class) && hasTargetPrimitives(targets, Node.class)) {
    266                 Command cmd = buildChangeCommand(getSubcollectionByType(targets, Node.class), dialog.getResolution(OsmPrimitiveType.NODE));
     247                Command cmd = buildChangeCommand(OsmPrimitive.getFilteredList(targets, Node.class), dialog.getResolution(OsmPrimitiveType.NODE));
    267248                Main.main.undoRedo.add(cmd);
    268249            }
    269250            if (hasSourceTagsByType(Way.class) && hasTargetPrimitives(targets, Way.class)) {
    270                 Command cmd = buildChangeCommand(getSubcollectionByType(targets, Way.class), dialog.getResolution(OsmPrimitiveType.WAY));
     251                Command cmd = buildChangeCommand(OsmPrimitive.getFilteredList(targets, Way.class), dialog.getResolution(OsmPrimitiveType.WAY));
    271252                Main.main.undoRedo.add(cmd);
    272253            }
    273254            if (hasSourceTagsByType(Relation.class) && hasTargetPrimitives(targets, Relation.class)) {
    274                 Command cmd = buildChangeCommand(getSubcollectionByType(targets, Relation.class), dialog.getResolution(OsmPrimitiveType.RELATION));
     255                Command cmd = buildChangeCommand(OsmPrimitive.getFilteredList(targets, Relation.class), dialog.getResolution(OsmPrimitiveType.RELATION));
    275256                Main.main.undoRedo.add(cmd);
    276257            }
Note: See TracChangeset for help on using the changeset viewer.