if (!(invocation instanceof ActionInvocation))
{
throw new IllegalArgumentException("ActionHandler can only handle ActionInvocations!");
}
ActionInvocation actionInvocation = (ActionInvocation)invocation;
PortletContext portletContext = requestPrecursor.getPortletContext();
if (debug)
{
log.debug("Consumer about to attempt action on portlet '" + portletContext.getPortletHandle() + "'");
}
// access mode
InstanceContext instanceContext = invocation.getInstanceContext();
ParameterValidation.throwIllegalArgExceptionIfNull(instanceContext, "instance context");
AccessMode accessMode = instanceContext.getAccessMode();
ParameterValidation.throwIllegalArgExceptionIfNull(accessMode, "access mode");
if (debug)
{
log.debug("Portlet is requesting " + accessMode + " access mode");
}
InteractionParams interactionParams = WSRPTypeFactory.createInteractionParams(WSRPUtils.getStateChangeFromAccessMode(accessMode));
interactionParams.getExtensions().addAll(ExtensionAccess.getConsumerExtensionAccessor().getRequestExtensionsFor(InteractionParams.class));
// interaction state
StateString interactionState = actionInvocation.getInteractionState();
if (interactionState != null)
{
String state = interactionState.getStringValue();
if (!StateString.JBPNS_PREFIX.equals(state)) // fix-me: see JBPORTAL-900
{
interactionParams.setInteractionState(state);
}
}
// check for multi-part
RequestContextWrapper requestContext = new RequestContextWrapper(actionInvocation.getRequestContext());
try
{
MultiPartResult multiPartResult = MultiPartUtil.getMultiPartContent(invocation.getRequestContext());
if (multiPartResult != null)
{
interactionParams.getFormParameters().addAll(multiPartResult.getFormParameters());
interactionParams.getUploadContexts().addAll(multiPartResult.getUploadContexts());
}
// Also check for form parameters from the Invocation
Map<String, String[]> params = actionInvocation.getForm();
if (params != null && !params.isEmpty())
{
int capacity = params.size();
List<NamedString> formParameters = new ArrayList<NamedString>(capacity);
for (Map.Entry param : params.entrySet())