/*
* JBoss, a division of Red Hat
* Copyright 2010, Red Hat Middleware, LLC, and individual
* contributors as indicated by the @authors tag. See the
* copyright.txt in the distribution for a full listing of
* individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.wsrp.spec.v1;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import org.gatein.common.util.ParameterValidation;
import org.gatein.wsrp.WSRPUtils;
import org.oasis.wsrp.v1.V1BlockingInteractionResponse;
import org.oasis.wsrp.v1.V1CacheControl;
import org.oasis.wsrp.v1.V1ClientData;
import org.oasis.wsrp.v1.V1Contact;
import org.oasis.wsrp.v1.V1CookieProtocol;
import org.oasis.wsrp.v1.V1DestroyFailed;
import org.oasis.wsrp.v1.V1DestroyPortletsResponse;
import org.oasis.wsrp.v1.V1EmployerInfo;
import org.oasis.wsrp.v1.V1Extension;
import org.oasis.wsrp.v1.V1InteractionParams;
import org.oasis.wsrp.v1.V1ItemDescription;
import org.oasis.wsrp.v1.V1LocalizedString;
import org.oasis.wsrp.v1.V1MarkupContext;
import org.oasis.wsrp.v1.V1MarkupParams;
import org.oasis.wsrp.v1.V1MarkupResponse;
import org.oasis.wsrp.v1.V1MarkupType;
import org.oasis.wsrp.v1.V1ModelDescription;
import org.oasis.wsrp.v1.V1ModelTypes;
import org.oasis.wsrp.v1.V1NamedString;
import org.oasis.wsrp.v1.V1Online;
import org.oasis.wsrp.v1.V1PersonName;
import org.oasis.wsrp.v1.V1PortletContext;
import org.oasis.wsrp.v1.V1PortletDescription;
import org.oasis.wsrp.v1.V1PortletDescriptionResponse;
import org.oasis.wsrp.v1.V1PortletPropertyDescriptionResponse;
import org.oasis.wsrp.v1.V1Postal;
import org.oasis.wsrp.v1.V1Property;
import org.oasis.wsrp.v1.V1PropertyDescription;
import org.oasis.wsrp.v1.V1PropertyList;
import org.oasis.wsrp.v1.V1RegistrationContext;
import org.oasis.wsrp.v1.V1RegistrationData;
import org.oasis.wsrp.v1.V1RegistrationState;
import org.oasis.wsrp.v1.V1ResetProperty;
import org.oasis.wsrp.v1.V1Resource;
import org.oasis.wsrp.v1.V1ResourceList;
import org.oasis.wsrp.v1.V1ResourceValue;
import org.oasis.wsrp.v1.V1ReturnAny;
import org.oasis.wsrp.v1.V1RuntimeContext;
import org.oasis.wsrp.v1.V1ServiceDescription;
import org.oasis.wsrp.v1.V1SessionContext;
import org.oasis.wsrp.v1.V1StateChange;
import org.oasis.wsrp.v1.V1Telecom;
import org.oasis.wsrp.v1.V1TelephoneNum;
import org.oasis.wsrp.v1.V1Templates;
import org.oasis.wsrp.v1.V1UpdateResponse;
import org.oasis.wsrp.v1.V1UploadContext;
import org.oasis.wsrp.v1.V1UserContext;
import org.oasis.wsrp.v1.V1UserProfile;
import org.oasis.wsrp.v2.BlockingInteractionResponse;
import org.oasis.wsrp.v2.CacheControl;
import org.oasis.wsrp.v2.ClientData;
import org.oasis.wsrp.v2.Contact;
import org.oasis.wsrp.v2.CookieProtocol;
import org.oasis.wsrp.v2.DestroyPortletsResponse;
import org.oasis.wsrp.v2.EmployerInfo;
import org.oasis.wsrp.v2.Extension;
import org.oasis.wsrp.v2.FailedPortlets;
import org.oasis.wsrp.v2.InteractionParams;
import org.oasis.wsrp.v2.ItemDescription;
import org.oasis.wsrp.v2.LocalizedString;
import org.oasis.wsrp.v2.MarkupContext;
import org.oasis.wsrp.v2.MarkupParams;
import org.oasis.wsrp.v2.MarkupResponse;
import org.oasis.wsrp.v2.MarkupType;
import org.oasis.wsrp.v2.ModelDescription;
import org.oasis.wsrp.v2.ModelTypes;
import org.oasis.wsrp.v2.NamedString;
import org.oasis.wsrp.v2.NavigationalContext;
import org.oasis.wsrp.v2.Online;
import org.oasis.wsrp.v2.PersonName;
import org.oasis.wsrp.v2.PortletContext;
import org.oasis.wsrp.v2.PortletDescription;
import org.oasis.wsrp.v2.PortletDescriptionResponse;
import org.oasis.wsrp.v2.PortletPropertyDescriptionResponse;
import org.oasis.wsrp.v2.Postal;
import org.oasis.wsrp.v2.Property;
import org.oasis.wsrp.v2.PropertyDescription;
import org.oasis.wsrp.v2.PropertyList;
import org.oasis.wsrp.v2.RegistrationContext;
import org.oasis.wsrp.v2.RegistrationData;
import org.oasis.wsrp.v2.RegistrationState;
import org.oasis.wsrp.v2.ResetProperty;
import org.oasis.wsrp.v2.Resource;
import org.oasis.wsrp.v2.ResourceList;
import org.oasis.wsrp.v2.ResourceValue;
import org.oasis.wsrp.v2.ReturnAny;
import org.oasis.wsrp.v2.RuntimeContext;
import org.oasis.wsrp.v2.ServiceDescription;
import org.oasis.wsrp.v2.SessionContext;
import org.oasis.wsrp.v2.SessionParams;
import org.oasis.wsrp.v2.StateChange;
import org.oasis.wsrp.v2.Telecom;
import org.oasis.wsrp.v2.TelephoneNum;
import org.oasis.wsrp.v2.Templates;
import org.oasis.wsrp.v2.UpdateResponse;
import org.oasis.wsrp.v2.UploadContext;
import org.oasis.wsrp.v2.UserContext;
import org.oasis.wsrp.v2.UserProfile;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:chris.laprun@jboss.com">Chris Laprun</a>
* @version $Revision$
*/
public class V2ToV1Converter
{
public static final V2ToV1Extension EXTENSION = new V2ToV1Extension();
public static final V2ToV1MarkupType MARKUPTYPE = new V2ToV1MarkupType();
public static final V2ToV1PortletDescription PORTLETDESCRIPTION = new V2ToV1PortletDescription();
public static final V2ToV1LocalizedString LOCALIZEDSTRING = new V2ToV1LocalizedString();
public static final V2ToV1ItemDescription ITEMDESCRIPTION = new V2ToV1ItemDescription();
public static final V2ToV1PropertyDescription PROPERTYDESCRIPTION = new V2ToV1PropertyDescription();
public static final V2ToV1Resource RESOURCE = new V2ToV1Resource();
public static final V2ToV1ResourceValue RESOURCEVALUE = new V2ToV1ResourceValue();
public static final V2ToV1NamedString NAMEDSTRING = new V2ToV1NamedString();
public static final V2ToV1UploadContext UPLOADCONTEXT = new V2ToV1UploadContext();
public static final V2ToV1Property PROPERTY = new V2ToV1Property();
public static final V2ToV1ResetProperty RESETPROPERTY = new V2ToV1ResetProperty();
public static final V2ToV1FailedPortlets FAILEDPORTLET = new V2ToV1FailedPortlets();
public static V1PortletContext toV1PortletContext(PortletContext portletContext)
{
if (portletContext != null)
{
V1PortletContext v1PortletContext = WSRP1TypeFactory.createPortletContext(portletContext.getPortletHandle(), portletContext.getPortletState());
List<V1Extension> extensions = WSRPUtils.transform(portletContext.getExtensions(), EXTENSION);
if (extensions != null)
{
v1PortletContext.getExtensions().addAll(extensions);
}
return v1PortletContext;
}
else
{
return null;
}
}
public static V1MarkupParams toV1MarkupParams(MarkupParams markupParams)
{
if (markupParams != null)
{
V1MarkupParams v1MarkupParams = WSRP1TypeFactory.createMarkupParams(markupParams.isSecureClientCommunication(), markupParams.getLocales(),
markupParams.getMimeTypes(), markupParams.getMode(), markupParams.getWindowState());
v1MarkupParams.setClientData(toV1ClientData(markupParams.getClientData()));
NavigationalContext navigationalContext = markupParams.getNavigationalContext();
if (navigationalContext != null)
{
v1MarkupParams.setNavigationalState(navigationalContext.getOpaqueValue());
}
v1MarkupParams.setValidateTag(markupParams.getValidateTag());
List<String> charSets = markupParams.getMarkupCharacterSets();
if (charSets != null)
{
v1MarkupParams.getMarkupCharacterSets().addAll(charSets);
}
List<String> validNewModes = markupParams.getValidNewModes();
if (validNewModes != null)
{
v1MarkupParams.getValidNewModes().addAll(validNewModes);
}
List<String> validNewWindowStates = markupParams.getValidNewWindowStates();
if (validNewWindowStates != null)
{
v1MarkupParams.getValidNewWindowStates().addAll(validNewWindowStates);
}
List<V1Extension> extensions = WSRPUtils.transform(markupParams.getExtensions(), EXTENSION);
if (extensions != null)
{
v1MarkupParams.getExtensions().addAll(extensions);
}
return v1MarkupParams;
}
else
{
return null;
}
}
private static V1ClientData toV1ClientData(ClientData clientData)
{
if (clientData != null)
{
V1ClientData v1ClientData = WSRP1TypeFactory.createClientData(clientData.getUserAgent());
List<Extension> extensions = clientData.getExtensions();
if (extensions != null)
{
v1ClientData.getExtensions().addAll(Lists.transform(extensions, EXTENSION));
}
return v1ClientData;
}
else
{
return null;
}
}
public static V1RuntimeContext toV1RuntimeContext(RuntimeContext runtimeContext)
{
if (runtimeContext != null)
{
V1RuntimeContext v1RuntimeContext = WSRP1TypeFactory.createRuntimeContext(runtimeContext.getUserAuthentication(), runtimeContext.getPortletInstanceKey(), runtimeContext.getNamespacePrefix());
v1RuntimeContext.setNamespacePrefix(runtimeContext.getNamespacePrefix());
v1RuntimeContext.setPortletInstanceKey(runtimeContext.getPortletInstanceKey());
SessionParams sessionParams = runtimeContext.getSessionParams();
if (sessionParams != null)
{
v1RuntimeContext.setSessionID(sessionParams.getSessionID());
}
v1RuntimeContext.setTemplates(V2ToV1Converter.toV1Templates(runtimeContext.getTemplates()));
List<Extension> extensions = runtimeContext.getExtensions();
if (extensions != null)
{
v1RuntimeContext.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1RuntimeContext;
}
else
{
return null;
}
}
public static V1Templates toV1Templates(Templates templates)
{
if (templates != null)
{
//TODO: should we be using the WSRP1TypeFactory,createTemplates(PortletInvocationContext) instead?
V1Templates v1Templates = new V1Templates();
v1Templates.setBlockingActionTemplate(templates.getBlockingActionTemplate());
v1Templates.setDefaultTemplate(templates.getDefaultTemplate());
v1Templates.setRenderTemplate(templates.getRenderTemplate());
v1Templates.setResourceTemplate(templates.getResourceTemplate());
v1Templates.setSecureBlockingActionTemplate(templates.getSecureBlockingActionTemplate());
v1Templates.setSecureRenderTemplate(templates.getSecureRenderTemplate());
v1Templates.setSecureResourceTemplate(templates.getSecureResourceTemplate());
List<Extension> extensions = templates.getExtensions();
if (extensions != null)
{
v1Templates.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1Templates;
}
else
{
return null;
}
}
public static V1UserContext toV1UserContext(UserContext userContext)
{
if (userContext != null)
{
V1UserContext v1UserContext = WSRP1TypeFactory.createUserContext(userContext.getUserContextKey());
v1UserContext.setProfile(toV1UserProfile(userContext.getProfile()));
List<Extension> extensions = userContext.getExtensions();
if (extensions != null)
{
v1UserContext.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
if (userContext.getUserCategories() != null)
{
v1UserContext.getUserCategories().addAll(userContext.getUserCategories());
}
return v1UserContext;
}
else
{
return null;
}
}
public static V1UserProfile toV1UserProfile(UserProfile userProfile)
{
if (userProfile != null)
{
V1UserProfile v1UserProfile = new V1UserProfile();
v1UserProfile.setBdate(userProfile.getBdate());
v1UserProfile.setBusinessInfo(toV1Context(userProfile.getBusinessInfo()));
v1UserProfile.setEmployerInfo(toV1EmployerInfo(userProfile.getEmployerInfo()));
v1UserProfile.setGender(userProfile.getGender());
v1UserProfile.setHomeInfo(toV1Context(userProfile.getHomeInfo()));
v1UserProfile.setName(toV1PersonName(userProfile.getName()));
return v1UserProfile;
}
else
{
return null;
}
}
public static V1EmployerInfo toV1EmployerInfo(EmployerInfo employerInfo)
{
if (employerInfo != null)
{
V1EmployerInfo v1EmployerInfo = new V1EmployerInfo();
v1EmployerInfo.setDepartment(employerInfo.getDepartment());
v1EmployerInfo.setEmployer(employerInfo.getEmployer());
v1EmployerInfo.setJobtitle(employerInfo.getJobtitle());
List<Extension> extensions = employerInfo.getExtensions();
if (extensions != null)
{
v1EmployerInfo.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1EmployerInfo;
}
else
{
return null;
}
}
public static V1PersonName toV1PersonName(PersonName personName)
{
if (personName != null)
{
V1PersonName v1PersonName = new V1PersonName();
v1PersonName.setFamily(personName.getFamily());
v1PersonName.setGiven(personName.getGiven());
v1PersonName.setMiddle(personName.getMiddle());
v1PersonName.setNickname(personName.getNickname());
v1PersonName.setPrefix(personName.getPrefix());
v1PersonName.setSuffix(personName.getSuffix());
List<Extension> extensions = personName.getExtensions();
if (extensions != null)
{
v1PersonName.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1PersonName;
}
else
{
return null;
}
}
public static V1Contact toV1Context(Contact contact)
{
if (contact != null)
{
V1Contact v1Contact = new V1Contact();
v1Contact.setOnline(toV1Online(contact.getOnline()));
v1Contact.setPostal(toV1Postal(contact.getPostal()));
v1Contact.setTelecom(toV1Telecom(contact.getTelecom()));
List<Extension> extensions = contact.getExtensions();
if (extensions != null)
{
v1Contact.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1Contact;
}
else
{
return null;
}
}
public static V1Online toV1Online(Online online)
{
if (online != null)
{
V1Online v1Online = new V1Online();
v1Online.setEmail(online.getEmail());
v1Online.setUri(online.getUri());
List<Extension> extensions = online.getExtensions();
if (extensions != null)
{
v1Online.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1Online;
}
else
{
return null;
}
}
public static V1Postal toV1Postal(Postal postal)
{
if (postal != null)
{
V1Postal v1Postal = new V1Postal();
v1Postal.setCity(postal.getCity());
v1Postal.setCountry(postal.getCountry());
v1Postal.setName(postal.getName());
v1Postal.setOrganization(postal.getOrganization());
v1Postal.setPostalcode(postal.getPostalcode());
v1Postal.setStateprov(postal.getStateprov());
v1Postal.setStreet(postal.getStreet());
List<Extension> extensions = postal.getExtensions();
if (extensions != null)
{
v1Postal.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1Postal;
}
else
{
return null;
}
}
public static V1Telecom toV1Telecom(Telecom telecom)
{
if (telecom != null)
{
V1Telecom v1Telecom = new V1Telecom();
v1Telecom.setFax(toV1TelephoneNum(telecom.getFax()));
v1Telecom.setMobile(toV1TelephoneNum(telecom.getMobile()));
v1Telecom.setPager(toV1TelephoneNum(telecom.getPager()));
v1Telecom.setTelephone(toV1TelephoneNum(telecom.getTelephone()));
List<Extension> extensions = telecom.getExtensions();
if (extensions != null)
{
v1Telecom.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1Telecom;
}
else
{
return null;
}
}
public static V1TelephoneNum toV1TelephoneNum(TelephoneNum telephoneNum)
{
if (telephoneNum != null)
{
V1TelephoneNum v1TelephoneNum = new V1TelephoneNum();
v1TelephoneNum.setComment(telephoneNum.getComment());
v1TelephoneNum.setExt(telephoneNum.getExt());
v1TelephoneNum.setIntcode(telephoneNum.getIntcode());
v1TelephoneNum.setLoccode(telephoneNum.getLoccode());
v1TelephoneNum.setNumber(telephoneNum.getNumber());
List<Extension> extensions = telephoneNum.getExtensions();
if (extensions != null)
{
v1TelephoneNum.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1TelephoneNum;
}
else
{
return null;
}
}
public static V1MarkupContext toV1MarkupContext(MarkupContext markupContext)
{
if (markupContext != null)
{
V1MarkupContext v1MarkupContext = WSRP1TypeFactory.createMarkupContext(markupContext.getMimeType(), markupContext.getItemString(), markupContext.getItemBinary(), markupContext.isUseCachedItem());
v1MarkupContext.setCacheControl(toV1CacheControl(markupContext.getCacheControl()));
v1MarkupContext.setLocale(markupContext.getLocale());
v1MarkupContext.setPreferredTitle(markupContext.getPreferredTitle());
v1MarkupContext.setRequiresUrlRewriting(markupContext.isRequiresRewriting());
List<Extension> extensions = markupContext.getExtensions();
if (extensions != null)
{
v1MarkupContext.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1MarkupContext;
}
else
{
return null;
}
}
public static V1CacheControl toV1CacheControl(CacheControl cacheControl)
{
if (cacheControl != null)
{
V1CacheControl v1CacheControl = WSRP1TypeFactory.createCacheControl(cacheControl.getExpires(), cacheControl.getUserScope());
v1CacheControl.setValidateTag(cacheControl.getValidateTag());
List<Extension> extensions = cacheControl.getExtensions();
if (extensions != null)
{
v1CacheControl.getExtensions().addAll(WSRPUtils.transform(extensions, EXTENSION));
}
return v1CacheControl;
}
else
{
return null;
}
}
public static V1RegistrationContext toV1RegistrationContext(RegistrationContext registrationContext)
{
if (registrationContext != null)
{
V1RegistrationContext result = WSRP1TypeFactory.createRegistrationContext(registrationContext.getRegistrationHandle());
result.setRegistrationState(registrationContext.getRegistrationState());
List<V1Extension> extensions = WSRPUtils.transform(registrationContext.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static <E extends Exception> E toV1Exception(Class<E> v1ExceptionClass, Exception v2Exception)
{
if (!"org.oasis.wsrp.v1".equals(v1ExceptionClass.getPackage().getName()))
{
throw new IllegalArgumentException("Specified exception class is not a WSRP 1 exception: " + v1ExceptionClass);
}
Class<? extends Exception> v2ExceptionClass = v2Exception.getClass();
String v2Name = v2ExceptionClass.getSimpleName();
if (!"org.oasis.wsrp.v2".equals(v2ExceptionClass.getPackage().getName()))
{
throw new IllegalArgumentException("Specified exception is not a WSRP 2 exception: " + v2Exception);
}
String v1Name = v1ExceptionClass.getSimpleName();
// V1 class name should match V2 class name plus "V1"
if (!v2Name.equals(v1Name.substring(2)))
{
throw new IllegalArgumentException("Exception names do not match. Requested: " + v1Name
+ ", was given: " + v2Name);
}
return WSRP1ExceptionFactory.createWSException(v1ExceptionClass, v2Exception.getMessage(), v2Exception.getCause());
}
public static V1CookieProtocol toV1CookieProtocol(CookieProtocol requiresInitCookie)
{
if (requiresInitCookie != null)
{
return V1CookieProtocol.fromValue(requiresInitCookie.value());
}
else
{
return null;
}
}
public static V1ModelDescription toV1ModelDescription(ModelDescription modelDescription)
{
if (modelDescription != null)
{
V1ModelDescription result = WSRP1TypeFactory.createModelDescription(WSRPUtils.transform(modelDescription.getPropertyDescriptions(), PROPERTYDESCRIPTION));
List<V1Extension> extensions = WSRPUtils.transform(modelDescription.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
result.setModelTypes(toV1ModelTypes(modelDescription.getModelTypes()));
return result;
}
else
{
return null;
}
}
public static V1ModelTypes toV1ModelTypes(ModelTypes modelTypes)
{
if (modelTypes != null)
{
V1ModelTypes result = new V1ModelTypes();
result.setAny(modelTypes.getAny());
return result;
}
else
{
return null;
}
}
public static V1ResourceList toV1ResourceList(ResourceList resourceList)
{
if (resourceList != null)
{
V1ResourceList result = new V1ResourceList();
List<V1Extension> extensions = WSRPUtils.transform(resourceList.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
List<V1Resource> v1Resources = WSRPUtils.transform(resourceList.getResources(), RESOURCE);
if (v1Resources != null)
{
result.getResources().addAll(v1Resources);
}
return result;
}
else
{
return null;
}
}
public static V1InteractionParams toV1InteractionParams(InteractionParams interactionParams)
{
if (interactionParams != null)
{
V1InteractionParams v1InteractionParams = WSRP1TypeFactory.createInteractionParams(toV1StateChange(interactionParams.getPortletStateChange()));
v1InteractionParams.setInteractionState(interactionParams.getInteractionState());
List<Extension> extensions = interactionParams.getExtensions();
if (extensions != null)
{
v1InteractionParams.getExtensions().addAll(Lists.transform(extensions, EXTENSION));
}
List<NamedString> formParameters = interactionParams.getFormParameters();
if (formParameters != null)
{
v1InteractionParams.getFormParameters().addAll(Lists.transform(formParameters, NAMEDSTRING));
}
List<UploadContext> uploadContext = interactionParams.getUploadContexts();
if (uploadContext != null)
{
v1InteractionParams.getUploadContexts().addAll(Lists.transform(uploadContext, UPLOADCONTEXT));
}
return v1InteractionParams;
}
else
{
return null;
}
}
public static V1StateChange toV1StateChange(StateChange stateChange)
{
if (stateChange != null)
{
return V1StateChange.fromValue(stateChange.value());
}
else
{
return null;
}
}
public static V1UpdateResponse toV1UpdateResponse(UpdateResponse updateResponse)
{
if (updateResponse != null)
{
V1UpdateResponse v1UpdateResponse = WSRP1TypeFactory.createUpdateResponse();
v1UpdateResponse.setMarkupContext(toV1MarkupContext(updateResponse.getMarkupContext()));
v1UpdateResponse.setNavigationalState(updateResponse.getNavigationalContext().getOpaqueValue());
v1UpdateResponse.setNewWindowState(updateResponse.getNewWindowState());
v1UpdateResponse.setPortletContext(toV1PortletContext(updateResponse.getPortletContext()));
v1UpdateResponse.setSessionContext(toV1SessionContext(updateResponse.getSessionContext()));
v1UpdateResponse.setNewMode(updateResponse.getNewMode());
return v1UpdateResponse;
}
else
{
return null;
}
}
public static V1LocalizedString toV1LocalizedString(LocalizedString localizedString)
{
return LOCALIZEDSTRING.apply(localizedString);
}
public static V1SessionContext toV1SessionContext(SessionContext sessionContext)
{
if (sessionContext != null && !ParameterValidation.isNullOrEmpty(sessionContext.getSessionID()))
{
V1SessionContext v1SessionContext = WSRP1TypeFactory.createSessionContext(sessionContext.getSessionID(), sessionContext.getExpires());
v1SessionContext.getExtensions().addAll(Lists.transform(sessionContext.getExtensions(), EXTENSION));
return v1SessionContext;
}
else
{
return null;
}
}
public static V1PortletDescription toV1PortletDescription(PortletDescription description)
{
return PORTLETDESCRIPTION.apply(description);
}
public static List<V1DestroyFailed> toV1DestroyFailed(List<FailedPortlets> failedPortletsList)
{
if (failedPortletsList != null)
{
List<V1DestroyFailed> result = new ArrayList<V1DestroyFailed>(failedPortletsList.size());
for (FailedPortlets failedPortlets : failedPortletsList)
{
QName errorCode = failedPortlets.getErrorCode();
V1LocalizedString reason = toV1LocalizedString(failedPortlets.getReason());
String v1Reason;
//failedPortlets.getReason is optional in V2, but errorCode is required.
//for V2DestroyFailed the reason is required
if (reason != null && reason.getValue() != null)
{
v1Reason = errorCode.toString() + ": " + reason.getValue();
}
else
{
v1Reason = errorCode.toString();
}
for (String handle : failedPortlets.getPortletHandles())
{
V1DestroyFailed destroyFailed = WSRP1TypeFactory.createDestroyFailed(handle, v1Reason);
result.add(destroyFailed);
}
}
return result;
}
else
{
return null;
}
}
public static V1PropertyList toV1PropertyList(PropertyList propertyList)
{
if (propertyList != null)
{
V1PropertyList result = new V1PropertyList();
List<V1Property> properties = WSRPUtils.transform(propertyList.getProperties(), PROPERTY);
if (properties != null)
{
result.getProperties().addAll(properties);
}
List<V1ResetProperty> resetProperties = WSRPUtils.transform(propertyList.getResetProperties(), RESETPROPERTY);
if (resetProperties != null)
{
result.getResetProperties().addAll(resetProperties);
}
List<V1Extension> extensions = WSRPUtils.transform(propertyList.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1RegistrationData toV1RegistrationData(RegistrationData registrationData)
{
if (registrationData != null)
{
V1RegistrationData result = WSRP1TypeFactory.createRegistrationData(registrationData.getConsumerName(), registrationData.isMethodGetSupported());
result.setConsumerAgent(registrationData.getConsumerAgent());
List<V1Property> properties = WSRPUtils.transform(registrationData.getRegistrationProperties(), PROPERTY);
if (properties != null)
{
result.getRegistrationProperties().addAll(properties);
}
List<String> modes = registrationData.getConsumerModes();
if (ParameterValidation.existsAndIsNotEmpty(modes))
{
result.getConsumerModes().addAll(modes);
}
List<String> consumerUserScopes = registrationData.getConsumerUserScopes();
if (ParameterValidation.existsAndIsNotEmpty(consumerUserScopes))
{
result.getConsumerUserScopes().addAll(consumerUserScopes);
}
List<String> windowStates = registrationData.getConsumerWindowStates();
if (ParameterValidation.existsAndIsNotEmpty(windowStates))
{
result.getConsumerWindowStates().addAll(windowStates);
}
List<V1Extension> extensions = WSRPUtils.transform(registrationData.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1ServiceDescription toV1ServiceDescription(ServiceDescription serviceDescription)
{
if (serviceDescription != null)
{
V1ServiceDescription result = new V1ServiceDescription();
result.setRegistrationPropertyDescription(toV1ModelDescription(serviceDescription.getRegistrationPropertyDescription()));
result.setRequiresInitCookie(toV1CookieProtocol(serviceDescription.getRequiresInitCookie()));
result.setRequiresRegistration(serviceDescription.isRequiresRegistration());
result.setResourceList(toV1ResourceList(serviceDescription.getResourceList()));
List<V1ItemDescription> modes = WSRPUtils.transform(serviceDescription.getCustomModeDescriptions(), ITEMDESCRIPTION);
if (modes != null)
{
result.getCustomModeDescriptions().addAll(modes);
}
List<V1ItemDescription> windowStates = WSRPUtils.transform(serviceDescription.getCustomWindowStateDescriptions(), ITEMDESCRIPTION);
if (windowStates != null)
{
result.getCustomWindowStateDescriptions().addAll(windowStates);
}
List<V1Extension> extensions = WSRPUtils.transform(serviceDescription.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
List<String> locales = result.getLocales();
if (ParameterValidation.existsAndIsNotEmpty(locales))
{
result.getLocales().addAll(locales);
}
List<V1ItemDescription> userCategories = WSRPUtils.transform(serviceDescription.getUserCategoryDescriptions(), ITEMDESCRIPTION);
if (userCategories != null)
{
result.getUserCategoryDescriptions().addAll(userCategories);
}
List<V1PortletDescription> portletDescriptions = WSRPUtils.transform(serviceDescription.getOfferedPortlets(), PORTLETDESCRIPTION);
if (portletDescriptions != null)
{
result.getOfferedPortlets().addAll(portletDescriptions);
}
return result;
}
else
{
return null;
}
}
public static V1MarkupResponse toV1MarkupResponse(MarkupResponse markupResponse)
{
if (markupResponse != null)
{
V1MarkupResponse result = WSRP1TypeFactory.createMarkupResponse(toV1MarkupContext(markupResponse.getMarkupContext()));
result.setSessionContext(toV1SessionContext(markupResponse.getSessionContext()));
List<V1Extension> extensions = WSRPUtils.transform(markupResponse.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1ReturnAny toV1ReturnAny(ReturnAny returnAny)
{
if (returnAny != null)
{
V1ReturnAny result = new V1ReturnAny();
List<V1Extension> extensions = WSRPUtils.transform(returnAny.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1RegistrationState toV1RegistrationState(RegistrationState registrationState)
{
if (registrationState != null)
{
V1RegistrationState result = new V1RegistrationState();
result.setRegistrationState(registrationState.getRegistrationState());
List<V1Extension> extensions = WSRPUtils.transform(registrationState.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1BlockingInteractionResponse toV1BlockingInteractionResponse(BlockingInteractionResponse blockingInteractionResponse)
{
if (blockingInteractionResponse != null)
{
V1BlockingInteractionResponse result;
V1UpdateResponse updateResponse = toV1UpdateResponse(blockingInteractionResponse.getUpdateResponse());
String redirectURL = blockingInteractionResponse.getRedirectURL();
if (redirectURL != null)
{
result = WSRP1TypeFactory.createBlockingInteractionResponse(redirectURL);
}
else
{
result = WSRP1TypeFactory.createBlockingInteractionResponse(updateResponse);
}
List<V1Extension> extensions = WSRPUtils.transform(blockingInteractionResponse.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1DestroyPortletsResponse toV1DestroyPortlesResponse(DestroyPortletsResponse destroyPortletResponse)
{
if (destroyPortletResponse != null)
{
List<V1DestroyFailed> destroyedFailed = WSRPUtils.transform(destroyPortletResponse.getFailedPortlets(), FAILEDPORTLET);
V1DestroyPortletsResponse result = WSRP1TypeFactory.createDestroyPortletsResponse(destroyedFailed);
List<V1Extension> extensions = WSRPUtils.transform(destroyPortletResponse.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1PortletPropertyDescriptionResponse toV1PortletPropertyDescriptionResponse(PortletPropertyDescriptionResponse portletPropertyDescriptionResponse)
{
if (portletPropertyDescriptionResponse != null)
{
//todo use WSRP1TypeFactory instead
V1PortletPropertyDescriptionResponse result = new V1PortletPropertyDescriptionResponse();
result.setModelDescription(toV1ModelDescription(portletPropertyDescriptionResponse.getModelDescription()));
result.setResourceList(toV1ResourceList(portletPropertyDescriptionResponse.getResourceList()));
List<V1Extension> extensions = WSRPUtils.transform(portletPropertyDescriptionResponse.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1PortletDescriptionResponse toV1PortletDescriptionResponse(PortletDescriptionResponse portletDescriptionResponse)
{
if (portletDescriptionResponse != null)
{
V1PortletDescriptionResponse result = WSRP1TypeFactory.createPortletDescriptionResponse(toV1PortletDescription(portletDescriptionResponse.getPortletDescription()));
result.setResourceList(toV1ResourceList(portletDescriptionResponse.getResourceList()));
List<V1Extension> extensions = WSRPUtils.transform(portletDescriptionResponse.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
public static V1PropertyDescription toV1PropertyDescription(PropertyDescription propertyDescription)
{
if (propertyDescription != null)
{
V1PropertyDescription result = WSRP1TypeFactory.createPropertyDescription(propertyDescription.getName().toString(), propertyDescription.getType());
result.setHint(toV1LocalizedString(propertyDescription.getHint()));
result.setLabel(toV1LocalizedString(propertyDescription.getLabel()));
List<V1Extension> extensions = WSRPUtils.transform(propertyDescription.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
private static class V2ToV1Extension implements Function<Extension, V1Extension>
{
public V1Extension apply(Extension from)
{
if (from != null)
{
V1Extension extension = new V1Extension();
extension.setAny(from.getAny());
return extension;
}
else
{
return null;
}
}
}
private static class V2ToV1PortletDescription implements Function<PortletDescription, V1PortletDescription>
{
public V1PortletDescription apply(PortletDescription from)
{
if (from != null)
{
V1PortletDescription result = WSRP1TypeFactory.createPortletDescription(from.getPortletHandle(),
WSRPUtils.transform(from.getMarkupTypes(), MARKUPTYPE));
result.setDescription(LOCALIZEDSTRING.apply(from.getDescription()));
result.setDisplayName(LOCALIZEDSTRING.apply(from.getDisplayName()));
List<V1Extension> extensions = WSRPUtils.transform(from.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
List<V1LocalizedString> keywords = WSRPUtils.transform(from.getKeywords(), LOCALIZEDSTRING);
if (keywords != null)
{
result.getKeywords().addAll(keywords);
}
List<String> userCategories = from.getUserCategories();
if (userCategories != null)
{
result.getUserCategories().addAll(userCategories);
}
List<String> userProfileItems = from.getUserProfileItems();
if (userProfileItems != null)
{
result.getUserProfileItems().addAll(userProfileItems);
}
result.setDefaultMarkupSecure(from.isDefaultMarkupSecure());
result.setDoesUrlTemplateProcessing(from.isDoesUrlTemplateProcessing());
result.setTemplatesStoredInSession(from.isTemplatesStoredInSession());
result.setHasUserSpecificState(from.isHasUserSpecificState());
result.setOnlySecure(from.isOnlySecure());
result.setUserContextStoredInSession(from.isUserContextStoredInSession());
result.setUsesMethodGet(from.isUsesMethodGet());
result.setShortTitle(LOCALIZEDSTRING.apply(from.getShortTitle()));
result.setTitle(LOCALIZEDSTRING.apply(from.getTitle()));
result.setGroupID(from.getGroupID());
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1ItemDescription implements Function<ItemDescription, V1ItemDescription>
{
public V1ItemDescription apply(ItemDescription from)
{
if (from != null)
{
V1ItemDescription result = new V1ItemDescription();
result.setItemName(from.getItemName());
if (from.getDescription() != null)
{
result.setDescription(LOCALIZEDSTRING.apply(from.getDescription()));
}
else if (from.getDisplayName() != null)
{
result.setDescription(LOCALIZEDSTRING.apply(from.getDisplayName()));
}
else
{
result.setDescription(WSRP1TypeFactory.createLocalizedString("No Description Available"));
}
List<V1Extension> extensions = WSRPUtils.transform(from.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
}
public static class V2ToV1NamedString implements Function<NamedString, V1NamedString>
{
public V1NamedString apply(NamedString namedString)
{
if (namedString != null)
{
V1NamedString result = new V1NamedString();
result.setName(namedString.getName());
//GetValue is required for V1, but optional for V2. If we receive a null
//value from V2, then just set the value to be equal to the name.
if (namedString.getValue() == null)
{
result.setValue(namedString.getName());
}
else
{
result.setValue(namedString.getValue());
}
return result;
}
else
{
return null;
}
}
}
public static class V2ToV1UploadContext implements Function<UploadContext, V1UploadContext>
{
public V1UploadContext apply(UploadContext uploadContext)
{
if (uploadContext != null)
{
V1UploadContext result = WSRP1TypeFactory.createUploadContext(uploadContext.getMimeType(), uploadContext.getUploadData());
List<Extension> extensions = uploadContext.getExtensions();
if (extensions != null)
{
result.getExtensions().addAll(Lists.transform(extensions, EXTENSION));
}
List<NamedString> mimeAttributes = uploadContext.getMimeAttributes();
if (mimeAttributes != null)
{
result.getMimeAttributes().addAll(Lists.transform(mimeAttributes, NAMEDSTRING));
}
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1MarkupType implements Function<MarkupType, V1MarkupType>
{
public V1MarkupType apply(MarkupType from)
{
if (from != null)
{
V1MarkupType result = WSRP1TypeFactory.createMarkupType(from.getMimeType(), from.getModes(), from.getWindowStates(), from.getLocales());
List<V1Extension> extensions = WSRPUtils.transform(from.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1LocalizedString implements Function<LocalizedString, V1LocalizedString>
{
public V1LocalizedString apply(LocalizedString from)
{
if (from != null)
{
return WSRP1TypeFactory.createLocalizedString(from.getLang(), from.getResourceName(), from.getValue());
}
else
{
return null;
}
}
}
private static class V2ToV1PropertyDescription implements Function<PropertyDescription, V1PropertyDescription>
{
public V1PropertyDescription apply(PropertyDescription from)
{
return toV1PropertyDescription(from);
}
}
private static class V2ToV1Resource implements Function<Resource, V1Resource>
{
public V1Resource apply(Resource from)
{
if (from != null)
{
V1Resource result = new V1Resource();
result.setResourceName(from.getResourceName());
List<V1ResourceValue> values = WSRPUtils.transform(from.getValues(), RESOURCEVALUE);
if (values != null)
{
result.getValues().addAll(values);
}
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1ResourceValue implements Function<ResourceValue, V1ResourceValue>
{
public V1ResourceValue apply(ResourceValue from)
{
if (from != null)
{
V1ResourceValue result = new V1ResourceValue();
result.setLang(from.getLang());
result.setValue(from.getValue());
List<V1Extension> extensions = WSRPUtils.transform(from.getExtensions(), EXTENSION);
if (extensions != null)
{
result.getExtensions().addAll(extensions);
}
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1Property implements Function<Property, V1Property>
{
public V1Property apply(Property from)
{
if (from != null)
{
V1Property result = WSRP1TypeFactory.createProperty(from.getName().toString(), from.getLang(), from.getStringValue());
List<Object> any = from.getAny();
if (ParameterValidation.existsAndIsNotEmpty(any))
{
result.getAny().addAll(any);
}
return result;
}
else
{
return null;
}
}
}
private static class V2ToV1ResetProperty implements Function<ResetProperty, V1ResetProperty>
{
public V1ResetProperty apply(ResetProperty from)
{
if (from != null)
{
return WSRP1TypeFactory.createResetProperty(from.getName().toString());
}
else
{
return null;
}
}
}
private static class V2ToV1FailedPortlets implements Function<FailedPortlets, V1DestroyFailed>
{
public V1ResetProperty apply(ResetProperty from)
{
if (from != null)
{
return WSRP1TypeFactory.createResetProperty(from.getName().toString());
}
else
{
return null;
}
}
public V1DestroyFailed apply(FailedPortlets from)
{
if (from != null)
{
return WSRP1TypeFactory.createDestroyFailed(from.getPortletHandles().get(0), from.getReason().toString());
}
return null;
}
}
}