
===================================================================
DESC
osmprim-selected-dont-use
EDESC

---

 core-dave/build.xml                                                           |    2 
 core-dave/src/org/openstreetmap/josm/actions/UnGlueAction.java                |    2 
 core-dave/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java          |    9 -
 core-dave/src/org/openstreetmap/josm/actions/search/SearchAction.java         |    9 -
 core-dave/src/org/openstreetmap/josm/actions/search/SearchCompiler.java       |    2 
 core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java                    |   16 ++
 core-dave/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java               |    5 
 core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java    |   63 +++++-----
 core-dave/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java |   20 +--
 core-dave/src/org/openstreetmap/josm/gui/MapStatus.java                       |   26 ++--
 core-dave/src/org/openstreetmap/josm/gui/NavigatableComponent.java            |    6 
 11 files changed, 93 insertions(+), 67 deletions(-)

diff -puN build.xml~deprecate-osmprimitive-selection-methods build.xml
--- core/build.xml~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/build.xml	2009-10-09 10:42:27.000000000 -0700
@@ -66,7 +66,7 @@
 		<javac srcdir="src" classpathref="classpath" destdir="build"
 				target="1.5" source="1.5" debug="on" encoding="UTF-8">
 			<compilerarg value="-Xlint:deprecation"/>
-			<compilerarg value="-Xlint:unchecked"/>
+			<!-- compilerarg value="-Xlint:unchecked"/ -->
 		</javac>
 	</target>
 
diff -puN src/org/openstreetmap/josm/actions/search/SearchAction.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/actions/search/SearchAction.java
--- core/src/org/openstreetmap/josm/actions/search/SearchAction.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/actions/search/SearchAction.java	2009-10-09 10:42:27.000000000 -0700
@@ -25,6 +25,7 @@ import org.openstreetmap.josm.gui.Extend
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.data.osm.Filter;
+import org.openstreetmap.josm.data.osm.DataSet;
 
 public class SearchAction extends JosmAction{
 
@@ -88,6 +89,7 @@ public class SearchAction extends JosmAc
         left.add(label, GBC.eop());
         left.add(input, GBC.eop().fill(GBC.HORIZONTAL));
         left.add(replace, GBC.eol());
+        DataSet ds = Main.main.getCurrentDataSet();
         left.add(add, GBC.eol());
         left.add(remove, GBC.eol());
         left.add(in_selection, GBC.eop());
@@ -236,13 +238,14 @@ public class SearchAction extends JosmAc
         //            }
         //        }
 
-        Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
+        final DataSet ds = Main.main.getCurrentDataSet();
+        Collection<OsmPrimitive> sel = ds.getSelected();
         int foundMatches = getSelection(s, sel, new Function(){
             public Boolean isSomething(OsmPrimitive o){
-                return o.isSelected();
+                return ds.isSelected(o);
             }
         });
-        Main.main.getCurrentDataSet().setSelected(sel);
+        ds.setSelected(sel);
         if (foundMatches == 0) {
             String msg = null;
             if (s.mode == SearchMode.replace) {
diff -puN src/org/openstreetmap/josm/actions/search/SearchCompiler.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/actions/search/SearchCompiler.java
--- core/src/org/openstreetmap/josm/actions/search/SearchCompiler.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	2009-10-09 10:42:27.000000000 -0700
@@ -423,7 +423,7 @@ public class SearchCompiler {
 
     private static class Selected extends Match {
         @Override public boolean match(OsmPrimitive osm) {
-            return osm.isSelected();
+            return Main.main.getCurrentDataSet().isSelected(osm);
         }
         @Override public String toString() {return "selected";}
     }
diff -puN src/org/openstreetmap/josm/actions/UnGlueAction.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/actions/UnGlueAction.java
--- core/src/org/openstreetmap/josm/actions/UnGlueAction.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/actions/UnGlueAction.java	2009-10-09 10:42:27.000000000 -0700
@@ -151,7 +151,7 @@ public class UnGlueAction extends JosmAc
 
         Node c = new Node(selectedNode);
         c.removeAll();
-        c.setSelected(false);
+        getCurrentDataSet().clearSelection(c);
         cmds.add(new ChangeCommand(selectedNode, c));
 
         Node n = new Node(selectedNode);
diff -puN src/org/openstreetmap/josm/data/osm/DataSet.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/data/osm/DataSet.java
--- core/src/org/openstreetmap/josm/data/osm/DataSet.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java	2009-10-09 10:42:27.000000000 -0700
@@ -216,6 +216,19 @@ public class DataSet implements Cloneabl
         }
     }
 
+    public boolean addSelected(OsmPrimitive osm) {
+        osm.setSelected(true);
+        return true;
+    }
+
+    public boolean toggleSelected(OsmPrimitive osm) {
+        osm.setSelected(!osm.isSelected());
+        return true;
+    }
+    public boolean isSelected(OsmPrimitive osm) {
+        return osm.isSelected();
+    }
+
     public void setDisabled(OsmPrimitive... osm) {
         if (osm.length == 1 && osm[0] == null) {
             setDisabled();
@@ -282,6 +295,9 @@ public class DataSet implements Cloneabl
      * Remove the selection from every value in the collection.
      * @param list The collection to remove the selection from.
      */
+    public void clearSelection(OsmPrimitive... osm) {
+        clearSelection(Arrays.asList(osm));
+    }
     private void clearSelection(Collection<? extends OsmPrimitive> list) {
         if (list == null)
             return;
diff -puN src/org/openstreetmap/josm/data/osm/OsmPrimitive.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
--- core/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	2009-10-09 10:42:27.000000000 -0700
@@ -220,7 +220,7 @@ abstract public class OsmPrimitive imple
      * @param selected  true, if this primitive is selected; false, otherwise
      * @since 1899
      */
-    public void setSelected(boolean selected) {
+    @Deprecated public void setSelected(boolean selected) {
         if (selected) {
             flags |= FLAG_SELECTED;
         } else {
@@ -233,7 +233,7 @@ abstract public class OsmPrimitive imple
      * @return true, if this primitive is selected
      * @since 1899
      */
-    public boolean isSelected() {
+    @Deprecated public boolean isSelected() {
         return (flags & FLAG_SELECTED) != 0;
     }
 
@@ -773,4 +773,4 @@ abstract public class OsmPrimitive imple
      * @return the display name
      */
     public abstract String getDisplayName(NameFormatter formatter);
-}
\ No newline at end of file
+}
diff -puN src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
--- core/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	2009-10-09 10:42:27.000000000 -0700
@@ -127,7 +127,9 @@ public class SimplePaintVisitor extends 
                         RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
     }
 
+    DataSet ds;
     public void visitAll(DataSet data, Boolean virtual) {
+        this.ds = data;
         //boolean profiler = Main.pref.getBoolean("simplepaint.profiler",false);
         //long profilerStart = java.lang.System.currentTimeMillis();
         //long profilerLast = profilerStart;
@@ -148,7 +150,7 @@ public class SimplePaintVisitor extends 
            require changing the colour while painting... */
         //profilerN = 0;
         for (final OsmPrimitive osm : data.relations)
-            if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered())
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered())
             {
                 osm.visit(this);
                 //        profilerN++;
@@ -162,7 +164,7 @@ public class SimplePaintVisitor extends 
 
         //profilerN = 0;
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered() && osm.isTagged())
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && osm.isTagged())
             {
                 osm.visit(this);
                 //        profilerN++;
@@ -170,7 +172,7 @@ public class SimplePaintVisitor extends 
         displaySegments();
 
         for (final OsmPrimitive osm : data.ways)
-            if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered() && !osm.isTagged())
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && !osm.isTagged())
             {
                 osm.visit(this);
                 //        profilerN++;
@@ -201,7 +203,7 @@ public class SimplePaintVisitor extends 
 
         //profilerN = 0;
         for (final OsmPrimitive osm : data.nodes)
-            if (!osm.isDeleted() && !osm.isSelected() && !osm.isFiltered())
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered())
             {
                 osm.visit(this);
                 //        profilerN++;
@@ -252,7 +254,7 @@ public class SimplePaintVisitor extends 
             drawNode(n, inactiveColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
         } else if (n.highlighted) {
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        } else if (n.isSelected()) {
+        } else if (ds.isSelected(n)) {
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         } else if(n.isTagged()) {
             drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
@@ -304,18 +306,18 @@ public class SimplePaintVisitor extends 
         /* show direction arrows, if draw.segment.relevant_directions_only is not set, the way is tagged with a direction key
            (even if the tag is negated as in oneway=false) or the way is selected */
 
-        boolean showThisDirectionArrow = w.isSelected()
+        boolean showThisDirectionArrow = ds.isSelected(w)
         || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys()));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
-        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.isSelected() && showHeadArrowOnly;
+        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !ds.isSelected(w) && showHeadArrowOnly;
         Color wayColor;
 
         if (inactive || w.isDisabled()) {
             wayColor = inactiveColor;
         } else if(w.highlighted) {
             wayColor = highlightColor;
-        } else if(w.isSelected()) {
+        } else if(ds.isSelected(w)) {
             wayColor = selectedColor;
         } else if (!w.isTagged()) {
             wayColor = untaggedWayColor;
@@ -346,7 +348,7 @@ public class SimplePaintVisitor extends 
         Color col;
         if (inactive || r.isDisabled()) {
             col = inactiveColor;
-        } else if (r.isSelected()) {
+        } else if (ds.isSelected(r)) {
             col = selectedColor;
         } else {
             col = relationColor;
diff -puN src/org/openstreetmap/josm/gui/NavigatableComponent.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/gui/NavigatableComponent.java
--- core/src/org/openstreetmap/josm/gui/NavigatableComponent.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:27.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/gui/NavigatableComponent.java	2009-10-09 10:42:27.000000000 -0700
@@ -317,8 +317,8 @@ public class NavigatableComponent extend
             }
             // when multiple nodes on one point, prefer new or selected nodes
             else if(dist == minDistanceSq && minPrimitive != null
-                    && ((n.getId() == 0 && n.isSelected())
-                            || (!minPrimitive.isSelected() && (n.isSelected() || n.getId() == 0)))) {
+                    && ((n.getId() == 0 && ds.isSelected(n))
+                            || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.getId() == 0)))) {
                 minPrimitive = n;
             }
         }
@@ -359,7 +359,7 @@ public class NavigatableComponent extend
                 double b = p.distanceSq(A);
                 double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared
                 if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
-                    if(w.isSelected()) {
+                    if(ds.isSelected(w)) {
                         perDist -= 0.00001;
                     }
                     List<WaySegment> l;
diff -puN src/org/openstreetmap/josm/actions/mapmode/DrawAction.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
--- core/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:36.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	2009-10-09 10:42:36.000000000 -0700
@@ -324,7 +324,8 @@ public class DrawAction extends MapMode 
         updateKeyModifiers(e);
         mousePos = e.getPoint();
 
-        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
+        DataSet ds = getCurrentDataSet();
+        Collection<OsmPrimitive> selection = ds.getSelected();
         Collection<Command> cmds = new LinkedList<Command>();
 
         ArrayList<Way> reuseWays = new ArrayList<Way>(),
@@ -404,7 +405,7 @@ public class DrawAction extends MapMode 
                     // but pressing ALT prevents this. Therefore we must de-select the way manually
                     // here so /only/ the new way will be selected after this method finishes.
                     if(alt) {
-                        wnew.setSelected(false);
+                        ds.addSelected(wnew);
                     }
 
                     cmds.add(new ChangeCommand(insertPoint.getKey(), wnew));
@@ -518,7 +519,7 @@ public class DrawAction extends MapMode 
 
                 extendedWay = true;
                 getCurrentDataSet().setSelected(way);
-                DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());
+                DataSet.fireSelectionChanged(ds.getSelected());
             }
         }
 
@@ -531,7 +532,7 @@ public class DrawAction extends MapMode 
             } else {
                 title = tr("Add node into way");
                 for (Way w : reuseWays) {
-                    w.setSelected(false);
+                    ds.clearSelection(w);
                 }
             }
             getCurrentDataSet().setSelected(n);
diff -puN src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
--- core/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:36.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	2009-10-09 10:42:36.000000000 -0700
@@ -151,10 +151,10 @@ public class MapPaintVisitor extends Sim
         //    return;
 
         if (nodeStyle != null && isZoomOk(nodeStyle) && showIcons > dist) {
-            drawNode(n, nodeStyle.icon, nodeStyle.annotate, n.isSelected());
+            drawNode(n, nodeStyle.icon, nodeStyle.annotate, data.isSelected(n));
         } else if (n.highlighted) {
             drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-        } else if (n.isSelected()) {
+        } else if (data.isSelected(n)) {
             drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
         } else if (n.isTagged()) {
             drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
@@ -226,14 +226,14 @@ public class MapPaintVisitor extends Sim
             /* way without style */
             //profilerVisibleWays++;
             //if(!profilerOmitDraw)
-            drawWay(w, null, untaggedColor, w.isSelected());
+            drawWay(w, null, untaggedColor, data.isSelected(w));
         }
         else if(wayStyle instanceof LineElemStyle)
         {
             /* way with line style */
             //profilerVisibleWays++;
             //if(!profilerOmitDraw)
-            drawWay(w, (LineElemStyle)wayStyle, untaggedColor, w.isSelected());
+            drawWay(w, (LineElemStyle)wayStyle, untaggedColor, data.isSelected(w));
         }
         else if (wayStyle instanceof AreaElemStyle)
         {
@@ -244,12 +244,12 @@ public class MapPaintVisitor extends Sim
             if (fillAreas > dist)
             {
                 //    profilerVisibleAreas++;
-                drawArea(w, w.isSelected() ? selectedColor : areaStyle.color);
+                drawArea(w, data.isSelected(w) ? selectedColor : areaStyle.color);
                 if(!w.isClosed()) {
                     w.putError(tr("Area style way is not closed."), true);
                 }
             }
-            drawWay(w, areaStyle.line, areaStyle.color, w.isSelected());
+            drawWay(w, areaStyle.line, areaStyle.color, data.isSelected(w));
             //}
         }
     }
@@ -258,11 +258,11 @@ public class MapPaintVisitor extends Sim
         /* show direction arrows, if draw.segment.relevant_directions_only is not set,
            the way is tagged with a direction key
            (even if the tag is negated as in oneway=false) or the way is selected */
-        boolean showDirection = w.isSelected() || ((!useRealWidth) && (showDirectionArrow
+        boolean showDirection = data.isSelected(w) || ((!useRealWidth) && (showDirectionArrow
                 && (!showRelevantDirectionsOnly || w.hasDirectionKeys())));
         /* head only takes over control if the option is true,
            the direction should be shown at all and not only because it's selected */
-        boolean showOnlyHeadArrowOnly = showDirection && !w.isSelected() && showHeadArrowOnly;
+        boolean showOnlyHeadArrowOnly = showDirection && !data.isSelected(w) && showHeadArrowOnly;
         int width = defaultSegmentWidth;
         int realWidth = 0; /* the real width of the element in meters */
         float dashed[] = new float[0];
@@ -306,7 +306,7 @@ public class MapPaintVisitor extends Sim
 
         if(w.highlighted) {
             color = highlightColor;
-        } else if(w.isSelected()) {
+        } else if(data.isSelected(w)) {
             color = selectedColor;
         } else if(w.isDisabled()) {
             color = inactiveColor;
@@ -324,7 +324,7 @@ public class MapPaintVisitor extends Sim
                     {
                         if(lastN != null)
                         {
-                            drawSeg(lastN, n, s.color != null  && !w.isSelected() ? s.color : color,
+                            drawSeg(lastN, n, s.color != null  && !data.isSelected(w) ? s.color : color,
                                     false, s.getWidth(width), s.dashed, s.dashedColor);
                         }
                         lastN = n;
@@ -358,7 +358,7 @@ public class MapPaintVisitor extends Sim
                     {
                         if(lastN != null)
                         {
-                            drawSeg(lastN, n, s.color != null && !w.isSelected() ? s.color : color,
+                            drawSeg(lastN, n, s.color != null && !data.isSelected(w) ? s.color : color,
                                     false, s.getWidth(width), s.dashed, s.dashedColor);
                         }
                         lastN = n;
@@ -404,7 +404,7 @@ public class MapPaintVisitor extends Sim
                     {
                         Way c = (Way)joinArray[i];
                         if(w == null)
-                        { w = c; selected = w.isSelected(); joinArray[i] = null; --left; }
+                        { w = c; selected = data.isSelected(w); joinArray[i] = null; --left; }
                         else
                         {
                             int mode = 0;
@@ -440,7 +440,7 @@ public class MapPaintVisitor extends Sim
                             {
                                 joinArray[i] = null;
                                 joined = true;
-                                if(c.isSelected()) {
+                                if(data.isSelected(c)) {
                                     selected = true;
                                 }
                                 --left;
@@ -473,7 +473,10 @@ public class MapPaintVisitor extends Sim
             {
                 w = new Way(w);
                 w.setNodes(n);
-                w.setSelected(selected);
+                if (selected)
+                    data.setSelected(w);
+                else
+                    data.clearSelection(w);
             }
             if(!w.isClosed())
             {
@@ -550,7 +553,7 @@ public class MapPaintVisitor extends Sim
             drawRestriction(r);
         }
 
-        if(r.isSelected()) /* draw ways*/
+        if(data.isSelected(r)) /* draw ways*/
         {
             for (RelationMember m : r.getMembers())
             {
@@ -827,7 +830,7 @@ public class MapPaintVisitor extends Sim
         int w = smallIcon.getIconWidth(), h=smallIcon.getIconHeight();
         smallIcon.paintIcon ( Main.map.mapView, g, (int)(pVia.x+vx+vx2)-w/2, (int)(pVia.y+vy+vy2)-h/2 );
 
-        if (r.isSelected())
+        if (data.isSelected(r))
         {
             g.setColor (  selectedColor );
             g.drawRect ((int)(pVia.x+vx+vx2)-w/2-2,(int)(pVia.y+vy+vy2)-h/2-2, w+4, h+4);
@@ -871,7 +874,7 @@ public class MapPaintVisitor extends Sim
                                 m.getRole(), w.getDisplayName(DefaultNameFormatter.getInstance())), true);
                         if(!m.hasRole()) {
                             outer.add(w);
-                        } else if(r.isSelected()) {
+                        } else if(data.isSelected(r)) {
                             drawSelectedMember(m.getMember(), styles != null
                                     ? getPrimitiveStyle(m.getMember()) : null, true, true);
                         }
@@ -1051,7 +1054,7 @@ public class MapPaintVisitor extends Sim
                     Polygon p = pd.get();
                     if(isPolygonVisible(p))
                     {
-                        drawAreaPolygon(p, (pd.way.isSelected() || r.isSelected()) ? selectedColor
+                        drawAreaPolygon(p, (data.isSelected(pd.way) || data.isSelected(r)) ? selectedColor
                                 : areaStyle.color);
                         visible = true;
                     }
@@ -1077,23 +1080,23 @@ public class MapPaintVisitor extends Sim
                             || outer.size() == 0))
                     {
                         drawWay(wInner, ((AreaElemStyle)wayStyle).line,
-                                ((AreaElemStyle)wayStyle).color, wInner.isSelected()
-                                || r.isSelected());
+                                ((AreaElemStyle)wayStyle).color, data.isSelected(wInner)
+                                || data.isSelected(r));
                     }
                     wInner.mappaintDrawnCode = paintid;
                 }
                 else
                 {
-                    if(r.isSelected())
+                    if(data.isSelected(r))
                     {
                         drawSelectedMember(wInner, innerStyle,
-                                !wayStyle.equals(innerStyle), wInner.isSelected());
+                                !wayStyle.equals(innerStyle), data.isSelected(wInner));
                     }
                     if(wayStyle.equals(innerStyle))
                     {
                         r.putError(tr("Style for inner way ''{0}'' equals multipolygon.",
                                 wInner.getDisplayName(DefaultNameFormatter.getInstance())), false);
-                        if(!r.isSelected()) {
+                        if(!data.isSelected(r)) {
                             wInner.mappaintDrawnAreaCode = paintid;
                         }
                     }
@@ -1107,8 +1110,8 @@ public class MapPaintVisitor extends Sim
                     if(zoomok)
                     {
                         drawWay(wOuter, ((AreaElemStyle)wayStyle).line,
-                                ((AreaElemStyle)wayStyle).color, wOuter.isSelected()
-                                || r.isSelected());
+                                ((AreaElemStyle)wayStyle).color, data.isSelected(wOuter)
+                                || data.isSelected(r));
                     }
                     wOuter.mappaintDrawnCode = paintid;
                 }
@@ -1120,7 +1123,7 @@ public class MapPaintVisitor extends Sim
                         r.putError(tr("Style for outer way ''{0}'' mismatches.",
                                 wOuter.getDisplayName(DefaultNameFormatter.getInstance())), true);
                     }
-                    if(r.isSelected())
+                    if(data.isSelected(r))
                     {
                         drawSelectedMember(wOuter, outerStyle, false, false);
                     }
@@ -1325,10 +1328,12 @@ public class MapPaintVisitor extends Sim
         textColor = Main.pref.getColor (marktr("text"), Color.WHITE);
     }
 
+    DataSet data;
+
     /* Shows areas before non-areas */
     @Override
     public void visitAll(DataSet data, Boolean virtual) {
-
+        this.data = data;
         //boolean profiler = Main.pref.getBoolean("mappaint.profiler",false);
         //profilerOmitDraw = Main.pref.getBoolean("mappaint.profiler.omitdraw",false);
 
@@ -1449,7 +1454,7 @@ public class MapPaintVisitor extends Sim
             /*** WAYS (filling disabled)  ***/
             //    profilerN = 0;
             for (final OsmPrimitive osm : data.ways)
-                if (!osm.incomplete && !osm.isDeleted() && !osm.isFiltered() && !osm.isSelected()
+                if (!osm.incomplete && !osm.isDeleted() && !osm.isFiltered() && !data.isSelected(osm)
                         && osm.mappaintVisibleCode != viewid )
                 {
                     osm.visit(this);
@@ -1488,7 +1493,7 @@ public class MapPaintVisitor extends Sim
         /*** NODES ***/
         //profilerN = 0;
         for (final OsmPrimitive osm : data.nodes)
-            if (!osm.incomplete && !osm.isDeleted() && (osm.isSelected() || !osm.isFiltered())
+            if (!osm.incomplete && !osm.isDeleted() && (data.isSelected(osm) || !osm.isFiltered())
                     && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
             {
                 osm.visit(this);
diff -puN src/org/openstreetmap/josm/gui/MapStatus.java~deprecate-osmprimitive-selection-methods src/org/openstreetmap/josm/gui/MapStatus.java
--- core/src/org/openstreetmap/josm/gui/MapStatus.java~deprecate-osmprimitive-selection-methods	2009-10-09 10:42:36.000000000 -0700
+++ core-dave/src/org/openstreetmap/josm/gui/MapStatus.java	2009-10-09 10:42:36.000000000 -0700
@@ -299,6 +299,7 @@ public class MapStatus extends JPanel im
          * @param mouse modifiers
          */
         private final void popupCycleSelection(Collection<OsmPrimitive> osms, int mods) {
+            DataSet ds = Main.main.getCurrentDataSet();
             // Find some items that are required for cycling through
             OsmPrimitive firstItem = null;
             OsmPrimitive firstSelected = null;
@@ -310,7 +311,7 @@ public class MapStatus extends JPanel im
                 if(firstSelected != null && nextSelected == null) {
                     nextSelected = osm;
                 }
-                if(firstSelected == null && osm.isSelected()) {
+                if(firstSelected == null && ds.isSelected(osm)) {
                     firstSelected = osm;
                 }
             }
@@ -318,22 +319,19 @@ public class MapStatus extends JPanel im
             // Clear previous selection if SHIFT (add to selection) is not
             // pressed. Cannot use "setSelected()" because it will cause a
             // fireSelectionChanged event which is unnecessary at this point.
-            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) {
-                for(OsmPrimitive o : Main.main.getCurrentDataSet().getSelected()) {
-                    o.setSelected(false);
-                }
-            }
+            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0)
+                ds.clearSelection();
 
             // This will cycle through the available items.
             if(firstSelected == null) {
-                firstItem.setSelected(true);
+                ds.addSelected(firstItem);
             } else {
-                firstSelected.setSelected(false);
+                ds.clearSelection(firstSelected);
                 if(nextSelected != null) {
-                    nextSelected.setSelected(true);
+                    ds.addSelected(nextSelected);
                 }
             }
-            DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected());
+            DataSet.fireSelectionChanged(ds.getSelected());
         }
 
         /**
@@ -397,7 +395,8 @@ public class MapStatus extends JPanel im
          * @param osm The primitive to derive the colors from
          */
         private final void popupSetLabelColors(JLabel lbl, OsmPrimitive osm) {
-            if(osm.isSelected()) {
+            DataSet ds = Main.main.getCurrentDataSet();
+            if(ds.isSelected(osm)) {
                 lbl.setBackground(SystemColor.textHighlight);
                 lbl.setForeground(SystemColor.textHighlightText);
             } else {
@@ -459,9 +458,10 @@ public class MapStatus extends JPanel im
                     popupSetLabelColors(l, osm);
                 }
                 @Override public void mouseClicked(MouseEvent e) {
+                    DataSet ds = Main.main.getCurrentDataSet();
                     // Let the user toggle the selection
-                    osm.setSelected(!osm.isSelected());
-                    DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected());
+                    ds.toggleSelected(osm);
+                    DataSet.fireSelectionChanged(ds.getSelected());
                     l.validate();
                 }
             });
_
