1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.web.servlet.mvc.condition;
18
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.LinkedHashSet;
22 import java.util.Set;
23 import javax.servlet.http.HttpServletRequest;
24
25 import org.springframework.web.bind.annotation.RequestMapping;
26 import org.springframework.web.util.WebUtils;
27
28
29
30
31
32
33
34
35
36 public final class ParamsRequestCondition extends AbstractRequestCondition<ParamsRequestCondition> {
37
38 private final Set<ParamExpression> expressions;
39
40
41
42
43
44
45
46 public ParamsRequestCondition(String... params) {
47 this(parseExpressions(params));
48 }
49
50 private ParamsRequestCondition(Collection<ParamExpression> conditions) {
51 this.expressions = Collections.unmodifiableSet(new LinkedHashSet<ParamExpression>(conditions));
52 }
53
54
55 private static Collection<ParamExpression> parseExpressions(String... params) {
56 Set<ParamExpression> expressions = new LinkedHashSet<ParamExpression>();
57 if (params != null) {
58 for (String param : params) {
59 expressions.add(new ParamExpression(param));
60 }
61 }
62 return expressions;
63 }
64
65
66
67
68
69 public Set<NameValueExpression<String>> getExpressions() {
70 return new LinkedHashSet<NameValueExpression<String>>(this.expressions);
71 }
72
73 @Override
74 protected Collection<ParamExpression> getContent() {
75 return this.expressions;
76 }
77
78 @Override
79 protected String getToStringInfix() {
80 return " && ";
81 }
82
83
84
85
86
87 @Override
88 public ParamsRequestCondition combine(ParamsRequestCondition other) {
89 Set<ParamExpression> set = new LinkedHashSet<ParamExpression>(this.expressions);
90 set.addAll(other.expressions);
91 return new ParamsRequestCondition(set);
92 }
93
94
95
96
97
98 @Override
99 public ParamsRequestCondition getMatchingCondition(HttpServletRequest request) {
100 for (ParamExpression expression : expressions) {
101 if (!expression.match(request)) {
102 return null;
103 }
104 }
105 return this;
106 }
107
108
109
110
111
112
113
114
115
116
117
118
119 @Override
120 public int compareTo(ParamsRequestCondition other, HttpServletRequest request) {
121 return (other.expressions.size() - this.expressions.size());
122 }
123
124
125
126
127
128 static class ParamExpression extends AbstractNameValueExpression<String> {
129
130 ParamExpression(String expression) {
131 super(expression);
132 }
133
134 @Override
135 protected boolean isCaseSensitiveName() {
136 return true;
137 }
138
139 @Override
140 protected String parseValue(String valueExpression) {
141 return valueExpression;
142 }
143
144 @Override
145 protected boolean matchName(HttpServletRequest request) {
146 return WebUtils.hasSubmitParameter(request, name);
147 }
148
149 @Override
150 protected boolean matchValue(HttpServletRequest request) {
151 return value.equals(request.getParameter(name));
152 }
153 }
154
155 }