Changeset 53 in josm


Ignore:
Timestamp:
2006-02-14T21:07:29+01:00 (18 years ago)
Author:
imi
Message:

fixed bug in osm writer/reader: they did not saved the modified state of an object.

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/io/OsmReader.java

    r47 r53  
    104104                for (Object o : e.getChildren()) {
    105105                        Element child = (Element)o;
    106                         if (child.getName().equals("deleted")) {
    107                                 for (Object delObj : child.getChildren()) {
    108                                         OsmPrimitive osm = parseObject((Element)delObj, data);
    109                                         if (osm != null) {
    110                                                 osm.visit(visitor);
    111                                                 osm.setDeleted(true);
    112                                         }
    113                                 }
    114                         } else {
    115                                 OsmPrimitive osm = parseObject(child, data);
    116                                 if (osm != null)
    117                                         osm.visit(visitor);
    118                         }
     106                        OsmPrimitive osm = parseObject(child, data);
     107                        if (osm != null)
     108                                osm.visit(visitor);
    119109                }
    120110               
     
    201191                        }
    202192                }
     193               
     194                String action = e.getAttributeValue("action");
     195                if ("delete".equals(action))
     196                        data.setDeleted(true);
     197                else if ("modify".equals(action))
     198                        data.modified = data.modifiedProperties = true;
     199                else if ("modify/property".equals(action))
     200                        data.modifiedProperties = true;
     201                else if ("modify/object".equals(action))
     202                        data.modified = true;
    203203        }
    204204
  • src/org/openstreetmap/josm/io/OsmWriter.java

    r49 r53  
    6969                List<Element> list = root.getChildren();
    7070                properties = new LinkedList<Element>();
    71                 for (OsmPrimitive osm : ds.allNonDeletedPrimitives()) {
     71                for (OsmPrimitive osm : ds.allPrimitives()) {
    7272                        osm.visit(this);
    7373                        list.add(element);
    7474                }
    7575                list.addAll(properties);
    76                 properties = new LinkedList<Element>();
    77                 Element deleted = new Element("deleted");
    78                 Collection<Element> allDeleted = deleted.getChildren();
    79                 for (OsmPrimitive osm : ds.allPrimitives()) {
    80                         if (osm.isDeleted() && osm.id != 0) {
    81                                 osm.visit(this);
    82                                 allDeleted.add(element);
    83                         }
    84                 }
    85                 allDeleted.addAll(properties);
    86                 if (!allDeleted.isEmpty())
    87                         list.add(deleted);
    8876
    8977                Document d = new Document(root);
     
    117105                        for (Entry<Key, String> entry : osm.keys.entrySet())
    118106                                properties.add(parseProperty(osm, entry));
     107                if (osm.isDeleted())
     108                        e.setAttribute("action", "delete");
     109                else if (osm.modified && osm.modifiedProperties)
     110                        e.setAttribute("action", "modify");
     111                else if (osm.modified && !osm.modifiedProperties)
     112                        e.setAttribute("action", "modify/object");
     113                else if (!osm.modified && osm.modifiedProperties)
     114                        e.setAttribute("action", "modify/property");
    119115        }
    120116
  • test/org/openstreetmap/josm/test/OsmWriterTest.java

    r49 r53  
    1414import org.jdom.input.SAXBuilder;
    1515import org.openstreetmap.josm.data.osm.DataSet;
     16import org.openstreetmap.josm.data.osm.LineSegment;
     17import org.openstreetmap.josm.data.osm.Node;
     18import org.openstreetmap.josm.data.osm.OsmPrimitive;
     19import org.openstreetmap.josm.data.osm.Track;
    1620import org.openstreetmap.josm.io.OsmWriter;
    1721import org.openstreetmap.josm.test.framework.Bug;
     
    2428public class OsmWriterTest extends TestCase {
    2529
     30        private Node n1;
     31        private Node n2;
     32        private Node n3;
     33        private Node n4;
     34        private Node n5;
     35        private LineSegment ls1;
     36        private LineSegment ls2;
     37        private LineSegment ls3;
     38        private Track t;
     39       
    2640        private DataSet ds;
    2741        private Element osm;
     
    7993
    8094       
     95        /**
     96         * Verify that action tag is set correctly.
     97         */
     98        public void testActionTag() throws IOException, JDOMException {
     99                int id = 1;
     100                for (OsmPrimitive osm : ds.allPrimitives())
     101                        osm.id = id++; // make all objects "old".
     102                n1.setDeleted(true);
     103                ls1.modified = true;
     104                ls1.modifiedProperties = true;
     105                ls3.modified = true;
     106                t.modifiedProperties = true;
     107                reparse();
     108               
     109                boolean foundNode = false;
     110                for (Element n : nodes) {
     111                        if (n.getAttributeValue("uid").equals(""+n1.id)) {
     112                                assertEquals("delete", n.getAttributeValue("action"));
     113                                foundNode = true;
     114                        }
     115                }
     116                assertTrue("Node found in output", foundNode);
     117
     118                boolean foundLs1 = false;
     119                boolean foundLs3 = false;
     120                for (Element lsElem : lineSegments) {
     121                        String idStr = lsElem.getAttributeValue("uid");
     122                        String action = lsElem.getAttributeValue("action");
     123                        if (idStr.equals(""+ls1.id)) {
     124                                assertEquals("Attribute action on modified data is ok", "modify", action);
     125                                foundLs1 = true;
     126                        } else if (idStr.equals(""+ls3.id)) {
     127                                assertEquals("Attribute action on modified/object data is ok", "modify/object", action);
     128                                foundLs3 = true;
     129                        }
     130                }
     131                assertTrue("LineSegments found in output", foundLs1 && foundLs3);
     132               
     133                assertEquals("Track found in output", 1, tracks.size());
     134                assertEquals("Attribute action on modifiedProperty data is ok", "modify/property", tracks.get(0).getAttributeValue("action"));
     135        }
    81136       
    82137       
     
    85140        protected void setUp() throws Exception {
    86141                super.setUp();
     142               
    87143                // create some data
    88                 ds = DataSetTestCaseHelper.createCommon();
     144                ds = new DataSet();
     145                n1 = DataSetTestCaseHelper.createNode(ds);
     146                n2 = DataSetTestCaseHelper.createNode(ds);
     147                n3 = DataSetTestCaseHelper.createNode(ds);
     148                n4 = DataSetTestCaseHelper.createNode(ds);
     149                n5 = DataSetTestCaseHelper.createNode(ds);
     150                ls1 = DataSetTestCaseHelper.createLineSegment(ds, n1, n2);
     151                ls2 = DataSetTestCaseHelper.createLineSegment(ds, n2, n3);
     152                ls3 = DataSetTestCaseHelper.createLineSegment(ds, n4, n5);
     153                t = DataSetTestCaseHelper.createTrack(ds, ls1, ls2);
     154               
    89155                reparse();
    90156        }
  • test/org/openstreetmap/josm/test/framework/DataSetTestCaseHelper.java

    r52 r53  
    11package org.openstreetmap.josm.test.framework;
     2
     3import java.util.Arrays;
    24
    35import org.openstreetmap.josm.data.GeoPoint;
     
    3335                LineSegment ls2 = createLineSegment(ds, n2, n3);
    3436                createLineSegment(ds, n4, n5);
     37                createTrack(ds, ls1, ls2);
     38                return ds;
     39        }
     40
     41        public static Track createTrack(DataSet ds, LineSegment... lineSegments) {
    3542                Track t = new Track();
    36                 t.segments.add(ls1);
    37                 t.segments.add(ls2);
     43                t.segments.addAll(Arrays.asList(lineSegments));
    3844                ds.tracks.add(t);
    39                 return ds;
     45                return t;
    4046        }
    4147       
Note: See TracChangeset for help on using the changeset viewer.