1 package org.astrogrid.portal.acting;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.StringTokenizer;
6
7 import org.apache.avalon.framework.parameters.Parameters;
8 import org.apache.cocoon.acting.AbstractAction;
9 import org.apache.cocoon.environment.ObjectModelHelper;
10 import org.apache.cocoon.environment.Redirector;
11 import org.apache.cocoon.environment.Request;
12 import org.apache.cocoon.environment.Session;
13 import org.apache.cocoon.environment.SourceResolver;
14 import org.astrogrid.portal.utils.acting.ActionUtils;
15 import org.astrogrid.portal.utils.acting.ActionUtilsFactory;
16
17 /***
18 * Given a list of parameter names, return the values to the sitemap from either in priority order:
19 * <ul>
20 * <li>request</li>
21 * <li>session</li>
22 * <li>sitemap</li>
23 * </ul>
24 * If any of the parameters does not exist, action fails.
25 * <p/>
26 * SiteMap parameters:
27 * <ol>
28 * <dt>parameter-names</dt>
29 * <dd>space-separated list of parameter names to return</dd>
30 * </ol>
31 */
32 public class ReturnAnyParameterAction extends AbstractAction {
33
34 public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters params)
35 throws Exception {
36 Map sitemapParams = new HashMap();
37
38 ActionUtils utils = ActionUtilsFactory.getActionUtils();
39 Request request = ObjectModelHelper.getRequest(objectModel);
40 Session session = request.getSession(true);
41
42 String parameterNames = params.getParameter("parameter-names", "");
43 if(parameterNames != null && parameterNames.length() > 0) {
44 String parameterName = null;
45 String parameterValue = null;
46 StringTokenizer tokens = new StringTokenizer(parameterNames);
47 while(tokens.hasMoreTokens()) {
48 parameterName = tokens.nextToken();
49 parameterValue = utils.getAnyParameter(parameterName, params, request, session);
50
51 if(parameterValue != null && parameterValue.length() > 0) {
52 sitemapParams.put(parameterName, parameterValue);
53 }
54 else {
55 return null;
56 }
57 }
58 }
59 else {
60 return null;
61 }
62
63 return sitemapParams;
64 }
65
66 }