Changeset 3012 in josm


Ignore:
Timestamp:
Feb 18, 2010 8:56:57 AM (3 years ago)
Author:
jttt
Message:

Save primitives to .osm file sorted

File:
1 edited

Legend:

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

    r2604 r3012  
    55 
    66import java.io.PrintWriter; 
     7import java.util.ArrayList; 
     8import java.util.Collection; 
     9import java.util.Collections; 
     10import java.util.Comparator; 
     11import java.util.List; 
    712import java.util.Map.Entry; 
    813 
     
    6166    } 
    6267 
     68    private static final Comparator<OsmPrimitive> byIdComparator = new Comparator<OsmPrimitive>() { 
     69        public int compare(OsmPrimitive o1, OsmPrimitive o2) { 
     70            return (o1.getUniqueId()<o2.getUniqueId() ? -1 : (o1.getUniqueId()==o2.getUniqueId() ? 0 : 1)); 
     71        } 
     72    }; 
     73 
     74    private Collection<OsmPrimitive> sortById(Collection<? extends OsmPrimitive> primitives) { 
     75        List<OsmPrimitive> result = new ArrayList<OsmPrimitive>(primitives.size()); 
     76        result.addAll(primitives); 
     77        Collections.sort(result, byIdComparator); 
     78        return result; 
     79    } 
     80 
    6381    public void writeContent(DataSet ds) { 
    64         for (Node n : ds.getNodes()) { 
     82        for (OsmPrimitive n : sortById(ds.getNodes())) { 
    6583            if (shouldWrite(n)) { 
    66                 visit(n); 
    67             } 
    68         } 
    69         for (Way w : ds.getWays()) { 
     84                visit((Node)n); 
     85            } 
     86        } 
     87        for (OsmPrimitive w : sortById(ds.getWays())) { 
    7088            if (shouldWrite(w)) { 
    71                 visit(w); 
    72             } 
    73         } 
    74         for (Relation e : ds.getRelations()) { 
     89                visit((Way)w); 
     90            } 
     91        } 
     92        for (OsmPrimitive e: sortById(ds.getRelations())) { 
    7593            if (shouldWrite(e)) { 
    76                 visit(e); 
     94                visit((Relation)e); 
    7795            } 
    7896        } 
     
    162180    } 
    163181 
     182    private static final Comparator<Entry<String, String>> byKeyComparator = new Comparator<Entry<String,String>>() { 
     183        public int compare(Entry<String, String> o1, Entry<String, String> o2) { 
     184            return o1.getKey().compareTo(o2.getKey()); 
     185        } 
     186    }; 
     187 
    164188    private void addTags(Tagged osm, String tagname, boolean tagOpen) { 
    165189        if (osm.hasKeys()) { 
     
    167191                out.println(">"); 
    168192            } 
    169             for (Entry<String, String> e : osm.getKeys().entrySet()) { 
     193            List<Entry<String, String>> entries = new ArrayList<Entry<String,String>>(osm.getKeys().entrySet()); 
     194            Collections.sort(entries, byKeyComparator); 
     195            for (Entry<String, String> e : entries) { 
    170196                if ((osm instanceof Changeset) || !("created_by".equals(e.getKey()))) { 
    171197                    out.println("    <tag k='"+ XmlWriter.encode(e.getKey()) + 
Note: See TracChangeset for help on using the changeset viewer.