/
PrefixedFormInjector.java
86 lines (77 loc) · 2.48 KB
/
PrefixedFormInjector.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package org.jboss.resteasy.core;
import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.resteasy.spi.HttpResponse;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.resteasy.util.PrefixedFormFieldsHttpRequest;
import javax.ws.rs.core.MultivaluedMap;
import java.util.List;
/**
* Extension of {@link FormInjector} that handles prefixes for associated classes.
*/
public class PrefixedFormInjector extends FormInjector
{
private final String prefix;
/**
* Constructor setting the prefix.
* @param type type class
* @param prefix prefix
* @param factory provider factory
*/
public PrefixedFormInjector(final Class type, final String prefix, final ResteasyProviderFactory factory)
{
super(type, factory);
this.prefix = prefix;
}
/**
* {@inheritDoc} Wraps the request in a
*/
@Override
public Object inject(HttpRequest request, HttpResponse response)
{
if (!containsPrefixedFormFieldsWithValue(request.getDecodedFormParameters()))
{
return null;
}
return doInject(prefix, request, response);
}
/**
* Calls the super {@link #inject(org.jboss.resteasy.spi.HttpRequest, org.jboss.resteasy.spi.HttpResponse, boolean)} method.
* @param prefix prefix
* @param request http request
* @param response http response
* @param unwrapAsync unwrap async
* @return injector instance
*/
protected Object doInject(String prefix, HttpRequest request, HttpResponse response)
{
return super.inject(new PrefixedFormFieldsHttpRequest(prefix, request), response);
}
/**
* Checks to see if the decodedParameters contains any form fields starting with the prefix. Also checks if the value is not empty.
* @param decodedFormParameters decoded parameters map
* @return boolean result
*/
private boolean containsPrefixedFormFieldsWithValue(MultivaluedMap<String, String> decodedFormParameters)
{
for (String parameterName : decodedFormParameters.keySet())
{
if (parameterName.startsWith(prefix))
{
if (hasValue(decodedFormParameters.get(parameterName)))
{
return true;
}
}
}
return false;
}
/**
* Checks that the list has an non empty value.
* @param list list of values
* @return true if the list contains values
*/
protected boolean hasValue(List<String> list)
{
return !list.isEmpty() && list.get(0).length() > 0;
}
}