ParameterValidation.throwIllegalArgExceptionIfNullOrEmpty(changes, "Property changes");
WSRPPortlet portlet = getWSRPPortlet(portletContext);
if (portlet == null)
{
throw new PortletInvokerException("Cannot set properties on portlet '" + portletContext.getId()
+ "' because there is no such portlet.");
}
PropertyList propertyList = WSRPTypeFactory.createPropertyList();
int changesNumber = changes.length;
List<Property> updates = new ArrayList<Property>(changesNumber);
List<ResetProperty> resets = new ArrayList<ResetProperty>(changesNumber);
for (int i = 0; i < changesNumber; i++)
{
PropertyChange change = changes[i];
switch (change.getType())
{
case PropertyChange.PREF_RESET:
resets.add(WSRPTypeFactory.createResetProperty(change.getKey()));
break;
case PropertyChange.PREF_UPDATE:
// todo: deal with language more appropriately
updates.add(WSRPTypeFactory.createProperty(change.getKey(),
WSRPUtils.toString(Locale.getDefault()), change.getValue().get(0)));
break;
default:
throw new IllegalArgumentException("Unexpected property change type: " + change.getType());
}
}
propertyList.getProperties().addAll(updates);
propertyList.getResetProperties().addAll(resets);
try
{
Holder<String> handle = new Holder<String>();
Holder<byte[]> portletState = new Holder<byte[]>();
getPortletManagementService().setPortletProperties(getRegistrationContext(),
WSRPUtils.convertToWSRPPortletContext(portletContext),
UserAccess.getUserContext(),
propertyList,
handle,
portletState,
new Holder<Lifetime>(),
new Holder<List<Extension>>()
);
PortletContext newPortletContext = PortletContext.createPortletContext(handle.value, portletState.value);
portlet.setPortletContext(newPortletContext);
return newPortletContext;
}
catch (Exception e)
{
throw new PortletInvokerException("Unable to set properties for portlet '" + portletContext.getId() + "'", e);
}
}