paulsp 2002/06/30 11:55:38 Modified: webapp/WEB-INF/templates/vm/portlets/html customizer-portlet.vm src/java/org/apache/jetspeed/services/portletfactory JetspeedPortletFactoryService.java src/java/org/apache/jetspeed/modules/actions/portlets CustomizeAction.java Log: The customizer can now be used to set the Skin and Security Ref on a PSML entry Revision Changes Path 1.6 +35 -0 jakarta-jetspeed/webapp/WEB-INF/templates/vm/portlets/html/customizer-portlet.vm Index: customizer-portlet.vm =================================================================== RCS file: /home/cvs/jakarta-jetspeed/webapp/WEB-INF/templates/vm/portlets/html/customizer-portlet.vm,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- customizer-portlet.vm 7 May 2002 14:17:06 -0000 1.5 +++ customizer-portlet.vm 30 Jun 2002 18:55:38 -0000 1.6 @@ -11,6 +11,41 @@ <br> #end <table width="100%" cellpadding="1" cellspacing="0"> + <tr> + <td><b>$l10n.CUSTOMIZER_SKIN</b></td> + <td> + <select name="_skin"> + <option value="">-- Default-- + #foreach ($temp_skin in $skins) + <option value="$temp_skin.Name" #if ($temp_skin.Name == $!current_skin) SELECTED #end> + #if ($temp_skin.Title) $temp_skin.Title #else $temp_skin.Name #end + #end + </select> + </td> + </tr> + <tr> + <td colspan="2"> + <hr/> + </td> + </tr> + <tr> + <td><b>$l10n.CUSTOMIZER_SECURITY_REF</b></td> + <td> + <select name="_security_ref"> + <option value="">-- Default-- + #foreach ($security in $securitys) + <option value="$security.Name" #if ($security.Name == $!security_ref) SELECTED #end> + #if ($security.Title) $security.Title #else $security.Name #end + #end + </select> + </td> + </tr> + <tr> + <td colspan="2"> + <hr/> + </td> + </tr> + #foreach ( $param in $parameters ) <tr> <td align="left" nowrap><b>#if ($param.Title) $param.Title #else $param.Name #end</b></td> 1.14 +18 -17 jakarta-jetspeed/src/java/org/apache/jetspeed/services/portletfactory/JetspeedPortletFactoryService.java Index: JetspeedPortletFactoryService.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/portletfactory/JetspeedPortletFactoryService.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- JetspeedPortletFactoryService.java 30 Jun 2002 05:23:19 -0000 1.13 +++ JetspeedPortletFactoryService.java 30 Jun 2002 18:55:38 -0000 1.14 @@ -148,11 +148,12 @@ } PortletConfig pc = getPortletConfig(regEntry, entry.getId()); - + + // Set portlet config with values from PSML Entry pc.getInitParameters().putAll(getParameters(entry)); - pc.setPortletSkin( PortalToolkit.getSkin( entry.getSkin() ) ); - + pc.setSecurityRef( entry.getSecurityRef()); + return getPortlet( regEntry.getClassname(), pc, entry.getId() ); } @@ -372,24 +373,24 @@ } /** - Given a PSML Entry, get the value of what its PortletConfig would be. - - @param entry the PSML Entry containing the config - @param portletId the PSML entry's portlet id - @return the newly created PortletConfig object - */ - protected PortletConfig getPortletConfig( PortletEntry entry, String id) + * Given a Registry Entry, get the value of what its PortletConfig would be. + * + * @param entry the PSML Entry containing the config + * @param portletId the PSML entry's portlet id + * @return the newly created PortletConfig object + */ + protected PortletConfig getPortletConfig( PortletEntry portletEntry, String id) { Map map = new HashMap(); - map.putAll(entry.getParameterMap()); + map.putAll(portletEntry.getParameterMap()); PortletConfig pc = new BasePortletConfig(); - pc.setName( entry.getName() ); + pc.setName( portletEntry.getName() ); pc.setInitParameters( map ); - pc.setMetainfo( getMetaData( entry ) ); - pc.setURL( entry.getURL() ); - pc.setCachedOnURL( entry.isCachedOnURL() ); - pc.setSecurityRef( entry.getSecurityRef()); + pc.setMetainfo( getMetaData( portletEntry ) ); + pc.setURL( portletEntry.getURL() ); + pc.setCachedOnURL( portletEntry.isCachedOnURL() ); + pc.setSecurityRef( portletEntry.getSecurityRef()); if (runDataService != null) { 1.8 +125 -4 jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/portlets/CustomizeAction.java Index: CustomizeAction.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/portlets/CustomizeAction.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- CustomizeAction.java 28 Jun 2002 05:37:28 -0000 1.7 +++ CustomizeAction.java 30 Jun 2002 18:55:38 -0000 1.8 @@ -54,18 +54,29 @@ package org.apache.jetspeed.modules.actions.portlets; +// Jetspeed Stuff +import org.apache.jetspeed.modules.actions.portlets.CustomizeSetAction; import org.apache.jetspeed.portal.Portlet; +import org.apache.jetspeed.portal.PortletConfig; import org.apache.jetspeed.portal.PortletException; +import org.apache.jetspeed.portal.PortletSkin; import org.apache.jetspeed.portal.portlets.VelocityPortlet; import org.apache.jetspeed.portal.service.PersistenceService; import org.apache.jetspeed.portal.service.ServiceFactory; import org.apache.jetspeed.portal.service.ServiceException; import org.apache.jetspeed.services.Registry; import org.apache.jetspeed.services.rundata.JetspeedRunData; +import org.apache.jetspeed.om.BaseSecurityReference; +import org.apache.jetspeed.om.profile.Entry; +import org.apache.jetspeed.om.profile.Profile; +import org.apache.jetspeed.om.profile.Skin; +import org.apache.jetspeed.om.profile.psml.PsmlSkin; +import org.apache.jetspeed.om.SecurityReference; import org.apache.jetspeed.om.registry.PortletEntry; import org.apache.jetspeed.om.registry.Parameter; import org.apache.jetspeed.om.security.JetspeedUser; import org.apache.jetspeed.services.JetspeedSecurity; +import org.apache.jetspeed.services.PortalToolkit; import org.apache.jetspeed.services.security.PortalResource; // Turbine stuff @@ -99,6 +110,11 @@ Context context, RunData rundata ) { + + // generic context stuff + context.put("skins", CustomizeSetAction.buildList(rundata, Registry.SKIN)); + context.put("securitys", CustomizeSetAction.buildList(rundata, Registry.SECURITY)); + // we should first retrieve the portlet to customize Portlet p = ((JetspeedRunData)rundata).getCustomized(); @@ -132,6 +148,11 @@ // populate the customizer context context.put("parameters", params); context.put("portlet", p); + + if (p.getPortletConfig().getSecurityRef() != null) + context.put("security_ref", p.getPortletConfig().getSecurityRef().getParent()); + if (p.getPortletConfig().getSkin() != null) + context.put("current_skin", p.getPortletConfig().getPortletSkin().getName()); } /** Clean up the customization state */ @@ -152,13 +173,99 @@ // definition Portlet p = ((JetspeedRunData)rundata).getCustomized(); List params = (List)rundata.getSession().getAttribute("parameters"); + String newSecurityParent = rundata.getParameters().getString("_security_ref"); + String newSkinName = (String) rundata.getParameters().getString("_skin"); - if ((p==null)||(params==null)) + boolean changeRequested = ( (params == null) || (newSkinName == null) || (newSecurityParent == null)); + boolean madePsChange = false; + boolean madePcChange = false; + + if ((p==null) || (changeRequested = false )) { doCancel(rundata, context); return; } - + PortletConfig pc = p.getPortletConfig(); + Profile profile = ((JetspeedRunData)rundata).getProfile(); + Entry entry = profile.getDocument().getEntryById(p.getID()); + + // Only update the security ref if the parent changed + if ((newSecurityParent != null)) + { + boolean securityChanged = false; + SecurityReference currentSecurityRef = pc.getSecurityRef(); + if (currentSecurityRef != null) + { + securityChanged = (newSecurityParent.equals(currentSecurityRef.getParent()) == false); + } + else + { + securityChanged = (newSecurityParent.trim().length() > 0); + } + if (securityChanged == true) + { + SecurityReference securityRef = null; + if ((newSecurityParent.trim().length() > 0)) + { + securityRef = new BaseSecurityReference(); + securityRef.setParent( newSecurityParent); + } + pc.setSecurityRef(securityRef); + entry.setSecurityRef(securityRef); + madePcChange = true; + } + } + + // Only update the skin if the name changed + if (newSkinName != null) + { + boolean skinChanged = false; + String currentSkinName = null; + + if (pc.getSkin() != null) + currentSkinName = pc.getPortletSkin().getName(); + + if (currentSkinName != null) + { + skinChanged = (newSkinName.equals(currentSkinName) == false); + } + else + { + skinChanged = (newSkinName.trim().length() > 0); + } + + if (skinChanged == true) + { + PortletSkin skin = null; + if ((newSkinName.trim().length() > 0)) + { + skin = PortalToolkit.getSkin(newSkinName); + if (skin != null) + { + pc.setPortletSkin(skin); + + Skin psmlSkin = entry.getSkin(); + if (psmlSkin == null) + { + entry.setSkin(new PsmlSkin()); + } + entry.getSkin().setName(newSkinName); + } + else + { + Log.warn( "Unable to update skin for portlet entry " + entry.getId() + " because skin " + skin + " does not exist."); + } + } + else + { + pc.setPortletSkin( null); + entry.setSkin(null); + } + madePcChange = true; + } + } + + // Update paramaters try { Object[] obj = { p }; @@ -189,14 +296,28 @@ if (!newValue.equals(p.getPortletConfig().getInitParameter(name))) { page.setAttribute(name,newValue); - p.getPortletConfig().setInitParameter(name,newValue); + pc.setInitParameter(name,newValue); + madePsChange = true; } } } // save all the changes - ps.store(); + if (madePsChange == true) + ps.store(); + if (madePcChange == true) + { + try + { + profile.store(); + } + catch (Exception e) + { + Log.error("Exception occured while saving PSML",e); + } + } + //FIXME: this hack is due to the corrupted lifecycle of the portlet in the //current API when caching is activated try
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>