Changeset 3012 in josm


Ignore:
Timestamp:
2010-02-18T08:56:57+01:00 (10 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.