Ignore:
Timestamp:
2011-06-01T21:50:26+02:00 (13 years ago)
Author:
stoecker
Message:

fix #6233 - better sorting for upload dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r4068 r4113  
    5151import org.openstreetmap.josm.data.osm.Node;
    5252import org.openstreetmap.josm.data.osm.OsmPrimitive;
     53import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator;
    5354import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    5455import org.openstreetmap.josm.data.osm.Relation;
     
    916917    }
    917918
    918     /** Comparator, comparing by type and objects display names */
    919     static private class OsmPrimitiveComparator implements Comparator<OsmPrimitive> {
    920         final private HashMap<OsmPrimitive, String> cache= new HashMap<OsmPrimitive, String>();
    921         final private DefaultNameFormatter df  = DefaultNameFormatter.getInstance();
    922 
    923         private String cachedName(OsmPrimitive p) {
    924             String name = cache.get(p);
    925             if (name == null) {
    926                 name = p.getDisplayName(df);
    927                 cache.put(p, name);
    928             }
    929             return name;
    930         }
    931 
    932         private int compareName(OsmPrimitive a, OsmPrimitive b) {
    933             String an = cachedName(a);
    934             String bn = cachedName(b);
    935             // make sure display names starting with digits are the end of the
    936             // list
    937             if (Character.isDigit(an.charAt(0)) && Character.isDigit(bn.charAt(0)))
    938                 return an.compareTo(bn);
    939             else if (Character.isDigit(an.charAt(0)) && !Character.isDigit(bn.charAt(0)))
    940                 return 1;
    941             else if (!Character.isDigit(an.charAt(0)) && Character.isDigit(bn.charAt(0)))
    942                 return -1;
    943             return an.compareTo(bn);
     919    /** Quicker comparator, comparing just by type and ID's */
     920    static private class OsmPrimitiveQuickComparator implements Comparator<OsmPrimitive> {
     921
     922        private int compareId(OsmPrimitive a, OsmPrimitive b) {
     923            long id_a=a.getUniqueId();
     924            long id_b=b.getUniqueId();
     925            if (id_a<id_b) return -1;
     926            if (id_a>id_b) return 1;
     927            return 0;
    944928        }
    945929
     
    956940        public int compare(OsmPrimitive a, OsmPrimitive b) {
    957941            if (a.getType().equals(b.getType()))
    958                 return compareName(a, b);
    959             return compareType(a, b);
    960         }
    961     }
    962 
    963     /** Quicker comparator, comparing just by type and ID's */
    964     static private class OsmPrimitiveQuickComparator implements Comparator<OsmPrimitive> {
    965 
    966         private int compareId(OsmPrimitive a, OsmPrimitive b) {
    967             long id_a=a.getUniqueId();
    968             long id_b=b.getUniqueId();
    969             if (id_a<id_b) return -1;
    970             if (id_a>id_b) return 1;
    971             return 0;
    972         }
    973 
    974         private int compareType(OsmPrimitive a, OsmPrimitive b) {
    975             // show ways before relations, then nodes
    976             if (a.getType().equals(OsmPrimitiveType.WAY)) return -1;
    977             if (a.getType().equals(OsmPrimitiveType.NODE)) return 1;
    978             // a is a relation
    979             if (b.getType().equals(OsmPrimitiveType.WAY)) return 1;
    980             // b is a node
    981             return -1;
    982         }
    983 
    984         public int compare(OsmPrimitive a, OsmPrimitive b) {
    985             if (a.getType().equals(b.getType()))
    986942                return compareId(a, b);
    987943            return compareType(a, b);
Note: See TracChangeset for help on using the changeset viewer.