/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/velocity/trunk/tool/src/java/org/sakaiproject/cheftool/VelocityPortletStateAction.java $
* $Id: VelocityPortletStateAction.java 105080 2012-02-24 23:10:31Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.cheftool;
import org.sakaiproject.event.api.SessionState;
/**
* <p>
* VelocityPortletStateAction is an extension of VelocityPortletAction which provides a way to associate Controller state with each instances of the portlet using this action.
* </p>
*/
public abstract class VelocityPortletStateAction extends VelocityPortletPaneledAction
{
/**
* Get the proper state for this instance (if portlet is not known, only context).
*
* @param context
* The Template Context (it contains a reference to the portlet).
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
* @param stateClass
* The Class of the ControllerState to find / create.
* @return The proper state object for this instance.
*/
protected ControllerState getState(Context context, RunData rundata, Class stateClass)
{
return getState(((JetspeedRunData) rundata).getJs_peid(), rundata, stateClass);
} // getState
/**
* Get the proper state for this instance (if portlet is known).
*
* @param portlet
* The portlet being rendered.
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
* @param stateClass
* The Class of the ControllerState to find / create.
* @return The proper state object for this instance.
*/
protected ControllerState getState(VelocityPortlet portlet, RunData rundata, Class stateClass)
{
if (portlet == null)
{
Log.warn("chef", this + ".getState(): portlet null");
return null;
}
return getState(portlet.getID(), rundata, stateClass);
} // getState
/**
* Get the proper state for this instance (if portlet id is known).
*
* @param peid
* The portlet id.
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
* @param stateClass
* The Class of the ControllerState to find / create.
* @return The proper state object for this instance.
*/
protected ControllerState getState(String peid, RunData rundata, Class stateClass)
{
if (peid == null)
{
Log.warn("chef", this + ".getState(): peid null");
return null;
}
try
{
// get the PortletSessionState
SessionState ss = ((JetspeedRunData) rundata).getPortletSessionState(peid);
// get the state object
ControllerState state = (ControllerState) ss.getAttribute("state");
if (state != null) return state;
// if there's no "state" object in there, make one
state = (ControllerState) stateClass.newInstance();
state.setId(peid);
// TODO: this does not seem used -ggolden
// state.setSetId(((JetspeedRunData)rundata).getPageSessionId());
// remember it!
ss.setAttribute("state", state);
return state;
}
catch (Exception e)
{
Log.warn("chef", "", e);
}
return null;
} // getState
/**
* Release the proper state for this instance (if portlet is not known, only context).
*
* @param context
* The Template Context (it contains a reference to the portlet).
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
*/
protected void releaseState(Context context, RunData rundata)
{
releaseState(((JetspeedRunData) rundata).getJs_peid(), rundata);
} // releaseState
/**
* Release the proper state for this instance (if portlet is known).
*
* @param portlet
* The portlet being rendered.
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
*/
protected void releaseState(VelocityPortlet portlet, RunData rundata)
{
releaseState(portlet.getID(), rundata);
} // releaseState
/**
* Release the proper state for this instance (if portlet id is known).
*
* @param peid
* The portlet id being rendered.
* @param rundata
* The Jetspeed (Turbine) rundata associated with the request.
*/
protected void releaseState(String peid, RunData rundata)
{
try
{
// get the PortletSessionState
SessionState ss = ((JetspeedRunData) rundata).getPortletSessionState(peid);
// get the state object
ControllerState state = (ControllerState) ss.getAttribute("state");
// recycle the state object
state.recycle();
// clear out the SessionState for this Portlet
ss.removeAttribute("state");
ss.clear();
}
catch (Exception e)
{
Log.warn("chef", "", e);
}
} // releaseState
} // VelocityPortletStateAction