/**
* Copyright (C) 2010 eXo Platform SAS.
*
* 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.xcmis.wssoap.impl;
import org.xcmis.core.CmisACLCapabilityType;
import org.xcmis.core.CmisAccessControlEntryType;
import org.xcmis.core.CmisAccessControlListType;
import org.xcmis.core.CmisAccessControlPrincipalType;
import org.xcmis.core.CmisAllowableActionsType;
import org.xcmis.core.CmisChangeEventType;
import org.xcmis.core.CmisChoiceBoolean;
import org.xcmis.core.CmisChoiceDateTime;
import org.xcmis.core.CmisChoiceDecimal;
import org.xcmis.core.CmisChoiceHtml;
import org.xcmis.core.CmisChoiceId;
import org.xcmis.core.CmisChoiceInteger;
import org.xcmis.core.CmisChoiceString;
import org.xcmis.core.CmisChoiceUri;
import org.xcmis.core.CmisListOfIdsType;
import org.xcmis.core.CmisObjectType;
import org.xcmis.core.CmisPermissionMapping;
import org.xcmis.core.CmisPropertiesType;
import org.xcmis.core.CmisProperty;
import org.xcmis.core.CmisPropertyBoolean;
import org.xcmis.core.CmisPropertyBooleanDefinitionType;
import org.xcmis.core.CmisPropertyDateTime;
import org.xcmis.core.CmisPropertyDateTimeDefinitionType;
import org.xcmis.core.CmisPropertyDecimal;
import org.xcmis.core.CmisPropertyDecimalDefinitionType;
import org.xcmis.core.CmisPropertyDefinitionType;
import org.xcmis.core.CmisPropertyHtml;
import org.xcmis.core.CmisPropertyHtmlDefinitionType;
import org.xcmis.core.CmisPropertyId;
import org.xcmis.core.CmisPropertyIdDefinitionType;
import org.xcmis.core.CmisPropertyInteger;
import org.xcmis.core.CmisPropertyIntegerDefinitionType;
import org.xcmis.core.CmisPropertyString;
import org.xcmis.core.CmisPropertyStringDefinitionType;
import org.xcmis.core.CmisPropertyUri;
import org.xcmis.core.CmisPropertyUriDefinitionType;
import org.xcmis.core.CmisRenditionType;
import org.xcmis.core.CmisRepositoryCapabilitiesType;
import org.xcmis.core.CmisRepositoryInfoType;
import org.xcmis.core.CmisTypeDefinitionType;
import org.xcmis.core.EnumACLPropagation;
import org.xcmis.core.EnumAllowableActionsKey;
import org.xcmis.core.EnumBaseObjectTypeIds;
import org.xcmis.core.EnumCapabilityACL;
import org.xcmis.core.EnumCapabilityChanges;
import org.xcmis.core.EnumCapabilityContentStreamUpdates;
import org.xcmis.core.EnumCapabilityJoin;
import org.xcmis.core.EnumCapabilityQuery;
import org.xcmis.core.EnumCapabilityRendition;
import org.xcmis.core.EnumCardinality;
import org.xcmis.core.EnumPropertyType;
import org.xcmis.core.EnumSupportedPermissions;
import org.xcmis.core.EnumTypeOfChanges;
import org.xcmis.core.EnumUpdatability;
import org.xcmis.messaging.CmisExtensionType;
import org.xcmis.messaging.CmisObjectInFolderContainerType;
import org.xcmis.messaging.CmisObjectInFolderListType;
import org.xcmis.messaging.CmisObjectInFolderType;
import org.xcmis.messaging.CmisObjectListType;
import org.xcmis.messaging.CmisObjectParentsType;
import org.xcmis.messaging.CmisRepositoryEntryType;
import org.xcmis.messaging.CmisTypeContainer;
import org.xcmis.messaging.CmisTypeDefinitionListType;
import org.xcmis.spi.ItemsList;
import org.xcmis.spi.ItemsTree;
import org.xcmis.spi.model.ACLCapability;
import org.xcmis.spi.model.AccessControlEntry;
import org.xcmis.spi.model.AllowableActions;
import org.xcmis.spi.model.BaseType;
import org.xcmis.spi.model.ChangeInfo;
import org.xcmis.spi.model.Choice;
import org.xcmis.spi.model.CmisObject;
import org.xcmis.spi.model.ContentStreamAllowed;
import org.xcmis.spi.model.ObjectParent;
import org.xcmis.spi.model.PermissionMapping;
import org.xcmis.spi.model.Property;
import org.xcmis.spi.model.PropertyDefinition;
import org.xcmis.spi.model.PropertyType;
import org.xcmis.spi.model.Rendition;
import org.xcmis.spi.model.RepositoryCapabilities;
import org.xcmis.spi.model.RepositoryInfo;
import org.xcmis.spi.model.TypeDefinition;
import org.xcmis.spi.model.Updatability;
import org.xcmis.spi.model.impl.BooleanProperty;
import org.xcmis.spi.model.impl.DateTimeProperty;
import org.xcmis.spi.model.impl.DecimalProperty;
import org.xcmis.spi.model.impl.HtmlProperty;
import org.xcmis.spi.model.impl.IdProperty;
import org.xcmis.spi.model.impl.IntegerProperty;
import org.xcmis.spi.model.impl.StringProperty;
import org.xcmis.spi.model.impl.UriProperty;
import org.xcmis.spi.utils.CmisUtils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.datatype.XMLGregorianCalendar;
/**
* @author <a href="mailto:max.shaposhnik@exoplatform.com">Max Shaposhnik</a>
* @version $Id$
*/
public class TypeConverter
{
public static List<AccessControlEntry> getAccessControlEntryList(List<CmisAccessControlEntryType> source)
{
List<AccessControlEntry> res = new ArrayList<AccessControlEntry>();
for (CmisAccessControlEntryType one : source)
{
res.add(getAccessControlEntry(one));
}
return res;
}
public static AccessControlEntry getAccessControlEntry(CmisAccessControlEntryType source)
{
AccessControlEntry res = new AccessControlEntry();
res.getPermissions().addAll(source.getPermission());
res.setPrincipal(source.getPrincipal().getPrincipalId());
//res.setDirect(source.isDirect());
return res;
}
public static CmisACLCapabilityType getCmisAclCapabilityType(ACLCapability source)
{
CmisACLCapabilityType result = new CmisACLCapabilityType();
result.setPropagation(EnumACLPropagation.fromValue(source.getPropagation().value()));
result.setSupportedPermissions(EnumSupportedPermissions.fromValue(source.getSupportedPermissions().value()));
if (source.getMapping() != null)
{
result.getMapping().addAll(getCmisPermissionMappingList(source.getMapping()));
}
return result;
}
public static CmisAllowableActionsType getCmisAllowableActionsType(AllowableActions source)
{
CmisAllowableActionsType result = new CmisAllowableActionsType();
result.setCanAddObjectToFolder(source.isCanAddObjectToFolder());
result.setCanApplyACL(source.isCanApplyACL());
result.setCanApplyPolicy(source.isCanApplyPolicy());
result.setCanCancelCheckOut(source.isCanCancelCheckOut());
result.setCanCheckIn(source.isCanCheckIn());
result.setCanCheckOut(source.isCanCheckOut());
result.setCanCreateDocument(source.isCanCreateDocument());
result.setCanCreateFolder(source.isCanCreateFolder());
result.setCanCreateRelationship(source.isCanCreateRelationship());
result.setCanDeleteContentStream(source.isCanDeleteContentStream());
result.setCanDeleteObject(source.isCanDeleteObject());
result.setCanDeleteTree(source.isCanDeleteTree());
result.setCanGetACL(source.isCanGetACL());
result.setCanGetAllVersions(source.isCanGetAllVersions());
result.setCanGetAppliedPolicies(source.isCanGetAppliedPolicies());
result.setCanGetChildren(source.isCanGetChildren());
result.setCanGetContentStream(source.isCanGetContentStream());
result.setCanGetDescendants(source.isCanGetDescendants());
result.setCanGetFolderParent(source.isCanGetFolderParent());
result.setCanGetFolderTree(source.isCanGetFolderTree());
result.setCanGetObjectParents(source.isCanGetObjectParents());
result.setCanGetObjectRelationships(source.isCanGetObjectRelationships());
result.setCanGetProperties(source.isCanGetProperties());
result.setCanGetRenditions(source.isCanGetRenditions());
result.setCanMoveObject(source.isCanMoveObject());
result.setCanRemoveObjectFromFolder(source.isCanRemoveObjectFromFolder());
result.setCanRemovePolicy(source.isCanRemovePolicy());
result.setCanSetContentStream(source.isCanSetContentStream());
result.setCanUpdateProperties(source.isCanUpdateProperties());
return result;
}
public static CmisAccessControlListType getCmisAccessControlListType(List<AccessControlEntry> source)
{
CmisAccessControlListType result = new CmisAccessControlListType();
for (AccessControlEntry one : source)
{
result.getPermission().add(getCmisAccessControlEntryType(one));
}
return result;
}
public static List<AccessControlEntry> getListAccessControlEntry(CmisAccessControlListType source)
{
List<AccessControlEntry> result = new ArrayList<AccessControlEntry>();
if (source != null && source.getPermission().size() > 0)
{
for (CmisAccessControlEntryType one : source.getPermission())
{
result.add(getAccessControlEntry(one));
}
}
return result;
}
public static Map<String, Property<?>> getPropertyMap(CmisPropertiesType input)
{
if (input == null)
{
return null;
}
Map<String, Property<?>> result = new HashMap<String, Property<?>>();
for (CmisProperty source : input.getProperty())
{
if (source instanceof CmisPropertyHtml)
{
result.put(source.getPropertyDefinitionId(), new HtmlProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), ((CmisPropertyHtml)source).getValue()));
}
else if (source instanceof CmisPropertyDecimal)
{
result.put(source.getPropertyDefinitionId(), new DecimalProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), ((CmisPropertyDecimal)source)
.getValue()));
}
else if (source instanceof CmisPropertyDateTime)
{
result.put(source.getPropertyDefinitionId(), new DateTimeProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(),
getCalendarList(((CmisPropertyDateTime)source).getValue())));
}
else if (source instanceof CmisPropertyId)
{
result.put(source.getPropertyDefinitionId(), new IdProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), ((CmisPropertyId)source).getValue()));
}
else if (source instanceof CmisPropertyString)
{
result.put(source.getPropertyDefinitionId(),
new StringProperty(source.getPropertyDefinitionId(), source.getQueryName(), source.getLocalName(),
source.getDisplayName(), ((CmisPropertyString)source).getValue()));
}
else if (source instanceof CmisPropertyUri)
{
result.put(source.getPropertyDefinitionId(), new UriProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), getURIList(((CmisPropertyUri)source)
.getValue())));
}
else if (source instanceof CmisPropertyBoolean)
{
result.put(source.getPropertyDefinitionId(), new BooleanProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), ((CmisPropertyBoolean)source)
.getValue()));
}
else if (source instanceof CmisPropertyInteger)
{
result.put(source.getPropertyDefinitionId(), new IntegerProperty(source.getPropertyDefinitionId(), source
.getQueryName(), source.getLocalName(), source.getDisplayName(), ((CmisPropertyInteger)source)
.getValue()));
}
}
return result;
}
public static CmisTypeDefinitionListType getCmisTypeDefinitionListType(ItemsList<TypeDefinition> source)
{
CmisTypeDefinitionListType result = new CmisTypeDefinitionListType();
for (TypeDefinition one : source.getItems())
{
result.getTypes().add(getCmisTypeDefinitionType(one));
}
result.setHasMoreItems(source.isHasMoreItems());
result.setNumItems(BigInteger.valueOf(source.getNumItems()));
return result;
}
public static CmisExtensionType getCmisExtensionType(Object any)
{
CmisExtensionType result = new CmisExtensionType();
result.getAny().add(any);
return result;
}
public static CmisObjectType getCmisObjectType(CmisObject object)
{
CmisObjectType result = new CmisObjectType();
CmisPropertiesType props = new CmisPropertiesType();
for (Map.Entry<String, Property<?>> e : object.getProperties().entrySet())
{
props.getProperty().add(getCmisProperty(e.getValue()));
}
result.setProperties(props);
result.setAcl(getCmisAccessControlListType(object.getACL()));
if (object.getAllowableActions() != null)
{
result.setAllowableActions(getCmisAllowableActionsType(object.getAllowableActions()));
}
if (object.getChangeInfo() != null)
{
result.setChangeEventInfo(getCmisChangeEventType(object.getChangeInfo()));
}
result.setExactACL(object.isExactACL());
result.setPolicyIds(getCmisListOfIdsType(object.getPolicyIds()));
return result;
}
public static CmisRepositoryInfoType getCmisRepositoryInfoType(RepositoryInfo source)
{
CmisRepositoryInfoType result = new CmisRepositoryInfoType();
result.setAclCapability(getCmisAclCapabilityType(source.getAclCapability()));
result.setCapabilities(getCmisRepositoryCapabilitiesType(source.getCapabilities()));
result.setChangesIncomplete(source.isChangesIncomplete());
result.setCmisVersionSupported(source.getCmisVersionSupported());
result.setLatestChangeLogToken(source.getLatestChangeLogToken());
result.setPrincipalAnonymous(source.getPrincipalAnonymous());
result.setPrincipalAnyone(source.getPrincipalAnyone());
result.setProductName(source.getProductName());
result.setProductVersion(source.getProductVersion());
result.setRepositoryDescription(source.getRepositoryDescription());
result.setRepositoryId(source.getRepositoryId());
result.setRepositoryName(source.getRepositoryName());
result.setRootFolderId(source.getRootFolderId());
result.setThinClientURI(source.getThinClientURI());
result.setVendorName(source.getVendorName());
return result;
}
public static CmisRepositoryEntryType getCmisRepositoryEntryType()
{
//TODO implement;
return null;
}
public static CmisObjectListType getCmisObjectListType(ItemsList<CmisObject> source)
{
CmisObjectListType result = new CmisObjectListType();
for (CmisObject one : source.getItems())
{
result.getObjects().add(getCmisObjectType(one));
}
result.setHasMoreItems(source.isHasMoreItems());
result.setNumItems(BigInteger.valueOf(source.getNumItems()));
return result;
}
public static CmisObjectListType getCmisObjectListType(List<CmisObject> source)
{
CmisObjectListType result = new CmisObjectListType();
for (CmisObject one : source)
{
result.getObjects().add(getCmisObjectType(one));
}
return result;
}
public static List<CmisObjectType> getCmisObjectTypeList(List<CmisObject> source)
{
List<CmisObjectType> result = new ArrayList<CmisObjectType>();
for (CmisObject one : source)
{
result.add(getCmisObjectType(one));
}
return result;
}
public static CmisObjectInFolderListType getCmisObjectInFolderListType(ItemsList<?> source)
{
CmisObjectInFolderListType result = new CmisObjectInFolderListType();
for (Object one : source.getItems())
{
if (one instanceof CmisObject)
{
result.getObjects().add(getCmisObjectInFolderType((CmisObject)one));
}
}
result.setHasMoreItems(source.isHasMoreItems());
result.setNumItems(BigInteger.valueOf(source.getNumItems()));
return result;
}
public static CmisObjectInFolderType getCmisObjectInFolderType(CmisObject source)
{
CmisObjectInFolderType result = new CmisObjectInFolderType();
result.setObject(getCmisObjectType(source));
result.setPathSegment(source.getPathSegment());
return result;
}
public static List<CmisTypeContainer> getCmisTypeContainerList(List<ItemsTree<TypeDefinition>> source)
{
List<CmisTypeContainer> result = new ArrayList<CmisTypeContainer>();
for (ItemsTree<TypeDefinition> one : source)
{
CmisTypeContainer containerType = new CmisTypeContainer();
CmisTypeDefinitionType type = getCmisTypeDefinitionType(one.getContainer());
containerType.setType(type);
if (one.getChildren() != null)
{
for (ItemsTree<TypeDefinition> d : one.getChildren())
{
containerType.getChildren().addAll(getCmisTypeContainerList(d.getChildren()));
}
}
result.add(containerType);
}
return result;
}
public static List<CmisObjectInFolderContainerType> getCmisObjectInFolderContainerTypeList(
List<ItemsTree<CmisObject>> source)
{
List<CmisObjectInFolderContainerType> result = new ArrayList<CmisObjectInFolderContainerType>();
for (ItemsTree<CmisObject> one : source)
{
CmisObjectInFolderContainerType containerType = new CmisObjectInFolderContainerType();
CmisObjectInFolderType type = getCmisObjectInFolderType(one.getContainer());
containerType.setObjectInFolder(type);
if (one.getChildren() != null)
{
for (ItemsTree<CmisObject> d : one.getChildren())
{
if (d != null)
{
containerType.getChildren().addAll(getCmisObjectInFolderContainerTypeList(d.getChildren()));
}
}
}
result.add(containerType);
}
return result;
}
public static CmisObjectParentsType getCmisObjectParentsType(ObjectParent source)
{
CmisObjectParentsType result = new CmisObjectParentsType();
result.setObject(getCmisObjectType(source.getObject()));
result.setRelativePathSegment(source.getRelativePathSegment());
return result;
}
public static CmisTypeDefinitionType getCmisTypeDefinitionType(TypeDefinition source)
{
CmisTypeDefinitionType result = new CmisTypeDefinitionType();
result.setBaseId(EnumBaseObjectTypeIds.fromValue(source.getBaseId().value()));
result.setControllableACL(source.isControllableACL());
result.setControllablePolicy(source.isControllablePolicy());
result.setCreatable(source.isCreatable());
result.setDescription(source.getDescription());
result.setDisplayName(source.getDisplayName());
result.setFileable(source.isFileable());
result.setFulltextIndexed(source.isFulltextIndexed());
result.setId(source.getId());
result.setIncludedInSupertypeQuery(source.isIncludedInSupertypeQuery());
result.setLocalName(source.getLocalName());
result.setLocalNamespace(source.getLocalNamespace());
result.setParentId(source.getParentId());
result.setQueryable(source.isQueryable());
result.setQueryName(source.getQueryName());
result.getPropertyDefinition().addAll(getCmisPropertyDefintitionTypeList(source.getPropertyDefinitions()));
return result;
}
public static CmisChoiceBoolean getCmisChoiceBoolean(Choice<Boolean> source)
{
CmisChoiceBoolean cmisChoice = new CmisChoiceBoolean();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (Boolean v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<Boolean> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceBoolean(c));
}
}
return cmisChoice;
}
public static CmisChoiceDateTime getCmisChoiceDateTime(Choice<Calendar> source)
{
CmisChoiceDateTime cmisChoice = new CmisChoiceDateTime();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (Calendar v : source.getValues())
{
cmisChoice.getValue().add(CmisUtils.fromCalendar(v));
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<Calendar> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceDateTime(c));
}
}
return cmisChoice;
}
public static CmisChoiceDecimal getCmisChoiceDecimal(Choice<BigDecimal> source)
{
CmisChoiceDecimal cmisChoice = new CmisChoiceDecimal();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (BigDecimal v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<BigDecimal> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceDecimal(c));
}
}
return cmisChoice;
}
public static CmisChoiceHtml getCmisChoiceHtml(Choice<String> source)
{
CmisChoiceHtml cmisChoice = new CmisChoiceHtml();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (String v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<String> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceHtml(c));
}
}
return cmisChoice;
}
public static CmisChoiceId getCmisChoiceId(Choice<String> source)
{
CmisChoiceId cmisChoice = new CmisChoiceId();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (String v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<String> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceId(c));
}
}
return cmisChoice;
}
public static CmisChoiceInteger getCmisChoiceInteger(Choice<BigInteger> source)
{
CmisChoiceInteger cmisChoice = new CmisChoiceInteger();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (BigInteger v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<BigInteger> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceInteger(c));
}
}
return cmisChoice;
}
public static CmisChoiceString getCmisChoiceString(Choice<String> source)
{
CmisChoiceString cmisChoice = new CmisChoiceString();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (String v : source.getValues())
{
cmisChoice.getValue().add(v);
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<String> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceString(c));
}
}
return cmisChoice;
}
public static CmisChoiceUri getCmisChoiceUri(Choice<URI> source)
{
CmisChoiceUri cmisChoice = new CmisChoiceUri();
cmisChoice.setDisplayName(source.getDisplayName());
if (source.getValues() != null)
{
for (URI v : source.getValues())
{
cmisChoice.getValue().add(v.toASCIIString());
}
}
if (source.getChoices() != null && source.getChoices().size() > 0)
{
for (Choice<URI> c : source.getChoices())
{
cmisChoice.getChoice().add(getCmisChoiceUri(c));
}
}
return cmisChoice;
}
@SuppressWarnings("unchecked")
public static List<CmisPropertyDefinitionType> getCmisPropertyDefintitionTypeList(
Collection<PropertyDefinition<?>> source)
{
if (source == null)
{
return Collections.emptyList();
}
List<CmisPropertyDefinitionType> result = new ArrayList<CmisPropertyDefinitionType>();
for (PropertyDefinition<?> definition : source)
{
CmisPropertyDefinitionType cmisPropertyDefinition = null;
switch (definition.getPropertyType())
{
case BOOLEAN :
CmisPropertyBooleanDefinitionType bool = new CmisPropertyBooleanDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
bool.getChoice().add(getCmisChoiceBoolean((Choice<Boolean>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyBoolean def = new CmisPropertyBoolean();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((Boolean)o);
}
bool.setDefaultValue(def);
}
cmisPropertyDefinition = bool;
break;
case DATETIME :
CmisPropertyDateTimeDefinitionType date = new CmisPropertyDateTimeDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
date.getChoice().add(getCmisChoiceDateTime((Choice<Calendar>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyDateTime def = new CmisPropertyDateTime();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add(CmisUtils.fromCalendar((Calendar)o));
}
date.setDefaultValue(def);
}
cmisPropertyDefinition = date;
break;
case DECIMAL :
CmisPropertyDecimalDefinitionType decimal = new CmisPropertyDecimalDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
decimal.getChoice().add(getCmisChoiceDecimal((Choice<BigDecimal>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyDecimal def = new CmisPropertyDecimal();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((BigDecimal)o);
}
decimal.setDefaultValue(def);
}
decimal.setMaxValue(definition.getMaxDecimal());
decimal.setMinValue(definition.getMinDecimal());
cmisPropertyDefinition = decimal;
break;
case HTML :
CmisPropertyHtmlDefinitionType html = new CmisPropertyHtmlDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
html.getChoice().add(getCmisChoiceHtml((Choice<String>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyHtml def = new CmisPropertyHtml();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((String)o);
}
html.setDefaultValue(def);
}
cmisPropertyDefinition = html;
break;
case ID :
CmisPropertyIdDefinitionType id = new CmisPropertyIdDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
id.getChoice().add(getCmisChoiceId((Choice<String>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyId def = new CmisPropertyId();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((String)o);
}
id.setDefaultValue(def);
}
cmisPropertyDefinition = id;
break;
case INTEGER :
CmisPropertyIntegerDefinitionType integ = new CmisPropertyIntegerDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
integ.getChoice().add(getCmisChoiceInteger((Choice<BigInteger>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyInteger def = new CmisPropertyInteger();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((BigInteger)o);
}
integ.setDefaultValue(def);
}
integ.setMaxValue(definition.getMaxInteger());
integ.setMinValue(definition.getMinInteger());
cmisPropertyDefinition = integ;
break;
case STRING :
CmisPropertyStringDefinitionType str = new CmisPropertyStringDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
str.getChoice().add(getCmisChoiceString((Choice<String>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyString def = new CmisPropertyString();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((String)o);
}
str.setDefaultValue(def);
}
str.setMaxLength(BigInteger.valueOf(definition.getMaxLength()));
cmisPropertyDefinition = str;
break;
case URI :
CmisPropertyUriDefinitionType uri = new CmisPropertyUriDefinitionType();
if (definition.getChoices() != null && definition.getChoices().size() > 0)
{
for (Choice<?> c : definition.getChoices())
{
uri.getChoice().add(getCmisChoiceUri((Choice<URI>)c));
}
}
if (definition.getDefaultValue() != null && definition.getDefaultValue().length > 0)
{
CmisPropertyUri def = new CmisPropertyUri();
def.setDisplayName(definition.getDisplayName());
def.setLocalName(definition.getLocalName());
def.setPropertyDefinitionId(definition.getId());
def.setQueryName(definition.getQueryName());
for (Object o : definition.getDefaultValue())
{
def.getValue().add((String)o);
}
uri.setDefaultValue(def);
}
cmisPropertyDefinition = uri;
break;
}
cmisPropertyDefinition.setCardinality(definition.isMultivalued() ? EnumCardinality.MULTI
: EnumCardinality.SINGLE);
cmisPropertyDefinition.setDescription(definition.getDescription());
cmisPropertyDefinition.setDisplayName(definition.getDisplayName());
cmisPropertyDefinition.setId(definition.getId());
cmisPropertyDefinition.setInherited(definition.getInherited());
cmisPropertyDefinition.setLocalName(definition.getLocalName());
cmisPropertyDefinition.setLocalNamespace(definition.getLocalNamespace());
cmisPropertyDefinition.setOpenChoice(definition.isOpenChoice());
cmisPropertyDefinition.setOrderable(definition.isOrderable());
cmisPropertyDefinition.setPropertyType(EnumPropertyType.fromValue(definition.getPropertyType().value()));
cmisPropertyDefinition.setQueryable(definition.isQueryable());
cmisPropertyDefinition.setQueryName(definition.getQueryName());
cmisPropertyDefinition.setRequired(definition.isRequired());
cmisPropertyDefinition.setUpdatability(EnumUpdatability.fromValue(definition.getUpdatability().value()));
result.add(cmisPropertyDefinition);
}
return result;
}
public static TypeDefinition getTypeDefinition(CmisTypeDefinitionType source)
{
TypeDefinition result =
new TypeDefinition(source.getId(), BaseType.fromValue(source.getBaseId().value()), source.getQueryName(),
source.getLocalName(), source.getLocalNamespace(), source.getParentId(), source.getDisplayName(), source
.getDescription(), source.isCreatable(), source.isFileable(), source.isQueryable(), source
.isFulltextIndexed(), source.isIncludedInSupertypeQuery(), source.isControllablePolicy(), source
.isControllableACL(), false, null, null, ContentStreamAllowed.ALLOWED, getPropertyDefinitionMap(source
.getPropertyDefinition()));
return result;
}
@SuppressWarnings("unchecked")
public static Map<String, PropertyDefinition<?>> getPropertyDefinitionMap(List<CmisPropertyDefinitionType> source)
{
Map<String, PropertyDefinition<?>> result = new HashMap<String, PropertyDefinition<?>>();
for (CmisPropertyDefinitionType one : source)
{
result.put(one.getId(), new PropertyDefinition(one.getId(), one.getQueryName(), one.getLocalName(), one
.getLocalNamespace(), one.getDisplayName(), one.getDescription(), PropertyType.fromValue(one
.getPropertyType().value()), Updatability.fromValue(one.getUpdatability().value()), one.getInherited(), one
.isRequired(), one.isQueryable(), one.isOrderable(), one.getOpenChoice(), false, null, null));
}
return result;
}
public static CmisRepositoryCapabilitiesType getCmisRepositoryCapabilitiesType(RepositoryCapabilities source)
{
CmisRepositoryCapabilitiesType result = new CmisRepositoryCapabilitiesType();
result.setCapabilityACL(EnumCapabilityACL.fromValue(source.getCapabilityACL().value()));
result.setCapabilityAllVersionsSearchable(source.isCapabilityAllVersionsSearchable());
result.setCapabilityChanges(EnumCapabilityChanges.fromValue(source.getCapabilityChanges().value()));
result.setCapabilityContentStreamUpdatability(EnumCapabilityContentStreamUpdates.fromValue(source
.getCapabilityContentStreamUpdatable().value()));
result.setCapabilityGetDescendants(source.isCapabilityGetDescendants());
result.setCapabilityGetFolderTree(source.isCapabilityGetFolderTree());
result.setCapabilityJoin(EnumCapabilityJoin.fromValue(source.getCapabilityJoin().value()));
result.setCapabilityMultifiling(source.isCapabilityMultifiling());
result.setCapabilityPWCSearchable(source.isCapabilityPWCSearchable());
result.setCapabilityPWCUpdatable(source.isCapabilityPWCUpdatable());
result.setCapabilityQuery(EnumCapabilityQuery.fromValue(source.getCapabilityQuery().value()));
result.setCapabilityRenditions(EnumCapabilityRendition.fromValue(source.getCapabilityRenditions().value()));
result.setCapabilityUnfiling(source.isCapabilityUnfiling());
result.setCapabilityVersionSpecificFiling(source.isCapabilityVersionSpecificFiling());
return result;
}
public static CmisPropertiesType getCmisPropertiesType(CmisObject source)
{
CmisPropertiesType result = new CmisPropertiesType();
for (Map.Entry<String, Property<?>> e : source.getProperties().entrySet())
{
result.getProperty().add(getCmisProperty(e.getValue()));
}
return result;
}
public static List<CmisRenditionType> getCmisRenditionTypeList(List<Rendition> source)
{
List<CmisRenditionType> result = new ArrayList<CmisRenditionType>();
for (Rendition one : source)
{
result.add(getCmisRenditionType(one));
}
return result;
}
public static Rendition getRendition(CmisRenditionType source)
{
Rendition result = new Rendition();
result.setHeight(source.getHeight().intValue());
result.setKind(source.getKind());
result.setLength(source.getLength().intValue());
result.setMimeType(source.getMimetype());
result.setRenditionDocumentId(source.getRenditionDocumentId());
result.setStreamId(source.getStreamId());
result.setTitle(source.getTitle());
result.setWidth(source.getWidth().intValue());
return result;
}
public static CmisRenditionType getCmisRenditionType(Rendition source)
{
CmisRenditionType result = new CmisRenditionType();
result.setHeight(BigInteger.valueOf(source.getHeight()));
result.setKind(source.getKind());
result.setLength(BigInteger.valueOf(source.getLength()));
result.setMimetype(source.getMimeType());
result.setRenditionDocumentId(source.getRenditionDocumentId());
result.setStreamId(source.getStreamId());
result.setTitle(source.getTitle());
result.setWidth(BigInteger.valueOf(source.getWidth()));
return result;
}
public static CmisChangeEventType getCmisChangeEventType(ChangeInfo source)
{
CmisChangeEventType result = new CmisChangeEventType();
Calendar cal = source.getChangeTime();
result.setChangeTime(CmisUtils.fromCalendar(cal));
result.setChangeType(EnumTypeOfChanges.fromValue(source.getChangeType().value()));
return result;
}
public static List<CmisPermissionMapping> getCmisPermissionMappingList(PermissionMapping source)
{
List<CmisPermissionMapping> result = new ArrayList<CmisPermissionMapping>();
for (Map.Entry<String, Collection<String>> e : source.getAll().entrySet())
{
CmisPermissionMapping one = new CmisPermissionMapping();
if (e.getValue() != null && e.getValue().size() > 0)
{
try
{
one.setKey(EnumAllowableActionsKey.fromValue(e.getKey()));
one.getPermission().addAll(e.getValue());
result.add(one);
}
catch (IllegalArgumentException ex)
{
// TODO: Permission mapping keys described in spec does not coresponds with xml schema, so some keys are causing error
// when try to do EnumAllowableActionsKey.fromValue(e.getKey()), e.g canRenditions.Object is present in spen but not in cmis-core.xsd;
}
}
}
return result;
}
@SuppressWarnings("unchecked")
public static CmisProperty getCmisProperty(Property<?> source)
{
CmisProperty result = null;
if (source instanceof BooleanProperty)
{
result = new CmisPropertyBoolean();
((CmisPropertyBoolean)result).getValue().addAll((Collection<? extends Boolean>)(source.getValues()));
}
else if (source instanceof DateTimeProperty)
{
result = new CmisPropertyDateTime();
((CmisPropertyDateTime)result).getValue().addAll(
(Collection<? extends XMLGregorianCalendar>)(source.getValues()));
}
else if (source instanceof DecimalProperty)
{
result = new CmisPropertyDecimal();
((CmisPropertyDecimal)result).getValue().addAll((Collection<? extends BigDecimal>)(source.getValues()));
}
else if (source instanceof HtmlProperty)
{
result = new CmisPropertyHtml();
((CmisPropertyHtml)result).getValue().addAll((Collection<? extends String>)(source.getValues()));
}
else if (source instanceof IdProperty)
{
result = new CmisPropertyId();
((CmisPropertyId)result).getValue().addAll((Collection<? extends String>)(source.getValues()));
}
else if (source instanceof IntegerProperty)
{
result = new CmisPropertyInteger();
((CmisPropertyInteger)result).getValue().addAll((Collection<? extends BigInteger>)(source.getValues()));
}
else if (source instanceof StringProperty)
{
result = new CmisPropertyString();
((CmisPropertyString)result).getValue().addAll((Collection<? extends String>)(source.getValues()));
}
else if (source instanceof UriProperty)
{
result = new CmisPropertyUri();
((CmisPropertyUri)result).getValue().addAll((Collection<? extends String>)(source.getValues()));
}
result.setDisplayName(source.getDisplayName());
result.setLocalName(source.getLocalName());
result.setPropertyDefinitionId(source.getId());
result.setQueryName(source.getQueryName());
return result;
}
public static CmisListOfIdsType getCmisListOfIdsType(Collection<String> list)
{
CmisListOfIdsType result = new CmisListOfIdsType();
for (String one : list)
{
result.getId().add(one);
}
return result;
}
public static CmisAccessControlEntryType getCmisAccessControlEntryType(AccessControlEntry source)
{
CmisAccessControlEntryType result = new CmisAccessControlEntryType();
CmisAccessControlPrincipalType principal = new CmisAccessControlPrincipalType();
principal.setPrincipalId(source.getPrincipal());
result.setPrincipal(principal);
result.getPermission().addAll(source.getPermissions());
return result;
}
public static List<URI> getURIList(List<String> values)
{
List<URI> result = new ArrayList<URI>();
for (String one : values)
{
if (one != null)
{
result.add(URI.create(one));
}
}
return result;
}
public static List<Calendar> getCalendarList(List<XMLGregorianCalendar> source)
{
List<Calendar> result = new ArrayList<Calendar>();
for (XMLGregorianCalendar one : source)
{
if (one != null)
{
result.add(one.toGregorianCalendar());
}
}
return result;
}
}