1 16 17 package org.apache.jetspeed.modules.actions.portlets; 18 19 import org.apache.jetspeed.modules.actions.portlets.CustomizeSetAction; 21 import org.apache.jetspeed.portal.Portlet; 22 import org.apache.jetspeed.portal.PortletConfig; 23 import org.apache.jetspeed.portal.PortletException; 24 import org.apache.jetspeed.portal.PortletSkin; 25 import org.apache.jetspeed.portal.portlets.VelocityPortlet; 26 import org.apache.jetspeed.services.persistence.PersistenceManager; 27 import org.apache.jetspeed.services.Registry; 28 import org.apache.jetspeed.services.rundata.JetspeedRunData; 29 import org.apache.jetspeed.om.BaseSecurityReference; 30 import org.apache.jetspeed.om.profile.Entry; 31 import org.apache.jetspeed.om.profile.Profile; 32 import org.apache.jetspeed.om.profile.Skin; 33 import org.apache.jetspeed.om.profile.psml.PsmlSkin; 34 import org.apache.jetspeed.om.SecurityReference; 35 import org.apache.jetspeed.om.registry.PortletEntry; 36 import org.apache.jetspeed.om.registry.Parameter; 37 import org.apache.jetspeed.om.registry.base.BaseParameter; 38 import org.apache.jetspeed.om.security.JetspeedUser; 39 import org.apache.jetspeed.services.JetspeedSecurity; 40 import org.apache.jetspeed.services.PortalToolkit; 41 import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; 42 import org.apache.jetspeed.services.logging.JetspeedLogger; 43 import org.apache.jetspeed.services.security.PortalResource; 44 import org.apache.jetspeed.portal.PortletInstance; 45 import org.apache.jetspeed.util.MetaData; 46 import org.apache.jetspeed.services.statemanager.SessionState; 47 48 import org.apache.turbine.util.RunData; 50 import org.apache.turbine.modules.ActionLoader; 51 52 import org.apache.velocity.context.Context; 54 55 import java.util.Vector ; 56 import java.util.Iterator ; 57 58 66 public class CustomizeAction extends VelocityPortletAction 67 { 68 69 public static final String PARAM_NAMESPACE = "_param_"; 70 71 74 private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(CustomizeAction.class.getName()); 75 76 92 protected void buildNormalContext( VelocityPortlet portlet, 93 Context context, 94 RunData rundata ) 95 { 96 97 context.put("skins", CustomizeSetAction.buildList(rundata, Registry.SKIN)); 99 context.put("securitys", CustomizeSetAction.buildList(rundata, Registry.SECURITY)); 100 101 Portlet p = ((JetspeedRunData)rundata).getCustomized(); 103 104 context.put("action", "portlets.CustomizeAction"); 105 106 PortletInstance instance = PersistenceManager.getInstance(p, rundata); 107 context.put("portlet_instance", PersistenceManager.getInstance(p, rundata)); 108 109 if (p==null) return; 110 111 PortletEntry entry = (PortletEntry)Registry.getEntry(Registry.PORTLET,p.getName()); 113 Vector params = new Vector (); 115 Iterator i = entry.getParameterNames(); 116 117 while(i.hasNext()) 119 { 120 String name = (String )i.next(); 121 Parameter param = entry.getParameter(name); 122 123 if ( (!param.isHidden()) && (name.charAt(0)!='_') ) 125 { 126 if (JetspeedSecurity.checkPermission((JetspeedUser)rundata.getUser(), new PortalResource( entry, param), JetspeedSecurity.PERMISSION_CUSTOMIZE)) 128 { 129 Parameter clone = new BaseParameter(); 131 clone.setName(param.getName()); 132 clone.setTitle(param.getTitle()); 133 clone.setDescription(param.getDescription()); 134 clone.setType(param.getType()); 135 if (instance.getAttribute(name, null) != null) 136 { 137 clone.setValue(instance.getAttribute(name)); 138 } 140 else if (p.getPortletConfig().getInitParameter(name) != null) 141 { 142 clone.setValue(p.getPortletConfig().getInitParameter(name)); 143 } 145 else 146 { 147 clone.setValue(param.getValue()); 148 } 150 params.add(clone); 151 } 152 } 153 } 154 155 SessionState customizationState = ((JetspeedRunData)rundata).getPageSessionState(); 157 customizationState.setAttribute("customize-parameters", params); 158 159 context.put("parameters", params); 161 context.put("portlet", p); 162 context.put("customizer", portlet); 163 164 if (p.getPortletConfig().getSecurityRef() != null) 165 context.put("security_ref", p.getPortletConfig().getSecurityRef().getParent()); 166 if (p.getPortletConfig().getSkin() != null) 167 context.put("current_skin", p.getPortletConfig().getPortletSkin().getName()); 168 169 Profile profile = ((JetspeedRunData)rundata).getCustomizedProfile(); 170 String currentTitle = profile.getDocument().getEntryById(p.getID()).getTitle(); 171 if (currentTitle == null && p.getPortletConfig().getMetainfo() != null) 172 { 173 currentTitle = p.getPortletConfig().getMetainfo().getTitle(); 174 } 175 context.put("current_title", currentTitle); 176 177 } 178 179 180 public void doCancel(RunData rundata, Context context) 181 { 182 ((JetspeedRunData)rundata).setCustomized(null); 183 if (((JetspeedRunData)rundata).getCustomized()==null) 184 { 185 try 186 { 187 ActionLoader.getInstance().exec( rundata, "controls.EndCustomize" ); 188 } 189 catch (Exception e) 190 { 191 logger.error("Unable to load action controls.EndCustomize ",e); 192 } 193 } 194 } 195 196 202 public void doDefault(RunData rundata, Context context) 203 { 204 Portlet p = ((JetspeedRunData) rundata).getCustomized(); 207 208 try 210 { 211 PortletInstance instance = PersistenceManager.getInstance(p, rundata); 212 213 instance.removeAllAttributes(); 214 215 try 216 { 217 ((JetspeedRunData) rundata).getCustomizedProfile().store(); 218 } 219 catch (Exception e) 220 { 221 logger.error("Unable to save profile ",e); 222 } 223 224 try 227 { 228 org.apache.jetspeed.util.PortletSessionState.setPortletConfigChanged(p, rundata); 229 p.init(); 230 } 231 catch (PortletException e) 232 { 233 logger.error("Customizer failed to reinitialize the portlet "+p.getName(), e); 234 } 235 236 doCancel(rundata, context); 239 } 240 catch (Exception e) 241 { 242 logger.error("Exception", e); 243 } 244 } 245 246 247 248 public void doUpdate(RunData rundata, Context context) 249 { 250 SessionState customizationState = ((JetspeedRunData)rundata).getPageSessionState(); 252 253 Portlet p = ((JetspeedRunData)rundata).getCustomized(); 256 Vector params = (Vector ) customizationState.getAttribute("customize-parameters"); 257 String newSecurityParent = rundata.getParameters().getString("_security_ref"); 258 String newSkinName = (String ) rundata.getParameters().getString("_skin"); 259 String newTitle = (String ) rundata.getParameters().getString("current_title"); 260 261 boolean changeRequested = ( (params != null) || (newSkinName != null) || (newSecurityParent != null) || (newTitle != null)); 262 boolean madePsChange = false; 263 boolean madePcChange = false; 264 265 if ((p==null) || (changeRequested == false )) 266 { 267 doCancel(rundata, context); 268 return; 269 } 270 PortletConfig pc = p.getPortletConfig(); 271 Profile profile = ((JetspeedRunData)rundata).getCustomizedProfile(); 272 Entry entry = profile.getDocument().getEntryById(p.getID()); 273 274 if ((newSecurityParent != null)) 276 { 277 boolean securityChanged = false; 278 SecurityReference currentSecurityRef = pc.getSecurityRef(); 279 if (currentSecurityRef != null) 280 { 281 securityChanged = (newSecurityParent.equals(currentSecurityRef.getParent()) == false); 282 } 283 else 284 { 285 securityChanged = (newSecurityParent.trim().length() > 0); 286 } 287 if (securityChanged == true) 288 { 289 SecurityReference securityRef = null; 290 if ((newSecurityParent.trim().length() > 0)) 291 { 292 securityRef = new BaseSecurityReference(); 293 securityRef.setParent( newSecurityParent); 294 } 295 pc.setSecurityRef(securityRef); 300 entry.setSecurityRef(securityRef); 301 madePcChange = true; 302 } 303 } 304 305 if (newSkinName != null) 307 { 308 boolean skinChanged = false; 309 String currentSkinName = null; 310 311 if (pc.getSkin() != null) 312 currentSkinName = pc.getPortletSkin().getName(); 313 314 if (currentSkinName != null) 315 { 316 skinChanged = (newSkinName.equals(currentSkinName) == false); 317 } 318 else 319 { 320 skinChanged = (newSkinName.trim().length() > 0); 321 } 322 323 if (skinChanged == true) 324 { 325 PortletSkin skin = null; 326 if ((newSkinName.trim().length() > 0)) 327 { 328 skin = PortalToolkit.getSkin(newSkinName); 329 if (skin != null) 330 { 331 pc.setPortletSkin(skin); 336 337 Skin psmlSkin = entry.getSkin(); 338 if (psmlSkin == null) 339 { 340 entry.setSkin(new PsmlSkin()); 341 } 342 entry.getSkin().setName(newSkinName); 343 } 344 else 345 { 346 logger.warn( "Unable to update skin for portlet entry " + entry.getId() + " because skin " + skin + " does not exist."); 347 } 348 } 349 else 350 { 351 pc.setPortletSkin( null); 356 entry.setSkin(null); 357 } 358 madePcChange = true; 359 } 360 } 361 362 if (newTitle != null) 364 { 365 boolean titleChanged = false; 366 String currentTitle = entry.getTitle(); 367 368 MetaData md = pc.getMetainfo(); 369 if (currentTitle == null && md != null && md.getTitle() != null) 370 currentTitle = md.getTitle(); 371 372 if (currentTitle != null) 373 { 374 titleChanged = (newTitle.equals(currentTitle) == false); 375 } 376 else 377 { 378 titleChanged = (newTitle.trim().length() > 0); 379 } 380 381 if (titleChanged == true) 382 { 383 384 if ((newTitle.trim().length() > 0)) 385 { 386 if (md == null) { 391 md = new MetaData(); 392 pc.setMetainfo(md); 393 } 394 md.setTitle(newTitle); 395 entry.setTitle(newTitle); 396 madePcChange = true; 397 } 398 } 399 } 400 401 try 403 { 404 PortletInstance instance = PersistenceManager.getInstance(p, rundata); 405 PortletEntry regEntry = (PortletEntry) Registry.getEntry(Registry.PORTLET, p.getName()); 406 407 Iterator i = params.iterator(); 408 409 while(i.hasNext()) 411 { 412 Parameter param = (Parameter)i.next(); 413 String name = param.getName(); 414 String newValue = null; 415 String [] testArray = rundata.getParameters().getStrings(name); 416 if (testArray != null && testArray.length > 1) 417 { 418 newValue = org.apache.jetspeed.util.StringUtils.arrayToString(testArray, ","); 419 } 420 else 421 { 422 newValue = rundata.getParameters().getString(name); 423 if (newValue == null) 424 { 425 newValue = ""; 426 } 427 } 428 String regValue = regEntry.getParameter(name).getValue(); String psmlValue = instance.getAttribute(name); 430 431 434 if (newValue != null) 436 { 437 if (!regValue.equals(newValue) || !psmlValue.equals(newValue)) 440 { 441 instance.setAttribute(name, newValue); 442 psmlValue = newValue; 443 } 445 madePsChange = true; 446 } 447 if (psmlValue != null && psmlValue.equals(regValue)) 449 { 450 instance.removeAttribute(name); 452 madePsChange = true; 453 } 454 455 } 456 457 if ((madePsChange == true) || (madePcChange == true)) 459 { 460 try 461 { 462 JetspeedRunData jdata = (JetspeedRunData) rundata; 463 profile.store(); 464 p.init(); 467 org.apache.jetspeed.util.PortletSessionState.setPortletConfigChanged(p, rundata); 468 } 469 catch (PortletException e) 470 { 471 logger.error("Customizer failed to reinitialize the portlet "+p.getName(), e); 472 } 473 catch (Exception e) 474 { 475 logger.error("Unable to save profile ",e); 476 } 477 } 478 479 doCancel(rundata, context); 482 } 483 catch (Exception e) 484 { 485 logger.error("Exception", e); 486 } 487 } 488 } 489 | Popular Tags |