Changeset 5603 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2012-11-27T15:38:20+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
r5516 r5603 699 699 */ 700 700 private List<RelationMember> sortMembers(List<RelationMember> relationMembers) { 701 RelationNodeMap map = new RelationNodeMap(relationMembers); 701 ArrayList<RelationMember> newMembers = new ArrayList<RelationMember>(); 702 703 // Sort members with custom mechanisms (relation-dependent) 704 List<RelationMember> defaultMembers = new LinkedList<RelationMember>(); 705 Map<AdditionalSorter, List<RelationMember>> customMap = new HashMap<AdditionalSorter, List<RelationMember>>(); 706 707 // Dispatch members to correct sorters 708 for (RelationMember m : relationMembers) { 709 for (AdditionalSorter sorter : additionalSorters) { 710 List<RelationMember> list = defaultMembers; 711 if (sorter.acceptsMember(m)) { 712 list = customMap.get(sorter); 713 if (list == null) { 714 customMap.put(sorter, list = new LinkedList<RelationMember>()); 715 } 716 } 717 list.add(m); 718 } 719 } 720 721 // Sort members and add them to result 722 for (AdditionalSorter s : customMap.keySet()) { 723 newMembers.addAll(s.sortMembers(customMap.get(s))); 724 } 725 726 RelationNodeMap map = new RelationNodeMap(defaultMembers); 702 727 // List of groups of linked members 703 728 // … … 730 755 } 731 756 732 ArrayList<RelationMember> newMembers = new ArrayList<RelationMember>();733 757 for (LinkedList<Integer> tmpGroup : allGroups) { 734 758 for (Integer p : tmpGroup) { 735 newMembers.add(relationMembers.get(p)); 736 } 737 } 738 739 // Try to sort remaining members with custom mechanisms (relation-dependent) 740 List<RelationMember> notSortableMembers = new LinkedList<RelationMember>(); 741 Map<AdditionalSorter, List<RelationMember>> additionalMap = new HashMap<AdditionalSorter, List<RelationMember>>(); 742 743 // Dispatch members to correct sorters 744 for (Integer i : map.getNotSortableMembers()) { 745 RelationMember m = relationMembers.get(i); 746 for (AdditionalSorter sorter : additionalSorters) { 747 List<RelationMember> list = notSortableMembers; 748 if (sorter.acceptsMember(m)) { 749 list = additionalMap.get(sorter); 750 if (list == null) { 751 additionalMap.put(sorter, list = new LinkedList<RelationMember>()); 752 } 753 } 754 list.add(m); 755 } 756 } 757 758 // Sort members and add them to result 759 for (AdditionalSorter s : additionalMap.keySet()) { 760 newMembers.addAll(s.sortMembers(additionalMap.get(s))); 759 newMembers.add(defaultMembers.get(p)); 760 } 761 761 } 762 762 763 763 // Finally, add members that have not been sorted at all 764 newMembers.addAll(notSortableMembers); 764 for (Integer i : map.getNotSortableMembers()) { 765 newMembers.add(defaultMembers.get(i)); 766 } 765 767 766 768 return newMembers;
Note:
See TracChangeset
for help on using the changeset viewer.