1 16 19 20 package org.apache.pluto.portalImpl.core; 21 22 import java.util.ArrayList ; 23 import java.util.HashMap ; 24 import java.util.Iterator ; 25 import java.util.Map ; 26 import java.util.StringTokenizer ; 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 ACTION = "ac"; 39 static public final String MODE = "md"; 40 static public final String PORTLET_ID = "pid"; 41 static public final String PREFIX = "_"; 42 static public final String PREV_MODE = "pm"; 43 static public final String PREV_STATE = "ps"; 44 static public final String RENDER_PARAM = "rp"; 45 static public final String STATE = "st"; 46 47 public static String decodeParameterName(String paramName) 48 { 49 return paramName.substring(PREFIX.length()); 50 } 51 52 public static String decodeParameterValue(String paramName, String paramValue) 53 { 54 return paramValue; 55 } 56 57 private static String [] decodeRenderParamValues(String encodedParamValues) 58 { 59 StringTokenizer tokenizer = new StringTokenizer (encodedParamValues, "_"); 60 if (!tokenizer.hasMoreTokens()) return null; 61 String _count = tokenizer.nextToken(); 62 int count = Integer.valueOf(_count).intValue(); 63 String [] values = new String [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 decodeValue(String 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 encodeParameter(String param) 85 { 86 return PREFIX+param; 87 } 88 89 public static String encodeRenderParamName(PortletWindow window, String paramName) 90 { 91 StringBuffer returnvalue = new StringBuffer (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 encodeRenderParamValues(String [] paramValues) 101 { 102 StringBuffer returnvalue = new StringBuffer (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 encodeValue(String 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 getRenderParamKey(PortletWindow window) 128 { 129 return RENDER_PARAM+"_"+window.getId().toString(); 130 } 131 132 public static boolean isControlParameter(String param) 133 { 134 return param.startsWith(PREFIX); 135 } 136 137 public static boolean isStateFullParameter(String 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 requestParameter = new HashMap (); 151 private Map stateFullControlParameter = null; 152 private Map 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 prefix = getRenderParamKey(portletWindow); 170 Iterator keyIterator = stateFullControlParameter.keySet().iterator(); 171 172 while (keyIterator.hasNext()) { 173 String name = (String )keyIterator.next(); 174 if (name.startsWith(prefix)) { 175 keyIterator.remove(); 176 } 177 } 178 } 179 180 private String getActionKey(PortletWindow window) 181 { 182 return ACTION+"_"+window.getId().toString(); 183 } 184 185 public String [] getActionParameter(PortletWindow window, String paramName) 186 { 187 String encodedValues = (String )stateFullControlParameter.get(encodeRenderParamName(window, paramName)); 188 String [] values = decodeRenderParamValues(encodedValues); 189 return values; 190 } 191 192 193 public PortletMode getMode(PortletWindow window) 194 { 195 String mode = (String )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 getModeKey(PortletWindow window) 206 { 207 return MODE+"_"+window.getId().toString(); 208 } 209 210 public String getPIDValue() 211 { 212 String value = (String )stateLessControlParameter.get(getPortletIdKey()); 213 return value==null?"":value; 214 } 215 216 private String getPortletIdKey() 217 { 218 return PORTLET_ID; 219 } 220 221 public PortletWindow getPortletWindowOfAction() 222 { 223 Iterator iterator = getStateLessControlParameter().keySet().iterator(); 224 while (iterator.hasNext()) { 225 String name = (String )iterator.next(); 226 if (name.startsWith(ACTION)) { 227 String 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 mode = (String )stateFullControlParameter.get(getPrevModeKey(window)); 240 if (mode!=null) 241 return new PortletMode(mode); 242 else 243 return null; 244 } 245 private String getPrevModeKey(PortletWindow window) 246 { 247 return PREV_MODE+"_"+window.getId().toString(); 248 } 249 250 public WindowState getPrevState(PortletWindow window) 251 { 252 String state = (String )stateFullControlParameter.get(getPrevStateKey(window)); 253 if (state!=null) 254 return new WindowState(state); 255 else 256 return null; 257 } 258 private String getPrevStateKey(PortletWindow window) 259 { 260 return PREV_STATE+"_"+window.getId().toString(); 261 } 262 263 public Iterator getRenderParamNames(PortletWindow window) 264 { 265 ArrayList returnvalue = new ArrayList (); 266 String prefix = getRenderParamKey(window); 267 Iterator keyIterator = stateFullControlParameter.keySet().iterator(); 268 269 while (keyIterator.hasNext()) { 270 String name = (String )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 [] getRenderParamValues(PortletWindow window, String paramName) 280 { 281 String encodedValues = (String )stateFullControlParameter.get(encodeRenderParamName(window, paramName)); 282 String [] values = decodeRenderParamValues(encodedValues); 283 return values; 284 } 285 286 public Map getRequestParameter() 287 { 288 return requestParameter; 289 } 290 291 public WindowState getState(PortletWindow window) 292 { 293 String state = (String )stateFullControlParameter.get(getStateKey(window)); 294 if (state!=null) 295 return new WindowState(state); 296 else 297 return WindowState.NORMAL; 298 } 299 300 public Map getStateFullControlParameter() 301 { 302 return stateFullControlParameter; 303 } 304 305 private String getStateKey(PortletWindow window) 306 { 307 return STATE+"_"+window.getId().toString(); 308 } 309 310 public Map getStateLessControlParameter() 311 { 312 return stateLessControlParameter; 313 } 314 315 public boolean isOnePortletWindowMaximized() 316 { 317 Iterator iterator = stateFullControlParameter.keySet().iterator(); 318 while (iterator.hasNext()) { 319 String name = (String )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 prevMode = stateFullControlParameter.get(getModeKey(window)); 337 if (prevMode!=null) 338 stateFullControlParameter.put(getPrevModeKey(window), prevMode); 339 stateFullControlParameter.put(getModeKey(window), mode.toString()); 341 } 342 343 public void setPortletId(PortletWindow window) 344 { 345 getStateFullControlParameter().put(getPortletIdKey(),window.getId().toString()); 346 } 348 349 public void setRenderParam(PortletWindow window, String name, String [] values) 350 { 351 stateFullControlParameter.put(encodeRenderParamName(window, name), 352 encodeRenderParamValues(values) ); 353 } 354 355 361 public void setRequestParam(String name, String [] values ) 362 { 363 requestParameter.put(name, values ); 364 } 365 366 367 public void setState(PortletWindow window, WindowState state) 368 { 369 Object 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 |