- Timestamp:
- 2015-06-21T14:16:04+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
r8512 r8517 6 6 import java.util.Collections; 7 7 import java.util.Comparator; 8 import java.util.HashMap; 8 9 import java.util.LinkedHashMap; 9 10 import java.util.LinkedList; … … 12 13 import java.util.Map.Entry; 13 14 15 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 import org.openstreetmap.josm.data.osm.Relation; 14 17 import org.openstreetmap.josm.data.osm.RelationMember; 15 18 import org.openstreetmap.josm.gui.DefaultNameFormatter; 16 19 import org.openstreetmap.josm.tools.AlphanumComparator; 20 import org.openstreetmap.josm.tools.Utils; 17 21 18 22 public class RelationSorter { … … 91 95 } 92 96 97 private static String getStopName(OsmPrimitive p) { 98 for (Relation ref : Utils.filteredCollection(p.getReferrers(), Relation.class)) { 99 if (ref.hasTag("type", "public_transport") && ref.hasTag("public_transport", "stop_area") && ref.getName() != null) { 100 return ref.getName(); 101 } 102 } 103 return p.getName(); 104 } 105 93 106 @Override 94 107 public List<RelationMember> sortMembers(List<RelationMember> list) { 95 // Retain order from original relation 96 return list; 108 final Map<String, RelationMember> platformByName = new HashMap<>(); 109 for (RelationMember i : list) { 110 if ("platform".equals(i.getRole())) { 111 final RelationMember old = platformByName.put(getStopName(i.getMember()), i); 112 if (old != null) { 113 // Platform with same name present. Stop to avoid damaging complicated relations. 114 // This case can happily be handled differently. 115 return list; 116 } 117 } 118 } 119 final List<RelationMember> sorted = new ArrayList<>(list.size()); 120 for (RelationMember i : list) { 121 if ("stop".equals(i.getRole())) { 122 sorted.add(i); 123 final RelationMember platform = platformByName.remove(getStopName(i.getMember())); 124 if (platform != null) { 125 sorted.add(platform); 126 } 127 } 128 } 129 sorted.addAll(platformByName.values()); 130 return sorted; 97 131 } 98 132 }
Note:
See TracChangeset
for help on using the changeset viewer.