1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.comparator.spring.web;
18
19 import static java.util.Objects.isNull;
20 import static java.util.Objects.nonNull;
21
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Optional;
25 import org.bremersee.comparator.model.SortOrder;
26 import org.bremersee.comparator.model.SortOrderItem;
27 import org.bremersee.comparator.model.SortOrderTextSeparators;
28 import org.springframework.core.MethodParameter;
29 import org.springframework.lang.Nullable;
30 import org.springframework.web.bind.annotation.ValueConstants;
31
32
33
34
35
36
37 public abstract class SortOrderHandlerMethodArgumentResolverSupport {
38
39 private SortOrderTextSeparators textSeparators = SortOrderTextSeparators.defaults();
40
41
42
43
44 protected SortOrderHandlerMethodArgumentResolverSupport() {
45 super();
46 }
47
48
49
50
51
52
53 public void setTextSeparators(SortOrderTextSeparators textSeparators) {
54 if (nonNull(textSeparators)) {
55 this.textSeparators = textSeparators;
56 }
57 }
58
59
60
61
62
63
64
65 protected String getParameterName(@Nullable MethodParameter parameter) {
66 return Optional.ofNullable(parameter)
67 .map(p -> getParameterName(p.getParameterAnnotation(SortOrderRequestParam.class)))
68 .or(() -> Optional.ofNullable(parameter)
69 .map(MethodParameter::getParameterName))
70 .filter(name -> !name.isEmpty())
71 .orElse("sort");
72 }
73
74 private String getParameterName(SortOrderRequestParam requestParam) {
75 if (isNull(requestParam)) {
76 return null;
77 }
78 if (!requestParam.name().isEmpty()) {
79 return requestParam.name();
80 }
81 return null;
82 }
83
84
85
86
87
88
89
90 protected SortOrder getDefaultFromAnnotationOrFallback(MethodParameter parameter) {
91 return Optional.ofNullable(parameter.getParameterAnnotation(SortOrderRequestParam.class))
92 .map(SortOrderRequestParam::defaultSort)
93 .filter(defaultValue -> !ValueConstants.DEFAULT_NONE.equals(defaultValue))
94 .map(defaultValue -> SortOrder.fromSortOrderText(defaultValue, textSeparators))
95 .orElseGet(SortOrder::unsorted);
96 }
97
98
99
100
101
102
103
104 protected SortOrder parseParameterValues(List<String> parameterValues) {
105 List<SortOrderItem> sortOrderItems = new ArrayList<>();
106 for (String parameterValue : parameterValues) {
107 sortOrderItems.addAll(SortOrder.fromSortOrderText(parameterValue, textSeparators).getItems());
108 }
109 return new SortOrder(sortOrderItems);
110 }
111
112 }