Changeset 5083 in josm


Ignore:
Timestamp:
Mar 14, 2012 11:07:10 PM (14 months ago)
Author:
simon04
Message:

fix #7246 - sort relations "naturally" (e.g., US 2 < US 10), thanks: http://www.davekoelle.com/alphanum.html

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
1 edited

Legend:

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

    r5059 r5083  
    3434import org.openstreetmap.josm.data.osm.history.HistoryWay; 
    3535import org.openstreetmap.josm.gui.tagging.TaggingPreset; 
     36import org.openstreetmap.josm.tools.AlphanumComparator; 
    3637import org.openstreetmap.josm.tools.I18n; 
    3738import org.openstreetmap.josm.tools.TaggingPresetNameTemplateList; 
     
    349350 
    350351    private final Comparator<Relation> relationComparator = new Comparator<Relation>() { 
     352        private final AlphanumComparator ALPHANUM_COMPARATOR = new AlphanumComparator(); 
    351353        @Override 
    352354        public int compare(Relation r1, Relation r2) { 
     
    370372                String type2 = getRelationTypeName(r2); 
    371373 
    372                 int comp = type1.compareTo(type2); 
     374                int comp = ALPHANUM_COMPARATOR.compare(type1, type2); 
    373375                if (comp != 0) 
    374376                    return comp; 
     
    377379                String name2 = getRelationName(r2); 
    378380 
    379                 if (name1 == null && name2 == null) 
    380                     return (r1.getUniqueId() > r2.getUniqueId())?1:-1; 
    381                 else if (name1 == null) 
    382                     return -1; 
    383                 else if (name2 == null) 
    384                     return 1; 
    385                 else if (!name1.isEmpty() && !name2.isEmpty() && Character.isDigit(name1.charAt(0)) && Character.isDigit(name2.charAt(0))) { 
    386                     //Compare numerically 
    387                     String ln1 = getLeadingNumber(name1); 
    388                     String ln2 = getLeadingNumber(name2); 
    389  
    390                     comp = Long.valueOf(ln1).compareTo(Long.valueOf(ln2)); 
    391                     if (comp != 0) 
    392                         return comp; 
    393  
    394                     // put 1 before 0001 
    395                     comp = ln1.compareTo(ln2); 
    396                     if (comp != 0) 
    397                         return comp; 
    398  
    399                     comp = name1.substring(ln1.length()).compareTo(name2.substring(ln2.length())); 
    400                     if (comp != 0) 
    401                         return comp; 
    402                 } else { 
    403                     comp = name1.compareToIgnoreCase(name2); 
    404                     if (comp != 0) 
    405                         return comp; 
    406                 } 
    407             } 
    408  
     381                return ALPHANUM_COMPARATOR.compare(name1, name2); 
     382            } 
    409383 
    410384            if (r1.getMembersCount() != r2.getMembersCount()) 
Note: See TracChangeset for help on using the changeset viewer.