Changeset 3336 in josm


Ignore:
Timestamp:
Jun 19, 2010 2:23:54 PM (3 years ago)
Author:
stoecker
Message:

#close #5135 - allow undeleting without recreating object - patch by Upliner

Location:
trunk/src/org/openstreetmap/josm
Files:
13 edited

Legend:

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

    r2512 r3336  
    139139    private boolean isDataSetEmpty(OsmDataLayer layer) { 
    140140        for (OsmPrimitive osm : layer.data.allNonDeletedPrimitives()) 
    141             if (!osm.isDeleted() || !osm.isNew()) 
     141            if (!osm.isDeleted() || !osm.isNewOrUndeleted()) 
    142142                return false; 
    143143        return true; 
  • trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java

    r3206 r3336  
    7878        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 
    7979        for (OsmPrimitive p: primitives) { 
    80             if (p.isNew()) { 
     80            if (p.isNewOrUndeleted()) { 
    8181                ret.add(p); 
    82             } else if (p.isVisible() && p.isModified() && !p.isIncomplete()) { 
     82            } else if (p.isModified() && !p.isIncomplete()) { 
    8383                ret.add(p); 
    8484            } 
     
    171171     * Computes the collection of primitives to upload, given a collection of candidate 
    172172     * primitives. 
    173      * Some of the candidates are excluded, i.e. if they aren't modified or if they 
    174      * aren't visible. 
     173     * Some of the candidates are excluded, i.e. if they aren't modified. 
    175174     * Other primitives are added. A typical case is a primitive which is new and and 
    176175     * which is referred by a modified relation. In order to upload the relation the 
     
    187186 
    188187        public void visit(Node n) { 
    189             if (n.isNew() || ((n.isModified() || n.isDeleted()) && n.isVisible())) { 
     188            if (n.isNewOrUndeleted() || n.isModified() || n.isDeleted()) { 
    190189                // upload new nodes as well as modified and deleted ones 
    191190                hull.add(n); 
     
    194193 
    195194        public void visit(Way w) { 
    196             if (w.isNew() || ((w.isModified() || w.isDeleted()) && w.isVisible())) { 
     195            if (w.isNewOrUndeleted() || w.isModified() || w.isDeleted()) { 
    197196                // upload new ways as well as modified and deleted ones 
    198197                hull.add(w); 
     
    206205 
    207206        public void visit(Relation r) { 
    208             if (r.isNew() || ((r.isModified() || r.isDeleted()) && r.isVisible())) { 
     207            if (r.isNewOrUndeleted() || r.isModified() || r.isDeleted()) { 
    209208                hull.add(r); 
    210209                for (OsmPrimitive p : r.getMemberPrimitives()) { 
     
    213212                    // so wont check here for deleted primitives here 
    214213                    // 
    215                     if (p.isNew()) { 
     214                    if (p.isNewOrUndeleted()) { 
    216215                        p.visit(this); 
    217216                    } 
     
    295294            HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 
    296295            for (OsmPrimitive p: toUpload) { 
    297                 if (p.isDeleted() && !p.isNew()) { 
     296                if (p.isDeleted() && !p.isNewOrUndeleted()) { 
    298297                    ret.add(p); 
    299298                } 
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r3317 r3336  
    562562    private static class Modified extends Match { 
    563563        @Override public boolean match(OsmPrimitive osm) { 
    564             return osm.isModified() || osm.isNew(); 
     564            return osm.isModified() || osm.isNewOrUndeleted(); 
    565565        } 
    566566        @Override public String toString() {return "modified";} 
  • trunk/src/org/openstreetmap/josm/command/DeleteCommand.java

    r3317 r3336  
    445445                if (osm.isIncomplete()) 
    446446                    incomplete = true; 
    447                 else if (osm instanceof Node && !osm.isNew() 
     447                else if (osm instanceof Node && !osm.isNewOrUndeleted() 
    448448                && !a.contains(((Node) osm).getCoor())) 
    449449                    outside = true; 
  • trunk/src/org/openstreetmap/josm/data/APIDataSet.java

    r3083 r3336  
    6161                continue; 
    6262            } 
    63             if (osm.isNew() && !osm.isDeleted()) { 
     63            if (osm.isNewOrUndeleted() && !osm.isDeleted()) { 
    6464                toAdd.add(osm); 
    6565            } else if (osm.isModified() && !osm.isDeleted()) { 
    6666                toUpdate.add(osm); 
    67             } else if (osm.isDeleted() && !osm.isNew() && osm.isModified()) { 
     67            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified() && osm.isVisible()) { 
    6868                toDelete.add(osm); 
    6969            } 
     
    198198        toDelete.clear(); 
    199199        for (OsmPrimitive osm: primitives) { 
    200             if (osm.isNew() && !osm.isDeleted()) { 
     200            if (osm.isNewOrUndeleted() && !osm.isDeleted()) { 
    201201                toAdd.addLast(osm); 
    202202            } else if (osm.isModified() && !osm.isDeleted()) { 
    203203                toUpdate.addLast(osm); 
    204             } else if (osm.isDeleted() && !osm.isNew() && osm.isModified()) { 
     204            } else if (osm.isDeleted() && !osm.isNew() && osm.isModified() && osm.isVisible()) { 
    205205                toDelete.addFirst(osm); 
    206206            } 
     
    312312            boolean refersToNewRelation = false; 
    313313            for (RelationMember m : relation.getMembers()) { 
    314                 if (m.isRelation() && m.getMember().isNew()) { 
     314                if (m.isRelation() && m.getMember().isNewOrUndeleted()) { 
    315315                    refersToNewRelation = true; 
    316316                    break; 
     
    350350            this.relations = new HashSet<Relation>(); 
    351351            for(Relation relation: relations) { 
    352                 if (!relation.isNew() ) { 
     352                if (!relation.isNewOrUndeleted() ) { 
    353353                    continue; 
    354354                } 
    355355                this.relations.add(relation); 
    356356                for (RelationMember m: relation.getMembers()) { 
    357                     if (m.isRelation() && m.getMember().isNew()) { 
     357                    if (m.isRelation() && m.getMember().isNewOrUndeleted()) { 
    358358                        addDependency(relation, (Relation)m.getMember()); 
    359359                    } 
  • trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java

    r3053 r3336  
    189189            Node targetNode = (Node)getMergeTarget(sourceNode); 
    190190            if (targetNode != null) { 
    191                 if (targetNode.isVisible()) { 
    192                     newNodes.add(targetNode); 
    193                     if (targetNode.isDeleted() && !conflicts.hasConflictForMy(targetNode)) { 
    194                         conflicts.add(new Conflict<OsmPrimitive>(targetNode, sourceNode, true)); 
    195                         targetNode.setDeleted(false); 
    196                     } 
    197                 } else { 
    198                     target.setModified(true); 
     191                newNodes.add(targetNode); 
     192                if (targetNode.isDeleted() && !conflicts.hasConflictForMy(targetNode)) { 
     193                    conflicts.add(new Conflict<OsmPrimitive>(targetNode, sourceNode, true)); 
     194                    targetNode.setDeleted(false); 
    199195                } 
    200196            } else 
     
    220216            if (targetMember == null) 
    221217                throw new IllegalStateException(tr("Missing merge target of type {0} with id {1}", sourceMember.getType(), sourceMember.getUniqueId())); 
    222             if (targetMember.isVisible()) { 
    223                 RelationMember newMember = new RelationMember(sourceMember.getRole(), targetMember); 
    224                 newMembers.add(newMember); 
    225                 if (targetMember.isDeleted() && !conflicts.hasConflictForMy(targetMember)) { 
    226                     conflicts.add(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true)); 
    227                     targetMember.setDeleted(false); 
    228                 } 
    229             } else { 
    230                 target.setModified(true); 
     218            RelationMember newMember = new RelationMember(sourceMember.getRole(), targetMember); 
     219            newMembers.add(newMember); 
     220            if (targetMember.isDeleted() && !conflicts.hasConflictForMy(targetMember)) { 
     221                conflicts.add(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true)); 
     222                targetMember.setDeleted(false); 
    231223            } 
    232224        } 
     
    252244            // target.version > source.version => keep target version 
    253245            return true; 
    254         if (! target.isVisible() && source.isVisible()) { 
     246        if (! target.isVisible() && source.isVisible() && target.getVersion() == source.getVersion()) { 
    255247            // should not happen 
    256             // FIXME: this message does not make sense, source version can not be lower than 
    257             //        target version at this point 
    258             logger.warning(tr("Target object with id {0} and version {1} is visible although " 
    259                     + "source object with lower version {2} is not visible. " 
    260                     + "Cannot deal with this inconsistency. Keeping target object. ", 
    261                     Long.toString(target.getId()),Long.toString(target.getVersion()), Long.toString(source.getVersion()) 
    262             )); 
     248            conflicts.add(target,source); 
    263249        } else if (target.isVisible() && ! source.isVisible()) { 
    264250            // this is always a conflict because the user has to decide whether 
  • trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java

    r3274 r3336  
    127127    public void checkZeroNodesWays() { 
    128128        for (Way way:dataSet.getWays()) { 
    129             if (way.isUsable() && way.isVisible() && way.getNodesCount() == 0) { 
     129            if (way.isUsable() && way.getNodesCount() == 0) { 
    130130                printError("WARN - ZERO NODES", "Way %s has zero nodes", way); 
    131131            } else if (way.isUsable() && way.getNodesCount() == 1) { 
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r3300 r3336  
    392392 
    393393    /** 
     394     * Replies <code>true</code> if the object has been deleted on the server and was undeleted by the user. 
     395     * @return <code>true</code> if the object has been undeleted 
     396     */ 
     397    public boolean isUndeleted() { 
     398        return (flags & (FLAG_VISIBLE + FLAG_DELETED)) == 0; 
     399    } 
     400 
     401    /** 
    394402     * Replies <code>true</code>, if the object is usable (i.e. complete 
    395403     * and not deleted). 
     
    427435    public static Predicate<OsmPrimitive> nonDeletedPredicate = new Predicate<OsmPrimitive>() { 
    428436        public boolean evaluate(OsmPrimitive primitive) { 
    429             return primitive.isVisible() && !primitive.isDeleted(); 
     437            return !primitive.isDeleted(); 
    430438        } 
    431439    }; 
     
    433441    public static Predicate<OsmPrimitive> nonDeletedCompletePredicate = new Predicate<OsmPrimitive>() { 
    434442        public boolean evaluate(OsmPrimitive primitive) { 
    435             return primitive.isVisible() && !primitive.isDeleted() && !primitive.isIncomplete(); 
     443            return !primitive.isDeleted() && !primitive.isIncomplete(); 
    436444        } 
    437445    }; 
     
    439447    public static Predicate<OsmPrimitive> nonDeletedPhysicalPredicate = new Predicate<OsmPrimitive>() { 
    440448        public boolean evaluate(OsmPrimitive primitive) { 
    441             return primitive.isVisible() && !primitive.isDeleted() && !primitive.isIncomplete() && !(primitive instanceof Relation); 
     449            return !primitive.isDeleted() && !primitive.isIncomplete() && !(primitive instanceof Relation); 
    442450        } 
    443451    }; 
     
    445453    public static Predicate<OsmPrimitive> modifiedPredicate = new Predicate<OsmPrimitive>() { 
    446454        public boolean evaluate(OsmPrimitive primitive) { 
    447             return primitive.isVisible() && primitive.isModified(); 
     455            return primitive.isModified(); 
    448456        } 
    449457    }; 
     
    537545    public boolean isNew() { 
    538546        return id <= 0; 
     547    } 
     548 
     549    /** 
     550     * 
     551     * @return True if primitive is new or undeleted 
     552     * @see #isNew() 
     553     * @see #isUndeleted() 
     554     */ 
     555    public boolean isNewOrUndeleted() { 
     556        return (id <= 0) || ((flags & (FLAG_VISIBLE + FLAG_DELETED)) == 0); 
    539557    } 
    540558 
     
    722740            flags &= ~FLAG_DELETED; 
    723741        } 
    724         setModified(deleted); 
     742        setModified(deleted ^ !isVisible()); 
    725743        if (dataSet != null) { 
    726744            if (deleted) { 
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r3327 r3336  
    420420            final StringBuilder text = new StringBuilder(); 
    421421            String name = osm.getDisplayName(DefaultNameFormatter.getInstance()); 
    422             if (osm.isNew() || osm.isModified()) { 
     422            if (osm.isNewOrUndeleted() || osm.isModified()) { 
    423423                name = "<i><b>"+ name + "*</b></i>"; 
    424424            } 
  • trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java

    r3323 r3336  
    4848 
    4949    private ValidationListener validationListener = new ValidationListener() { 
    50         @Override 
    5150        public boolean validatePreferences() { 
    5251            if (sources.hasActiveStylesChanged()) { 
  • trunk/src/org/openstreetmap/josm/io/DiffResultProcessor.java

    r3083 r3336  
    125125                if (!p.isDeleted()) { 
    126126                    p.setOsmId(entry.new_id, entry.new_version); 
     127                    p.setVisible(true); 
    127128                } 
    128129                if (cs != null && !cs.isNew()) { 
  • trunk/src/org/openstreetmap/josm/io/OsmApi.java

    r3212 r3336  
    275275            osm.setOsmId(osm.getId(), Integer.parseInt(ret.trim())); 
    276276            osm.setChangesetId(getChangeset().getId()); 
     277            osm.setVisible(true); 
    277278        } catch(NumberFormatException e) { 
    278279            throw new OsmTransferException(tr("Unexpected format of new version of modified primitive ''{0}''. Got ''{1}''.", osm.getId(), ret)); 
  • trunk/src/org/openstreetmap/josm/io/OsmWriter.java

    r3321 r3336  
    9898 
    9999    private boolean shouldWrite(OsmPrimitive osm) { 
    100         return !osm.isNew() || !osm.isDeleted(); 
     100        return !osm.isNewOrUndeleted() || !osm.isDeleted(); 
    101101    } 
    102102 
Note: See TracChangeset for help on using the changeset viewer.