Ticket #23517: 23517-alternative.patch

File 23517-alternative.patch, 1.8 KB (added by GerdP, 23 months ago)

sort in RelationSorter, outer rings first, no further sorting, only works when all members have either role "outer" or "inner"

  • src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java

     
    199199     * @since 17862 (signature change, generics)
    200200     */
    201201    public static <T extends IRelationMember<? extends IPrimitive>> List<T> sortMembersByConnectivity(List<T> defaultMembers) {
    202         List<T> newMembers;
     202        List<T> orderedMembers = defaultMembers;
     203        // see #23517
     204        if (defaultMembers.stream().allMatch(rm -> ("outer".equals(rm.getRole()) || "inner".equals(rm.getRole())))) {
     205            orderedMembers = defaultMembers.stream()
     206                    .sorted((m1, m2) -> m2.getRole().compareTo(m1.getRole())) // outer first
     207                    .collect(Collectors.toList());
     208        }
    203209
    204         RelationNodeMap<T> map = new RelationNodeMap<>(defaultMembers);
     210        RelationNodeMap<T> map = new RelationNodeMap<>(orderedMembers);
    205211        // List of groups of linked members
    206212        //
    207213        List<LinkedList<Integer>> allGroups = new ArrayList<>();
     
    232238            }
    233239        }
    234240
    235         newMembers = allGroups.stream().flatMap(Collection::stream).map(defaultMembers::get).collect(Collectors.toList());
     241        List<T> newMembers;
     242        newMembers = allGroups.stream().flatMap(Collection::stream).map(orderedMembers::get).collect(Collectors.toList());
    236243
    237244        // Finally, add members that have not been sorted at all
    238245        for (Integer i : map.getNotSortableMembers()) {
    239             newMembers.add(defaultMembers.get(i));
     246            orderedMembers.add(defaultMembers.get(i));
    240247        }
    241248
    242249        return newMembers;