KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > pluto > portalImpl > core > PortalControlParameter


1 /*
2  * Copyright 2003,2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 /*
17
18  */

19
20 package org.apache.pluto.portalImpl.core;
21
22 import java.util.ArrayList JavaDoc;
23 import java.util.HashMap JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.util.Map JavaDoc;
26 import java.util.StringTokenizer JavaDoc;
27
28 import javax.portlet.PortletMode;
29 import javax.portlet.WindowState;
30
31 import org.apache.pluto.om.window.PortletWindow;
32 import org.apache.pluto.portalImpl.aggregation.Fragment;
33 import org.apache.pluto.portalImpl.aggregation.PortletFragment;
34 import org.apache.pluto.util.StringUtils;
35
36 public class PortalControlParameter {
37
38     static public final String JavaDoc ACTION = "ac";
39     static public final String JavaDoc MODE = "md";
40     static public final String JavaDoc PORTLET_ID = "pid";
41     static public final String JavaDoc PREFIX = "_";
42     static public final String JavaDoc PREV_MODE = "pm";
43     static public final String JavaDoc PREV_STATE = "ps";
44     static public final String JavaDoc RENDER_PARAM = "rp";
45     static public final String JavaDoc STATE = "st";
46
47     public static String JavaDoc decodeParameterName(String JavaDoc paramName)
48     {
49         return paramName.substring(PREFIX.length());
50     }
51
52     public static String JavaDoc decodeParameterValue(String JavaDoc paramName, String JavaDoc paramValue)
53     {
54         return paramValue;
55     }
56
57     private static String JavaDoc[] decodeRenderParamValues(String JavaDoc encodedParamValues)
58     {
59         StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(encodedParamValues, "_");
60         if (!tokenizer.hasMoreTokens()) return null;
61         String JavaDoc _count = tokenizer.nextToken();
62         int count = Integer.valueOf(_count).intValue();
63         String JavaDoc[] values = new String JavaDoc[count];
64         for (int i=0; i<count; i++) {
65             if (!tokenizer.hasMoreTokens()) return null;
66             values[i] = decodeValue(tokenizer.nextToken());
67         }
68         return values;
69     }
70
71     private static String JavaDoc decodeValue(String JavaDoc value)
72     {
73         value = StringUtils.replace(value, "0x1", "_" );
74         value = StringUtils.replace(value, "0x2", "." );
75         value = StringUtils.replace(value, "0x3", "/" );
76         value = StringUtils.replace(value, "0x4", "\r" );
77         value = StringUtils.replace(value, "0x5", "\n" );
78         value = StringUtils.replace(value, "0x6", "<" );
79         value = StringUtils.replace(value, "0x7", ">" );
80         value = StringUtils.replace(value, "0x8", " " );
81         return value;
82     }
83
84     public static String JavaDoc encodeParameter(String JavaDoc param)
85     {
86         return PREFIX+param;
87     }
88
89     public static String JavaDoc encodeRenderParamName(PortletWindow window, String JavaDoc paramName)
90     {
91         StringBuffer JavaDoc returnvalue = new StringBuffer JavaDoc(50);
92         returnvalue.append(RENDER_PARAM);
93         returnvalue.append("_");
94         returnvalue.append(window.getId().toString());
95         returnvalue.append("_");
96         returnvalue.append(paramName);
97         return returnvalue.toString();
98     }
99
100     public static String JavaDoc encodeRenderParamValues(String JavaDoc[] paramValues)
101     {
102         StringBuffer JavaDoc returnvalue = new StringBuffer JavaDoc(100);
103         returnvalue.append(paramValues.length);
104         for (int i=0; i<paramValues.length; i++) {
105             returnvalue.append("_");
106             if(paramValues[i]!=null) {
107                 returnvalue.append(encodeValue(paramValues[i]));
108             }
109         }
110         return returnvalue.toString();
111     }
112
113
114     private static String JavaDoc encodeValue(String JavaDoc value)
115     {
116         value = StringUtils.replace(value, "_", "0x1" );
117         value = StringUtils.replace(value, ".", "0x2" );
118         value = StringUtils.replace(value, "/", "0x3" );
119         value = StringUtils.replace(value, "\r", "0x4" );
120         value = StringUtils.replace(value, "\n", "0x5" );
121         value = StringUtils.replace(value, "<", "0x6" );
122         value = StringUtils.replace(value, ">", "0x7" );
123         value = StringUtils.replace(value, " ", "0x8" );
124         return value;
125     }
126
127     public static String JavaDoc getRenderParamKey(PortletWindow window)
128     {
129         return RENDER_PARAM+"_"+window.getId().toString();
130     }
131
132     public static boolean isControlParameter(String JavaDoc param)
133     {
134         return param.startsWith(PREFIX);
135     }
136
137     public static boolean isStateFullParameter(String JavaDoc param)
138     {
139         if (isControlParameter(param)) {
140             if ((param.startsWith(PREFIX+MODE)) ||
141                 (param.startsWith(PREFIX+PREV_MODE)) ||
142                 (param.startsWith(PREFIX+STATE)) ||
143                 (param.startsWith(PREFIX+PREV_STATE)) ||
144                 (param.startsWith(PREFIX+RENDER_PARAM))) {
145                 return true;
146             }
147         }
148         return false;
149     }
150     private Map JavaDoc requestParameter = new HashMap JavaDoc();
151     private Map JavaDoc stateFullControlParameter = null;
152     private Map JavaDoc stateLessControlParameter = null;
153
154
155
156
157
158     private PortalURL url;
159
160     public PortalControlParameter(PortalURL url)
161     {
162         this.url = url;
163         stateFullControlParameter = this.url.getClonedStateFullControlParameter();
164         stateLessControlParameter = this.url.getClonedStateLessControlParameter();
165     }
166
167     public void clearRenderParameters(PortletWindow portletWindow)
168     {
169         String JavaDoc prefix = getRenderParamKey(portletWindow);
170         Iterator JavaDoc keyIterator = stateFullControlParameter.keySet().iterator();
171
172         while (keyIterator.hasNext()) {
173             String JavaDoc name = (String JavaDoc)keyIterator.next();
174             if (name.startsWith(prefix)) {
175                 keyIterator.remove();
176             }
177         }
178     }
179
180     private String JavaDoc getActionKey(PortletWindow window)
181     {
182         return ACTION+"_"+window.getId().toString();
183     }
184
185     public String JavaDoc[] getActionParameter(PortletWindow window, String JavaDoc paramName)
186     {
187         String JavaDoc encodedValues = (String JavaDoc)stateFullControlParameter.get(encodeRenderParamName(window, paramName));
188         String JavaDoc[] values = decodeRenderParamValues(encodedValues);
189         return values;
190     }
191
192
193     public PortletMode getMode(PortletWindow window)
194     {
195         String JavaDoc mode = (String JavaDoc)stateFullControlParameter.get(getModeKey(window));
196         if (mode!=null)
197             return new PortletMode(mode);
198         else
199             return PortletMode.VIEW;
200     }
201
202
203
204
205     private String JavaDoc getModeKey(PortletWindow window)
206     {
207         return MODE+"_"+window.getId().toString();
208     }
209
210     public String JavaDoc getPIDValue()
211     {
212         String JavaDoc value = (String JavaDoc)stateLessControlParameter.get(getPortletIdKey());
213         return value==null?"":value;
214     }
215
216     private String JavaDoc getPortletIdKey()
217     {
218         return PORTLET_ID;
219     }
220
221     public PortletWindow getPortletWindowOfAction()
222     {
223         Iterator JavaDoc iterator = getStateLessControlParameter().keySet().iterator();
224         while (iterator.hasNext()) {
225             String JavaDoc name = (String JavaDoc)iterator.next();
226             if (name.startsWith(ACTION)) {
227                 String JavaDoc id = name.substring(ACTION.length()+1);
228                 Fragment fragment = org.apache.pluto.portalImpl.services.pageregistry.PageRegistry.getFragment(id);
229                 if (fragment instanceof PortletFragment) {
230                     return((PortletFragment)fragment).getPortletWindow();
231                 }
232             }
233         }
234         return null;
235     }
236
237     public PortletMode getPrevMode(PortletWindow window)
238     {
239         String JavaDoc mode = (String JavaDoc)stateFullControlParameter.get(getPrevModeKey(window));
240         if (mode!=null)
241             return new PortletMode(mode);
242         else
243             return null;
244     }
245     private String JavaDoc getPrevModeKey(PortletWindow window)
246     {
247         return PREV_MODE+"_"+window.getId().toString();
248     }
249
250     public WindowState getPrevState(PortletWindow window)
251     {
252         String JavaDoc state = (String JavaDoc)stateFullControlParameter.get(getPrevStateKey(window));
253         if (state!=null)
254             return new WindowState(state);
255         else
256             return null;
257     }
258     private String JavaDoc getPrevStateKey(PortletWindow window)
259     {
260         return PREV_STATE+"_"+window.getId().toString();
261     }
262
263     public Iterator JavaDoc getRenderParamNames(PortletWindow window)
264     {
265         ArrayList JavaDoc returnvalue = new ArrayList JavaDoc();
266         String JavaDoc prefix = getRenderParamKey(window);
267         Iterator JavaDoc keyIterator = stateFullControlParameter.keySet().iterator();
268
269         while (keyIterator.hasNext()) {
270             String JavaDoc name = (String JavaDoc)keyIterator.next();
271             if (name.startsWith(prefix)) {
272                 returnvalue.add(name.substring(prefix.length()+1));
273             }
274         }
275
276         return returnvalue.iterator();
277     }
278
279     public String JavaDoc[] getRenderParamValues(PortletWindow window, String JavaDoc paramName)
280     {
281         String JavaDoc encodedValues = (String JavaDoc)stateFullControlParameter.get(encodeRenderParamName(window, paramName));
282         String JavaDoc[] values = decodeRenderParamValues(encodedValues);
283         return values;
284     }
285
286     public Map JavaDoc getRequestParameter()
287     {
288         return requestParameter;
289     }
290
291     public WindowState getState(PortletWindow window)
292     {
293         String JavaDoc state = (String JavaDoc)stateFullControlParameter.get(getStateKey(window));
294         if (state!=null)
295             return new WindowState(state);
296         else
297             return WindowState.NORMAL;
298     }
299
300     public Map JavaDoc getStateFullControlParameter()
301     {
302         return stateFullControlParameter;
303     }
304
305     private String JavaDoc getStateKey(PortletWindow window)
306     {
307         return STATE+"_"+window.getId().toString();
308     }
309
310     public Map JavaDoc getStateLessControlParameter()
311     {
312         return stateLessControlParameter;
313     }
314
315     public boolean isOnePortletWindowMaximized()
316     {
317         Iterator JavaDoc iterator = stateFullControlParameter.keySet().iterator();
318         while (iterator.hasNext()) {
319             String JavaDoc name = (String JavaDoc)iterator.next();
320             if (name.startsWith(STATE)) {
321                 if (stateFullControlParameter.get(name).equals(WindowState.MAXIMIZED.toString())) {
322                     return true;
323                 }
324             }
325         }
326         return false;
327     }
328
329     public void setAction(PortletWindow window)
330     {
331         getStateFullControlParameter().put(getActionKey(window),ACTION.toUpperCase());
332     }
333
334     public void setMode(PortletWindow window, PortletMode mode)
335     {
336         Object JavaDoc prevMode = stateFullControlParameter.get(getModeKey(window));
337         if (prevMode!=null)
338             stateFullControlParameter.put(getPrevModeKey(window), prevMode);
339         // set current mode
340
stateFullControlParameter.put(getModeKey(window), mode.toString());
341     }
342
343     public void setPortletId(PortletWindow window)
344     {
345         getStateFullControlParameter().put(getPortletIdKey(),window.getId().toString());
346         //getStateLessControlParameter().put(getPortletIdKey(),window.getId().toString());
347
}
348
349     public void setRenderParam(PortletWindow window, String JavaDoc name, String JavaDoc[] values)
350     {
351         stateFullControlParameter.put(encodeRenderParamName(window, name),
352                                       encodeRenderParamValues(values) );
353     }
354
355     /*
356         public void setRequestParam(String name, String value)
357         {
358             requestParameter.put(name, value );
359         }
360     */

361     public void setRequestParam(String JavaDoc name, String JavaDoc[] values )
362     {
363         requestParameter.put(name, values );
364     }
365
366
367     public void setState(PortletWindow window, WindowState state)
368     {
369         Object JavaDoc prevState = stateFullControlParameter.get(getStateKey(window));
370         if (prevState!=null)
371             stateFullControlParameter.put(getPrevStateKey(window), prevState);
372         stateFullControlParameter.put(getStateKey(window), state.toString());
373     }
374
375 }
376
Popular Tags