/* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.modules.actions.portlets; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.apache.jetspeed.modules.actions.portlets.security.SecurityConstants; import org.apache.jetspeed.om.BaseSecurityReference; import org.apache.jetspeed.om.SecurityReference; import org.apache.jetspeed.om.registry.CapabilityMap; import org.apache.jetspeed.om.registry.ClientEntry; import org.apache.jetspeed.om.registry.MediaTypeEntry; import org.apache.jetspeed.om.registry.Parameter; import org.apache.jetspeed.om.registry.PortletEntry; import org.apache.jetspeed.om.registry.PortletInfoEntry; import org.apache.jetspeed.om.registry.RegistryEntry; import org.apache.jetspeed.om.registry.base.BaseCachedParameter; import org.apache.jetspeed.om.registry.base.BaseParameter; import org.apache.jetspeed.om.registry.base.BaseSecurity; import org.apache.jetspeed.portal.portlets.VelocityPortlet; import org.apache.jetspeed.services.Registry; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.jetspeed.util.template.JetspeedLink; import org.apache.jetspeed.util.template.JetspeedLinkFactory; import org.apache.turbine.util.DynamicURI; import org.apache.turbine.util.RunData; import org.apache.turbine.util.TurbineException; import org.apache.turbine.util.security.EntityExistsException; import org.apache.velocity.context.Context; /** * An abstract base class with default actions for many of the common * fields and parameters shared by the registry entries. To add a new registry * update action, simply derive from this class and override the resetForm, * clearUserData, and updateRegistry functions. If you need to provide more * actions that those that are provided, simply create them in your derived class. * * @author <a href="mailto:caius1440@hotmail.com">Jeremy Ford</a> * @version $Id: RegistryUpdateAction.java,v 1.10 2004/03/31 04:49:10 morciuch Exp $ */ public abstract class RegistryUpdateAction extends SecureVelocityPortletAction { protected String registryEntryName = ""; protected String registry = ""; protected String pane = ""; private static final String REASON = "reason"; /** * Static initialization of the logger for this class */ private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(RegistryUpdateAction.class.getName()); protected void buildNormalContext( VelocityPortlet portlet, Context context, RunData rundata) throws Exception { String msgid = rundata.getParameters().getString(SecurityConstants.PARAM_MSGID); if (msgid != null) { int id = Integer.parseInt(msgid); if (id < SecurityConstants.MESSAGES.length) context.put( SecurityConstants.PARAM_MSG, SecurityConstants.MESSAGES[id]); } String mode = rundata.getParameters().getString(SecurityConstants.PARAM_MODE); context.put(SecurityConstants.PARAM_MODE, mode); String reason = rundata.getParameters().getString(REASON); context.put(REASON, reason); } /** * Insert a registry entry into the registry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doInsert(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); if (entryName == null || entryName.length() == 0) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_INSERT, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } else { //check if profile to be created already exists RegistryEntry existingEntry = Registry.getEntry(registry, entryName); if (existingEntry != null) { throw new EntityExistsException( "RegistryEntry: " + entryName + " Already Exists!"); } RegistryEntry registryEntry = Registry.createEntry(registry); registryEntry.setName(entryName); updateRegistryEntry(rundata, registryEntry); Registry.addEntry(registry, registryEntry); clearUserData(rundata); rundata.getUser().setTemp(RegistryBrowseAction.PREFIX + registry + ":" + RegistryBrowseAction.REFRESH, Boolean.TRUE); } } catch (EntityExistsException e) { // // dup key found - display error message - bring back to same screen // DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_INSERT, SecurityConstants.MID_ENTITY_ALREADY_EXISTS); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Trying to create duplicate entry"); } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_INSERT, SecurityConstants.MID_UPDATE_FAILED); duri = duri.addQueryData(REASON, e.getMessage()); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Update a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doUpdate(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); RegistryEntry registryEntry = Registry.getEntry(registry, entryName); if (registryEntry != null) { updateRegistryEntry(rundata, registryEntry); Registry.addEntry(registry, registryEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry for updating"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); duri = duri.addQueryData(REASON, e.getMessage()); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Delete a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doDelete(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); if (entryName == null || entryName.length() == 0) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_DELETE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry for deleting"); } else { Registry.removeEntry(registry, entryName); clearUserData(rundata); rundata.getUser().setTemp(RegistryBrowseAction.PREFIX + registry + ":" + RegistryBrowseAction.REFRESH, Boolean.TRUE); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_DELETE, SecurityConstants.MID_DELETE_FAILED); duri = duri.addQueryData(REASON, e.getMessage()); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Cleanup method * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doCancel(RunData rundata, Context context) throws Exception { clearUserData(rundata); } /** * Basic implementation of a method to update a registry entry. The fields that * are common to all registry entries can simply be added below. * @param rundata The turbine rundata context for this request. * @param registryEntry The registry entry to update */ protected void updateRegistryEntry( RunData rundata, RegistryEntry registryEntry) throws Exception { String description = rundata.getParameters().getString("description"); String title = rundata.getParameters().getString("title"); Boolean hidden = rundata.getParameters().getBool("hidden"); String securityRef = rundata.getParameters().getString("security_ref"); SecurityReference security = registryEntry.getSecurityRef(); String securityParent = null; if (security != null) { securityParent = security.getParent(); } if (hasChanged(securityParent, securityRef)) { if (security == null) { security = new BaseSecurityReference(); } security.setParent(securityRef); registryEntry.setSecurityRef(security); } if (hasChanged(registryEntry.getDescription(), description)) { registryEntry.setDescription(description); } if (hasChanged(String.valueOf(registryEntry.isHidden()), String.valueOf(hidden))) { registryEntry.setHidden(hidden.booleanValue()); } if (hasChanged(registryEntry.getTitle(), title)) { registryEntry.setTitle(title); } } /** * Determines whether a field has changed value. Used in update methods. * * @param oldValue The original value * @param newValue The new value */ protected boolean hasChanged(String oldValue, String newValue) { boolean result = false; if (oldValue == null && newValue == null) { result = false; } else if ( oldValue == null && (newValue != null && newValue.length() == 0)) { result = false; } else if (oldValue == null && (newValue != null)) { result = true; } else if (oldValue != null && newValue == null) { result = true; } else if (!oldValue.equals(newValue)) { result = true; } return result; } /** * Add a parameter to a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doAddparameter(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry regEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (regEntry != null) { String parameterName = rundata.getParameters().getString("parameter_name"); if (parameterName != null && parameterName.length() > 0) { Parameter parameter = null; if (regEntry instanceof PortletEntry) { parameter = new BaseCachedParameter(); boolean isCachedOnName = rundata.getParameters().getBoolean( "cached_on_name", false); boolean isCachedOnValue = rundata.getParameters().getBoolean( "cached_on_value", false); ((BaseCachedParameter) parameter).setCachedOnName( isCachedOnName); ((BaseCachedParameter) parameter).setCachedOnValue( isCachedOnValue); } else { parameter = new BaseParameter(); } String parameterValue = rundata.getParameters().getString("parameter_value"); boolean isHidden = rundata.getParameters().getBoolean("is_hidden", false); String description = rundata.getParameters().getString("description"); String title = rundata.getParameters().getString("title"); String type = rundata.getParameters().getString("type"); parameter.setName(parameterName); parameter.setValue(parameterValue); parameter.setHidden(isHidden); parameter.setDescription(description); parameter.setTitle(title); parameter.setType(type); String securityRole = rundata.getParameters().getString("security_role"); String securityRef = rundata.getParameters().getString("security_ref"); if (securityRole != null && securityRole.length() > 0) { BaseSecurity paramSecurity = new BaseSecurity(); paramSecurity.setRole(securityRole); parameter.setSecurity(paramSecurity); } if (securityRef != null && securityRef.length() > 0) { BaseSecurityReference paramSecurityRef = new BaseSecurityReference(); paramSecurityRef.setParent(securityRef); parameter.setSecurityRef(paramSecurityRef); } regEntry.addParameter(parameter); Registry.addEntry(registry, regEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to add a parameter"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Update parameters of a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doUpdateparameters(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry regEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (regEntry != null) { String[] parameters = rundata.getParameters().getStrings("update_parameter_name"); if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { String parameterName = parameters[i]; Parameter parameter = regEntry.getParameter(parameterName); if (regEntry instanceof PortletEntry) { if(parameter == null) { parameter = new BaseCachedParameter(); regEntry.addParameter(parameter); } boolean isCachedOnName = rundata.getParameters().getBoolean( parameterName +".cached_on_name", false); boolean isCachedOnValue = rundata.getParameters().getBoolean( parameterName +".cached_on_value", false); ((BaseCachedParameter) parameter).setCachedOnName( isCachedOnName); ((BaseCachedParameter) parameter).setCachedOnValue( isCachedOnValue); } else if(parameter == null) { parameter = new BaseParameter(); regEntry.addParameter(parameter); } String parameterValue = rundata.getParameters().getString( parameterName + ".parameter_value"); String description = rundata.getParameters().getString( parameterName + ".description"); String title = rundata.getParameters().getString( parameterName + ".title"); String securityRole = rundata.getParameters().getString( parameterName + ".security_role"); String securityRef = rundata.getParameters().getString( parameterName + ".security_ref"); String type = rundata.getParameters().getString( parameterName + ".type"); boolean isHidden = rundata.getParameters().getBoolean( parameterName + ".is_hidden", false); parameter.setName(parameterName); parameter.setValue(parameterValue); parameter.setHidden(isHidden); parameter.setDescription(description); parameter.setTitle(title); parameter.setType(type); if (securityRef != null && securityRef.length() > 0) { BaseSecurityReference paramSecurityRef = new BaseSecurityReference(); paramSecurityRef.setParent(securityRef); parameter.setSecurityRef(paramSecurityRef); } } Registry.addEntry(registry, regEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to update parameters"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Update parameter's values of a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doUpdateparametervalues(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry regEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (regEntry != null) { String[] parameters = rundata.getParameters().getStrings("update_parameter_name"); if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { String parameterName = parameters[i]; String parameterValue = rundata.getParameters().getString( parameterName + ".parameter_value"); Parameter parameter = regEntry.getParameter(parameterName); if (parameter == null) { if (regEntry instanceof PortletEntry) { parameter = new BaseCachedParameter(); } else { parameter = new BaseParameter(); } parameter.setName(parameterName); regEntry.addParameter(parameter); } if (parameter != null) { parameter.setValue(parameterValue); } } Registry.addEntry(registry, regEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to update parameters"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Remove parameters from a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doRemoveparameters(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry portletEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (portletEntry != null) { String[] parameters = rundata.getParameters().getStrings("parameter_name"); if (parameters != null && parameters.length > 0) { for (int i = 0; i < parameters.length; i++) { String parameterName = parameters[i]; portletEntry.removeParameter(parameterName); } Registry.addEntry(registry, portletEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to remove parameters"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Add a media type to a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doAddmediatype(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry portletEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (portletEntry != null) { String mediaType = rundata.getParameters().getString("media_type"); if (mediaType != null && mediaType.length() > 0) { portletEntry.addMediaType(mediaType); Registry.addEntry(registry, portletEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to add media type"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Remove media types from a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doRemovemediatypes(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); PortletInfoEntry portletEntry = (PortletInfoEntry) Registry.getEntry(registry, entryName); if (portletEntry != null) { String[] mediaTypes = rundata.getParameters().getStrings("media_type"); if (mediaTypes != null && mediaTypes.length > 0) { for (int i = 0; i < mediaTypes.length; i++) { String mediaType = mediaTypes[i]; portletEntry.removeMediaType(mediaType); } Registry.addEntry(registry, portletEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_MISSING_PARAMETER); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to remove media types"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Add capabilities to a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doAddcapability(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); RegistryEntry regEntry = Registry.getEntry(registry, entryName); if (regEntry != null) { CapabilityMap cm = null; if (regEntry instanceof MediaTypeEntry) { MediaTypeEntry mediaTypeEntry = (MediaTypeEntry) regEntry; cm = mediaTypeEntry.getCapabilityMap(); } else if (regEntry instanceof ClientEntry) { ClientEntry clientEntry = (ClientEntry) regEntry; cm = clientEntry.getCapabilityMap(); } else { //TODO: throw error } if (cm != null) { String[] capabilities = rundata.getParameters().getStrings("capability"); if (capabilities != null && capabilities.length > 0) { for (int i = 0; i < capabilities.length; i++) { String capability = capabilities[i]; if (cm.contains(capability)) { } else { if (capability != null && capability.length() > 0) { cm.addCapability(capability); } } } } Registry.addEntry(registry, regEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to add capabilities"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Remove capabilites from a registry entry * @param rundata The turbine rundata context for this request. * @param context The velocity context for this request. * @throws Exception */ public void doRemovecapability(RunData rundata, Context context) throws Exception { try { String entryName = rundata.getParameters().getString(registryEntryName); RegistryEntry regEntry = Registry.getEntry(registry, entryName); if (regEntry != null) { CapabilityMap cm = null; if (regEntry instanceof MediaTypeEntry) { MediaTypeEntry mediaTypeEntry = (MediaTypeEntry) regEntry; cm = mediaTypeEntry.getCapabilityMap(); } else if (regEntry instanceof ClientEntry) { ClientEntry clientEntry = (ClientEntry) regEntry; cm = clientEntry.getCapabilityMap(); } else { //TODO: throw error } if (cm != null) { String[] capabilities = rundata.getParameters().getStrings("capability"); if (capabilities != null && capabilities.length > 0) { for (int i = 0; i < capabilities.length; i++) { String capability = capabilities[i]; cm.removeCapability(capability); } Registry.addEntry(registry, regEntry); clearUserData(rundata); } Registry.addEntry(registry, regEntry); clearUserData(rundata); } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); } } else { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_INVALID_ENTITY_NAME); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error( this.getClass().getName() + ": Failed to find registry entry while trying to remove capabilities"); } } catch (Exception e) { DynamicURI duri = redirect( rundata, SecurityConstants.PARAM_MODE_UPDATE, SecurityConstants.MID_UPDATE_FAILED); rundata.setRedirectURI(duri.toString()); resetForm(rundata); logger.error("Exception", e); } } /** * Method that sets up a redirect link given the rundata, the mode, and a reason * @param rundata * @param mode * @param reason * @return * @throws TurbineException */ protected DynamicURI redirect(RunData rundata, String mode, int reason) throws TurbineException { JetspeedLink link = JetspeedLinkFactory.getInstance(rundata); DynamicURI duri = link .getPaneByName(pane) .addPathInfo(SecurityConstants.PARAM_MODE, mode) .addPathInfo(SecurityConstants.PARAM_MSGID, reason); String entryName = rundata.getParameters().getString(registryEntryName); if (entryName != null && entryName.length() > 0) { duri.addQueryData(registryEntryName, entryName); } JetspeedLinkFactory.putInstance(link); return duri; } /** * Remove any data that was added to the user's temporary storage * @param rundata */ protected void clearUserData(RunData rundata) { rundata.getUser().removeTemp(registryEntryName); rundata.getUser().removeTemp("title"); rundata.getUser().removeTemp("description"); } /** * Method to reset data entered into the forms * @param rundata */ protected void resetForm(RunData rundata) { String entryName = rundata.getParameters().getString(registryEntryName); String title = rundata.getParameters().getString("title"); String description = rundata.getParameters().getString("description"); rundata.getUser().setTemp(registryEntryName, entryName); rundata.getUser().setTemp("title", title); rundata.getUser().setTemp("description", description); } /** * Turns an iterator into a collection * * @param iter An iterator * @return the collection */ protected Collection iteratorToCollection(Iterator iter) { Collection collection = new ArrayList(); while (iter.hasNext()) { collection.add(iter.next()); } return collection; } }