String cloneStateId = persistenceManager.cloneState(portletStateId, newPrefs);
// Return the clone context
String cloneId = PortletContext.PRODUCER_CLONE_ID_PREFIX + cloneStateId;
PortletContext clonedCtx = PortletContext.createPortletContext(cloneId);
StateEvent event = new StateEvent(clonedCtx, StateEvent.Type.PORTLET_CLONED_EVENT);
instanceCtx.onStateEvent(event);
}
catch (NoSuchStateException e)
{
throw new PortletInvokerException("Unexpected exception", e);
}
catch (InvalidStateIdException e)
{
throw new PortletInvokerException("Unexpected exception", e);
}
}
else
{
PortletContext clonedCtx = marshall(stateType, context.getPortletId(), newPrefs);
StateEvent event = new StateEvent(clonedCtx, StateEvent.Type.PORTLET_CLONED_EVENT);
instanceCtx.onStateEvent(event);
}
}
else
{
// Add the missing mutable portlet state
getPropertiesFromMetaData(portlet.getContext(), newPrefs);
//
if (persistLocally)
{
// Create the new state
String cloneStateId = persistenceManager.createState(context.getPortletId(), newPrefs);
// Return the clone context
String cloneId = PortletContext.PRODUCER_CLONE_ID_PREFIX + cloneStateId;
PortletContext clonedCtx = PortletContext.createPortletContext(cloneId);
StateEvent event = new StateEvent(clonedCtx, StateEvent.Type.PORTLET_CLONED_EVENT);
instanceCtx.onStateEvent(event);
}
else
{
PortletContext clonedCtx = marshall(stateType, context.getPortletId(), newPrefs);
StateEvent event = new StateEvent(clonedCtx, StateEvent.Type.PORTLET_CLONED_EVENT);
instanceCtx.onStateEvent(event);
}
}
break;
}
case READ_WRITE:
{
StatefulContext statefulContext = (StatefulContext)context;
if (statefulContext.isLocal())
{
// Update the state
try
{
LocalContext localContext = (LocalContext)statefulContext;
String stateId = localContext.getStateId();
persistenceManager.updateState(stateId, newPrefs);
}
catch (NoSuchStateException e)
{
throw new PortletInvokerException("Unexpected exception", e);
}
catch (InvalidStateIdException e)
{
throw new PortletInvokerException("Unexpected exception", e);
}
}
else
{
PortletContext modifiedCtx = marshall(stateType, context.getPortletId(), newPrefs);
StateEvent event = new StateEvent(modifiedCtx, StateEvent.Type.PORTLET_MODIFIED_EVENT);
instanceCtx.onStateEvent(event);
}
break;
}
case READ_ONLY: