Hi,
Patch 0002 stops the purging of deleted primitives that have not been
uploaded after upload. 

The remaining patches are cleanups, during the process of finding 0002.

Thanks,
Matthew Bell
From 665237e67fb2f768075709ba5579e737a9877d58 Mon Sep 17 00:00:00 2001
From: Matthew W. S. Bell <[email protected]>
Date: Fri, 6 Aug 2010 16:32:03 +0100
Subject: [PATCH 1/4] Correct method and variable names

---
 .../josm/actions/UploadSelectionAction.java        |    6 +++---
 src/org/openstreetmap/josm/data/osm/DataSet.java   |    2 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |    2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
index 99ba771..4ce7ba3 100644
--- a/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
+++ b/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
@@ -92,8 +92,8 @@ public class UploadSelectionAction extends JosmAction{
         UploadHullBuilder builder = new UploadHullBuilder();
         UploadSelectionDialog dialog = new UploadSelectionDialog();
         Collection<OsmPrimitive> modifiedCandidates = getModifiedPrimitives(getEditLayer().data.getSelected());
-        Collection<OsmPrimitive> deletedCandiates = getDeletedPrimitives(getEditLayer().data);
-        if (modifiedCandidates.isEmpty() && deletedCandiates.isEmpty()) {
+        Collection<OsmPrimitive> deletedCandidates = getDeletedPrimitives(getEditLayer().data);
+        if (modifiedCandidates.isEmpty() && deletedCandidates.isEmpty()) {
             JOptionPane.showMessageDialog(
                     Main.parent,
                     tr("No changes to upload."),
@@ -104,7 +104,7 @@ public class UploadSelectionAction extends JosmAction{
         }
         dialog.populate(
                 modifiedCandidates,
-                deletedCandiates
+                deletedCandidates
         );
         dialog.setVisible(true);
         if (dialog.isCanceled())
diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index dad88dc..712f9d9 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -948,7 +948,7 @@ public class DataSet implements Cloneable {
         highlightUpdateCount++;
     }
 
-    public void clenupDeletedPrimitives() {
+    public void cleanupDeletedPrimitives() {
         beginUpdate();
         try {
             if (cleanupDeleted(nodes.iterator())
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index c550d63..e1ac3dd 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -399,7 +399,7 @@ public class OsmDataLayer extends Layer implements Listener, SelectionChangedLis
         Main.main.undoRedo.clean(this);
 
         // if uploaded, clean the modified flags as well
-        data.clenupDeletedPrimitives();
+        data.cleanupDeletedPrimitives();
         for (OsmPrimitive p: data.allPrimitives()) {
             if (processed.contains(p)) {
                 p.setModified(false);
-- 
1.7.1

From cd28eedf8d0625eb22391bcb7c2d4d124a8d5b2a Mon Sep 17 00:00:00 2001
From: Matthew W. S. Bell <[email protected]>
Date: Fri, 6 Aug 2010 16:34:08 +0100
Subject: [PATCH 2/4] Only cleanup uploaded deleted nodes.

---
 src/org/openstreetmap/josm/data/osm/DataSet.java   |    2 +-
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 712f9d9..dad5df3 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSet.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSet.java
@@ -965,7 +965,7 @@ public class DataSet implements Cloneable {
         boolean changed = false;
         while (it.hasNext()) {
             OsmPrimitive primitive = it.next();
-            if (primitive.isDeleted()) {
+            if (primitive.isDeleted() && !primitive.isModified()) {
                 selectedPrimitives.remove(primitive);
                 storeAllPrimitives.remove(primitive);
                 primitive.setDataset(null);
diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index e1ac3dd..b516865 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -399,12 +399,12 @@ public class OsmDataLayer extends Layer implements Listener, SelectionChangedLis
         Main.main.undoRedo.clean(this);
 
         // if uploaded, clean the modified flags as well
-        data.cleanupDeletedPrimitives();
         for (OsmPrimitive p: data.allPrimitives()) {
             if (processed.contains(p)) {
                 p.setModified(false);
             }
         }
+        data.cleanupDeletedPrimitives();
     }
 
 
-- 
1.7.1

From b4f0c8f5fb7401daa0e9cd16961dab09e2b706ba Mon Sep 17 00:00:00 2001
From: Matthew W. S. Bell <[email protected]>
Date: Sat, 7 Aug 2010 00:33:06 +0100
Subject: [PATCH 3/4] Iterate over target collection, instead of larger collection and then
 checking to see if each item is in the target collection.

---
 .../openstreetmap/josm/gui/layer/OsmDataLayer.java |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
index b516865..133e312 100644
--- a/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
@@ -399,10 +399,8 @@ public class OsmDataLayer extends Layer implements Listener, SelectionChangedLis
         Main.main.undoRedo.clean(this);
 
         // if uploaded, clean the modified flags as well
-        for (OsmPrimitive p: data.allPrimitives()) {
-            if (processed.contains(p)) {
-                p.setModified(false);
-            }
+        for (OsmPrimitive p: processed) {
+            p.setModified(false);
         }
         data.cleanupDeletedPrimitives();
     }
-- 
1.7.1

From ea23f6e4804b2650cfec7d955ebf2203b9ec1d4e Mon Sep 17 00:00:00 2001
From: Matthew W. S. Bell <[email protected]>
Date: Sat, 7 Aug 2010 01:00:22 +0100
Subject: [PATCH 4/4] Whitespace

---
 .../openstreetmap/josm/data/osm/DataSetMerger.java |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
index e2b032a..5048188 100644
--- a/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
+++ b/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
@@ -92,9 +92,9 @@ public class DataSetMerger {
             // yet but which is equal in its semantic attributes
             //
             Collection<? extends OsmPrimitive> candidates = null;
-            switch(source.getType()) {
+            switch (source.getType()) {
             case NODE: candidates = targetDataSet.getNodes(); break;
-            case WAY: candidates  =targetDataSet.getWays(); break;
+            case WAY: candidates  = targetDataSet.getWays(); break;
             case RELATION: candidates = targetDataSet.getRelations(); break;
             default: throw new AssertionError();
             }
@@ -132,7 +132,7 @@ public class DataSetMerger {
         objectsWithChildrenToMerge.add(source.getPrimitiveId());
     }
 
-    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) throws IllegalStateException{
+    protected OsmPrimitive getMergeTarget(OsmPrimitive mergeSource) throws IllegalStateException {
         PrimitiveId targetId = mergedMap.get(mergeSource.getPrimitiveId());
         if (targetId == null)
             return null;
@@ -256,7 +256,7 @@ public class DataSetMerger {
             // target and source are incomplete. Doesn't matter which one to
             // take. We take target.
             //
-        } else if (target.isDeleted() && ! source.isDeleted() && target.getVersion() == source.getVersion()) {
+        } else if (target.isDeleted() && !source.isDeleted() && target.getVersion() == source.getVersion()) {
             // same version, but target is deleted. Assume target takes precedence
             // otherwise too many conflicts when refreshing from the server
             // but, if source has a referrer that is not in the target dataset there is a conflict
@@ -273,7 +273,7 @@ public class DataSetMerger {
             // happen if one layer is merged onto another layer
             //
             conflicts.add(target,source);
-        } else if (! target.isModified() && source.isModified()) {
+        } else if (!target.isModified() && source.isModified()) {
             // target not modified. We can assume that source is the most recent version.
             // clone it into target. But check first, whether source is deleted. if so,
             // make sure that target is not referenced any more in myDataSet. If it is there
@@ -286,23 +286,23 @@ public class DataSetMerger {
                 target.mergeFrom(source);
                 objectsWithChildrenToMerge.add(source.getPrimitiveId());
             }
-        } else if (! target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
+        } else if (!target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
             // both not modified. Merge nevertheless.
             // This helps when updating "empty" relations, see #4295
             target.mergeFrom(source);
             objectsWithChildrenToMerge.add(source.getPrimitiveId());
-        } else if (! target.isModified() && !source.isModified() && target.getVersion() < source.getVersion()) {
+        } else if (!target.isModified() && !source.isModified() && target.getVersion() < source.getVersion()) {
             // my not modified but other is newer. clone other onto mine.
             //
             target.mergeFrom(source);
             objectsWithChildrenToMerge.add(source.getPrimitiveId());
-        } else if (target.isModified() && ! source.isModified() && target.getVersion() == source.getVersion()) {
+        } else if (target.isModified() && !source.isModified() && target.getVersion() == source.getVersion()) {
             // target is same as source but target is modified
             // => keep target and reset modified flag if target and source are semantically equal
             if (target.hasEqualSemanticAttributes(source)) {
                 target.setModified(false);
             }
-        } else if (! target.hasEqualSemanticAttributes(source)) {
+        } else if (!target.hasEqualSemanticAttributes(source)) {
             // target is modified and is not semantically equal with source. Can't automatically
             // resolve the differences
             // =>  create a conflict
-- 
1.7.1

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
josm-dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/josm-dev

Reply via email to