1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.orchestra.requestParameterProvider;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
25
26 import java.io.Serializable;
27 import java.util.ArrayList;
28 import java.util.Iterator;
29 import java.util.List;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class RequestParameterProviderManager implements Serializable
49 {
50 private final Log LOG = LogFactory.getLog(RequestParameterProviderManager.class);
51
52 private static final String PAGE_LINK_SEP = "#";
53 private static final String PAGE_PARAMETER_SEP = "?";
54 private static final String PARAMETER_SEP = "&";
55 private static final String PARAMETER_PROVIDER_MANAGER_KEY = RequestParameterProviderManager.class.getName();
56
57
58
59
60
61 private transient List providers;
62
63 private RequestParameterProviderManager()
64 {
65 }
66
67 public static RequestParameterProviderManager getInstance()
68 {
69 RequestParameterProviderManager manager =
70 (RequestParameterProviderManager) FrameworkAdapter.getCurrentInstance().getSessionAttribute(PARAMETER_PROVIDER_MANAGER_KEY);
71
72 if (manager == null)
73 {
74
75 manager = new RequestParameterProviderManager();
76 FrameworkAdapter.getCurrentInstance().setSessionAttribute(PARAMETER_PROVIDER_MANAGER_KEY, manager);
77 }
78
79 return manager;
80 }
81
82
83
84
85
86
87
88
89 public void register(RequestParameterProvider provider)
90 {
91 if (provider == null)
92 {
93 LOG.warn("RequestParameterProvider is null -> no registration!");
94 }
95 else
96 {
97 getProviders().add(provider);
98 }
99 }
100
101
102
103
104
105
106
107
108
109 public String encodeAndAttachParameters(String url)
110 {
111 if (!isResponseIntercepted())
112 {
113 throw new IllegalStateException("RequestParameterServletFilter not called. Please configure the filter " + RequestParameterServletFilter.class.getName() + " in your web.xml to cover your faces requests.");
114 }
115
116 if (PAGE_LINK_SEP.equals(url))
117 {
118
119 return url;
120 }
121
122 StringBuffer sb = new StringBuffer();
123 if (url == null)
124 {
125 LOG.warn("URL is null -> empty string is returned.");
126 return sb.toString();
127 }
128
129 int nuofParams = -1;
130 String firstSeparator = url.indexOf(PAGE_PARAMETER_SEP) == -1 ? PAGE_PARAMETER_SEP : PARAMETER_SEP;
131 int pageLinkPos = url.indexOf(PAGE_LINK_SEP);
132 if (pageLinkPos < 0)
133 {
134 sb.append(url);
135 }
136 else
137 {
138 sb.append(url.substring(0, pageLinkPos));
139 }
140
141 for (Iterator it = getProviders().iterator(); it.hasNext();)
142 {
143 RequestParameterProvider provider = (RequestParameterProvider) it.next();
144 String[] fields = provider.getFields();
145 if (fields == null)
146 {
147 continue;
148 }
149 for (int i = 0; i < fields.length; i++)
150 {
151 nuofParams++;
152
153 sb.append(nuofParams == 0 ? firstSeparator : PARAMETER_SEP);
154 sb.append(fields[i]);
155 sb.append("=");
156 sb.append(provider.getFieldValue(fields[i]));
157 }
158 }
159
160 if (pageLinkPos > -1)
161 {
162 sb.append(url.substring(pageLinkPos));
163 }
164 return sb.toString();
165 }
166
167 protected boolean isResponseIntercepted()
168 {
169 FrameworkAdapter fa = FrameworkAdapter.getCurrentInstance();
170
171 return Boolean.TRUE.equals(fa.getRequestAttribute(RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED))
172 || Boolean.TRUE.equals(fa.getRequestAttribute(RequestParameterServletFilter.REQUEST_PARAM_RESPONSE_WRAPPED));
173 }
174
175 protected List getProviders()
176 {
177 if (providers == null)
178 {
179 providers = new ArrayList();
180 }
181
182 return providers;
183 }
184 }