You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by dc...@apache.org on 2010/04/22 18:18:25 UTC

svn commit: r936933 [5/10] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons: chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/ chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencm...

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Converter.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Converter.java?rev=936933&r1=936932&r2=936933&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Converter.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/Converter.java Thu Apr 22 16:18:22 2010
@@ -233,2364 +233,2364 @@ import com.sun.xml.ws.developer.Streamin
  */
 public final class Converter {
 
-	/**
-	 * Private constructor.
-	 */
-	private Converter() {
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Repository Info ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a repository info object.
-	 */
-	public static RepositoryInfo convert(CmisRepositoryInfoType repositoryInfo) {
-		if (repositoryInfo == null) {
-			return null;
-		}
-
-		RepositoryInfoImpl result = new RepositoryInfoImpl();
-
-		result.setAclCapabilities(convert(repositoryInfo.getAclCapability()));
-		result.setChangesIncomplete(repositoryInfo.isChangesIncomplete());
-		List<BaseTypeId> baseObjectTypeIds = new ArrayList<BaseTypeId>();
-		for (EnumBaseObjectTypeIds bot : repositoryInfo.getChangesOnType()) {
-			baseObjectTypeIds.add(convert(BaseTypeId.class, bot));
-		}
-		result.setChangesOnType(baseObjectTypeIds);
-		result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
-		result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
-		result.setPrincipalAnonymous(repositoryInfo.getPrincipalAnonymous());
-		result.setPrincipalAnyone(repositoryInfo.getPrincipalAnyone());
-		result.setProductName(repositoryInfo.getProductName());
-		result.setProductVersion(repositoryInfo.getProductVersion());
-		result.setRepositoryCapabilities(convert(repositoryInfo.getCapabilities()));
-		result.setRepositoryDescription(repositoryInfo.getRepositoryDescription());
-		result.setRepositoryId(repositoryInfo.getRepositoryId());
-		result.setRepositoryName(repositoryInfo.getRepositoryName());
-		result.setRootFolder(repositoryInfo.getRootFolderId());
-		result.setThinClientUri(repositoryInfo.getThinClientURI());
-		result.setVendorName(repositoryInfo.getVendorName());
-
-		// handle extensions
-		convertExtension(repositoryInfo, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a repository capability object.
-	 */
-	public static RepositoryCapabilities convert(CmisRepositoryCapabilitiesType capabilities) {
-		if (capabilities == null) {
-			return null;
-		}
-
-		RepositoryCapabilitiesImpl result = new RepositoryCapabilitiesImpl();
-
-		result.setAllVersionsSearchable(capabilities.isCapabilityAllVersionsSearchable());
-		result.setCapabilityAcl(convert(CapabilityAcl.class, capabilities.getCapabilityACL()));
-		result.setCapabilityChanges(convert(CapabilityChanges.class, capabilities.getCapabilityChanges()));
-		result.setCapabilityContentStreamUpdates(convert(CapabilityContentStreamUpdates.class, capabilities
-				.getCapabilityContentStreamUpdatability()));
-		result.setCapabilityJoin(convert(CapabilityJoin.class, capabilities.getCapabilityJoin()));
-		result.setCapabilityQuery(convert(CapabilityQuery.class, capabilities.getCapabilityQuery()));
-		result.setCapabilityRendition(convert(CapabilityRenditions.class, capabilities.getCapabilityRenditions()));
-		result.setIsPwcSearchable(capabilities.isCapabilityPWCSearchable());
-		result.setIsPwcUpdatable(capabilities.isCapabilityPWCUpdatable());
-		result.setSupportsGetDescendants(capabilities.isCapabilityGetDescendants());
-		result.setSupportsGetFolderTree(capabilities.isCapabilityGetFolderTree());
-		result.setSupportsMultifiling(capabilities.isCapabilityMultifiling());
-		result.setSupportsUnfiling(capabilities.isCapabilityUnfiling());
-		result.setSupportsVersionSpecificFiling(capabilities.isCapabilityVersionSpecificFiling());
-
-		// handle extensions
-		convertExtension(capabilities, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a ACL capability object.
-	 */
-	public static AclCapabilities convert(CmisACLCapabilityType aclCapabilities) {
-		if (aclCapabilities == null) {
-			return null;
-		}
-
-		AclCapabilitiesDataImpl result = new AclCapabilitiesDataImpl();
-
-		result.setSupportedPermissions(convert(SupportedPermissions.class, aclCapabilities.getSupportedPermissions()));
-
-		result.setAclPropagation(convert(AclPropagation.class, aclCapabilities.getPropagation()));
-
-		List<PermissionDefinition> permissionDefinitionList = new ArrayList<PermissionDefinition>();
-		for (CmisPermissionDefinition permDef : aclCapabilities.getPermissions()) {
-			PermissionDefinitionDataImpl permDefData = new PermissionDefinitionDataImpl();
-			permDefData.setPermission(permDef.getPermission());
-			permDefData.setDescription(permDef.getDescription());
-			convertExtension(permDef, permDefData);
-
-			permissionDefinitionList.add(permDefData);
-		}
-		result.setPermissionDefinitionData(permissionDefinitionList);
-
-		Map<String, PermissionMapping> permissionMapping = new LinkedHashMap<String, PermissionMapping>();
-		for (CmisPermissionMapping permMapping : aclCapabilities.getMapping()) {
-			if (permMapping.getKey() != null) {
-				PermissionMappingDataImpl permMappingData = new PermissionMappingDataImpl();
-				String key = permMapping.getKey().value();
-				permMappingData.setKey(key);
-				permMappingData.setPermissions(permMapping.getPermission());
-				convertExtension(permMapping, permMappingData);
-				permissionMapping.put(key, permMappingData);
-			}
-		}
-		result.setPermissionMappingData(permissionMapping);
-
-		// handle extensions
-		convertExtension(aclCapabilities, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a repository info object.
-	 */
-	public static CmisRepositoryInfoType convert(RepositoryInfo repositoryInfo) {
-		if (repositoryInfo == null) {
-			return null;
-		}
-
-		CmisRepositoryInfoType result = new CmisRepositoryInfoType();
-
-		result.setAclCapability(convert(repositoryInfo.getAclCapabilities()));
-		result.setCapabilities(convert(repositoryInfo.getCapabilities()));
-		result.setChangesIncomplete(repositoryInfo.getChangesIncomplete());
-		result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
-		result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
-		result.setPrincipalAnonymous(repositoryInfo.getPrincipalIdAnonymous());
-		result.setPrincipalAnyone(repositoryInfo.getPrincipalIdAnyone());
-		result.setProductName(repositoryInfo.getProductName());
-		result.setProductVersion(repositoryInfo.getProductVersion());
-		result.setRepositoryDescription(repositoryInfo.getDescription());
-		result.setRepositoryId(repositoryInfo.getId());
-		result.setRepositoryName(repositoryInfo.getName());
-		result.setRootFolderId(repositoryInfo.getRootFolderId());
-		result.setThinClientURI(repositoryInfo.getThinClientUri());
-		result.setVendorName(repositoryInfo.getVendorName());
-
-		if (repositoryInfo.getChangesOnType() != null) {
-			for (BaseTypeId boti : repositoryInfo.getChangesOnType()) {
-				result.getChangesOnType().add(convert(EnumBaseObjectTypeIds.class, boti));
-			}
-		}
-
-		// handle extensions
-		convertExtension(repositoryInfo, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a repository capability object.
-	 */
-	public static CmisRepositoryCapabilitiesType convert(RepositoryCapabilities capabilities) {
-		if (capabilities == null) {
-			return null;
-		}
-
-		CmisRepositoryCapabilitiesType result = new CmisRepositoryCapabilitiesType();
-
-		result.setCapabilityACL(convert(EnumCapabilityACL.class, capabilities.getAclCapability()));
-		result.setCapabilityAllVersionsSearchable(capabilities.isAllVersionsSearchableSupported());
-		result.setCapabilityChanges(convert(EnumCapabilityChanges.class, capabilities.getChangesCapability()));
-		result.setCapabilityContentStreamUpdatability(convert(EnumCapabilityContentStreamUpdates.class, capabilities
-				.getContentStreamUpdatesCapability()));
-		result.setCapabilityGetDescendants(capabilities.isGetDescendantsSupported());
-		result.setCapabilityGetFolderTree(capabilities.isGetFolderTreeSupported());
-		result.setCapabilityJoin(convert(EnumCapabilityJoin.class, capabilities.getJoinCapability()));
-		result.setCapabilityMultifiling(capabilities.isMultifilingSupported());
-		result.setCapabilityPWCSearchable(capabilities.isPwcSearchableSupported());
-		result.setCapabilityPWCUpdatable(capabilities.isPwcUpdatableSupported());
-		result.setCapabilityQuery(convert(EnumCapabilityQuery.class, capabilities.getQueryCapability()));
-		result.setCapabilityRenditions(convert(EnumCapabilityRendition.class, capabilities.getRenditionsCapability()));
-		result.setCapabilityUnfiling(capabilities.isUnfilingSupported());
-		result.setCapabilityVersionSpecificFiling(capabilities.isVersionSpecificFilingSupported());
-
-		// handle extensions
-		convertExtension(capabilities, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a ACL capability object.
-	 */
-	public static CmisACLCapabilityType convert(AclCapabilities aclCapabilities) {
-		if (aclCapabilities == null) {
-			return null;
-		}
-
-		CmisACLCapabilityType result = new CmisACLCapabilityType();
-
-		result.setSupportedPermissions(convert(EnumSupportedPermissions.class, aclCapabilities
-				.getSupportedPermissions()));
-
-		result.setPropagation(convert(EnumACLPropagation.class, aclCapabilities.getAclPropagation()));
-
-		if (aclCapabilities.getPermissions() != null) {
-			for (PermissionDefinition pdd : aclCapabilities.getPermissions()) {
-				CmisPermissionDefinition permDef = new CmisPermissionDefinition();
-				permDef.setDescription(pdd.getDescription());
-				permDef.setPermission(pdd.getId());
-				convertExtension(pdd, permDef);
-
-				result.getPermissions().add(permDef);
-			}
-		}
-
-		if (aclCapabilities.getPermissionMapping() != null) {
-			for (PermissionMapping pmd : aclCapabilities.getPermissionMapping().values()) {
-				CmisPermissionMapping permMap = new CmisPermissionMapping();
-				permMap.setKey(EnumAllowableActionsKey.fromValue(pmd.getKey()));
-
-				if (pmd.getPermissions() != null) {
-					for (String permission : pmd.getPermissions()) {
-						permMap.getPermission().add(permission);
-					}
-				}
-
-				convertExtension(pmd, permMap);
-
-				result.getMapping().add(permMap);
-			}
-		}
-
-		// handle extensions
-		convertExtension(aclCapabilities, result);
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Types ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a type definition object.
-	 */
-	public static TypeDefinition convert(CmisTypeDefinitionType typeDefinition) {
-		if (typeDefinition == null) {
-			return null;
-		}
-
-		AbstractTypeDefinition result = null;
-
-		if (typeDefinition instanceof CmisTypeFolderDefinitionType) {
-			result = new FolderTypeDefinitionImpl();
-		} else if (typeDefinition instanceof CmisTypeDocumentDefinitionType) {
-			result = new DocumentTypeDefinitionImpl();
-
-			((DocumentTypeDefinitionImpl) result).setContentStreamAllowed(convert(ContentStreamAllowed.class,
-					((CmisTypeDocumentDefinitionType) typeDefinition).getContentStreamAllowed()));
-			((DocumentTypeDefinitionImpl) result).setIsVersionable(((CmisTypeDocumentDefinitionType) typeDefinition)
-					.isVersionable());
-		} else if (typeDefinition instanceof CmisTypeRelationshipDefinitionType) {
-			result = new RelationshipTypeDefinitionImpl();
-
-			((RelationshipTypeDefinitionImpl) result)
-					.setAllowedSourceTypes(((CmisTypeRelationshipDefinitionType) typeDefinition)
-							.getAllowedSourceTypes());
-			((RelationshipTypeDefinitionImpl) result)
-					.setAllowedTargetTypes(((CmisTypeRelationshipDefinitionType) typeDefinition)
-							.getAllowedTargetTypes());
-		} else if (typeDefinition instanceof CmisTypePolicyDefinitionType) {
-			result = new PolicyTypeDefinitionImpl();
-		} else {
-			throw new CmisRuntimeException("Type '" + typeDefinition.getId() + "' does not match a base type!");
-		}
-
-		result.setBaseTypeId(convert(BaseTypeId.class, typeDefinition.getBaseId()));
-		result.setDescription(typeDefinition.getDescription());
-		result.setDisplayName(typeDefinition.getDisplayName());
-		result.setId(typeDefinition.getId());
-		result.setIsControllableAcl(typeDefinition.isControllableACL());
-		result.setIsControllablePolicy(typeDefinition.isControllablePolicy());
-		result.setIsCreatable(typeDefinition.isCreatable());
-		result.setIsFileable(typeDefinition.isFileable());
-		result.setIsFulltextIndexed(typeDefinition.isFulltextIndexed());
-		result.setIsIncludedInSupertypeQuery(typeDefinition.isIncludedInSupertypeQuery());
-		result.setIsQueryable(typeDefinition.isQueryable());
-		result.setLocalName(typeDefinition.getLocalName());
-		result.setLocalNamespace(typeDefinition.getLocalNamespace());
-		result.setParentTypeId(typeDefinition.getParentId());
-		result.setQueryName(typeDefinition.getQueryName());
-
-		for (CmisPropertyDefinitionType propertyDefinition : typeDefinition.getPropertyDefinition()) {
-			result.addPropertyDefinition(convert(propertyDefinition));
-		}
-
-		// handle extensions
-		convertExtension(typeDefinition, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a property definition object.
-	 */
-	public static PropertyDefinition<?> convert(CmisPropertyDefinitionType propertyDefinition) {
-		if (propertyDefinition == null) {
-			return null;
-		}
-
-		AbstractPropertyDefinition<?> result = null;
-
-		if (propertyDefinition instanceof CmisPropertyStringDefinitionType) {
-			result = new PropertyStringDefinitionImpl();
-
-			((PropertyStringDefinitionImpl) result)
-					.setChoices(convertChoiceStringList(((CmisPropertyStringDefinitionType) propertyDefinition)
-							.getChoice()));
-
-			CmisPropertyString prop = ((CmisPropertyStringDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyStringDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-
-			// specific
-			((PropertyStringDefinitionImpl) result)
-					.setMaxLength(((CmisPropertyStringDefinitionType) propertyDefinition).getMaxLength());
-		} else if (propertyDefinition instanceof CmisPropertyIdDefinitionType) {
-			result = new PropertyIdDefinitionImpl();
-
-			((PropertyIdDefinitionImpl) result)
-					.setChoices(convertChoiceIdList(((CmisPropertyIdDefinitionType) propertyDefinition).getChoice()));
-
-			CmisPropertyId prop = ((CmisPropertyIdDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyIdDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-		} else if (propertyDefinition instanceof CmisPropertyIntegerDefinitionType) {
-			result = new PropertyIntegerDefinitionImpl();
-
-			((PropertyIntegerDefinitionImpl) result)
-					.setChoices(convertChoiceIntegerList(((CmisPropertyIntegerDefinitionType) propertyDefinition)
-							.getChoice()));
-
-			CmisPropertyInteger prop = ((CmisPropertyIntegerDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyIntegerDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-
-			// specific
-			((PropertyIntegerDefinitionImpl) result)
-					.setMinValue(((CmisPropertyIntegerDefinitionType) propertyDefinition).getMinValue());
-			((PropertyIntegerDefinitionImpl) result)
-					.setMaxValue(((CmisPropertyIntegerDefinitionType) propertyDefinition).getMaxValue());
-		} else if (propertyDefinition instanceof CmisPropertyDecimalDefinitionType) {
-			result = new PropertyDecimalDefinitionImpl();
-
-			((PropertyDecimalDefinitionImpl) result)
-					.setChoices(convertChoiceDecimalList(((CmisPropertyDecimalDefinitionType) propertyDefinition)
-							.getChoice()));
-
-			CmisPropertyDecimal prop = ((CmisPropertyDecimalDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyDecimalDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-
-			// specific
-			((PropertyDecimalDefinitionImpl) result)
-					.setMinValue(((CmisPropertyDecimalDefinitionType) propertyDefinition).getMinValue());
-			((PropertyDecimalDefinitionImpl) result)
-					.setMaxValue(((CmisPropertyDecimalDefinitionType) propertyDefinition).getMaxValue());
-
-		} else if (propertyDefinition instanceof CmisPropertyBooleanDefinitionType) {
-			result = new PropertyBooleanDefinitionImpl();
-
-			((PropertyBooleanDefinitionImpl) result)
-					.setChoices(convertChoiceBooleanList(((CmisPropertyBooleanDefinitionType) propertyDefinition)
-							.getChoice()));
-
-			CmisPropertyBoolean prop = ((CmisPropertyBooleanDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyBooleanDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-		} else if (propertyDefinition instanceof CmisPropertyDateTimeDefinitionType) {
-			result = new PropertyDateTimeDefinitionImpl();
-
-			((PropertyDateTimeDefinitionImpl) result)
-					.setChoices(convertChoiceDateTimeList(((CmisPropertyDateTimeDefinitionType) propertyDefinition)
-							.getChoice()));
-
-			CmisPropertyDateTime prop = ((CmisPropertyDateTimeDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyDateTimeDefinitionImpl) result).setDefaultValue(convertXMLCalendar(prop.getValue()));
-			}
-
-			// specific
-			((PropertyDateTimeDefinitionImpl) result).setDateTimeResolution(convert(DateTimeResolution.class,
-					((CmisPropertyDateTimeDefinitionType) propertyDefinition).getResolution()));
-		} else if (propertyDefinition instanceof CmisPropertyHtmlDefinitionType) {
-			result = new PropertyHtmlDefinitionImpl();
-
-			((PropertyHtmlDefinitionImpl) result)
-					.setChoices(convertChoiceHtmlList(((CmisPropertyHtmlDefinitionType) propertyDefinition).getChoice()));
-
-			CmisPropertyHtml prop = ((CmisPropertyHtmlDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyHtmlDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-		} else if (propertyDefinition instanceof CmisPropertyUriDefinitionType) {
-			result = new PropertyUriDefinitionImpl();
-
-			((PropertyUriDefinitionImpl) result)
-					.setChoices(convertChoiceUriList(((CmisPropertyUriDefinitionType) propertyDefinition).getChoice()));
-
-			CmisPropertyUri prop = ((CmisPropertyUriDefinitionType) propertyDefinition).getDefaultValue();
-			if (prop != null) {
-				((PropertyUriDefinitionImpl) result).setDefaultValue(prop.getValue());
-			}
-		} else {
-			return null;
-		}
-
-		result.setCardinality(convert(Cardinality.class, propertyDefinition.getCardinality()));
-		result.setDescription(propertyDefinition.getDescription());
-		result.setDisplayName(propertyDefinition.getDisplayName());
-		result.setId(propertyDefinition.getId());
-		result.setIsInherited(propertyDefinition.isInherited());
-		result.setIsOpenChoice(propertyDefinition.isOpenChoice());
-		result.setIsQueryable(propertyDefinition.isQueryable());
-		result.setIsOrderable(propertyDefinition.isOrderable());
-		result.setIsRequired(propertyDefinition.isRequired());
-		result.setLocalName(propertyDefinition.getLocalName());
-		result.setLocalNamespace(propertyDefinition.getLocalNamespace());
-		result.setPropertyType(convert(PropertyType.class, propertyDefinition.getPropertyType()));
-		result.setQueryName(propertyDefinition.getQueryName());
-		result.setUpdatability(convert(Updatability.class, propertyDefinition.getUpdatability()));
-
-		// handle extensions
-		convertExtension(propertyDefinition, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a type definition object.
-	 */
-	public static CmisTypeDefinitionType convert(TypeDefinition typeDefinition) {
-		if (typeDefinition == null) {
-			return null;
-		}
-
-		CmisTypeDefinitionType result = null;
-
-		if (typeDefinition instanceof DocumentTypeDefinition) {
-			result = new CmisTypeDocumentDefinitionType();
-
-			DocumentTypeDefinition docTypeDefintion = (DocumentTypeDefinition) typeDefinition;
-			((CmisTypeDocumentDefinitionType) result).setVersionable(convertBoolean(docTypeDefintion.isVersionable(),
-					false));
-			((CmisTypeDocumentDefinitionType) result).setContentStreamAllowed(convert(EnumContentStreamAllowed.class,
-					docTypeDefintion.getContentStreamAllowed()));
-		} else if (typeDefinition instanceof FolderTypeDefinition) {
-			result = new CmisTypeFolderDefinitionType();
-		} else if (typeDefinition instanceof RelationshipTypeDefinition) {
-			result = new CmisTypeRelationshipDefinitionType();
-
-			RelationshipTypeDefinition relationshipTypeDefinition = (RelationshipTypeDefinition) typeDefinition;
-
-			if (relationshipTypeDefinition.getAllowedSourceTypeIds() != null) {
-				for (String type : relationshipTypeDefinition.getAllowedSourceTypeIds()) {
-					((CmisTypeRelationshipDefinitionType) result).getAllowedSourceTypes().add(type);
-				}
-			}
-
-			if (relationshipTypeDefinition.getAllowedTargetTypeIds() != null) {
-				for (String type : relationshipTypeDefinition.getAllowedTargetTypeIds()) {
-					((CmisTypeRelationshipDefinitionType) result).getAllowedTargetTypes().add(type);
-				}
-			}
-		} else if (typeDefinition instanceof PolicyTypeDefinition) {
-			result = new CmisTypePolicyDefinitionType();
-		} else {
-			return null;
-		}
-
-		result.setBaseId(convert(EnumBaseObjectTypeIds.class, typeDefinition.getBaseTypeId()));
-		result.setControllableACL(convertBoolean(typeDefinition.isControllableAcl(), false));
-		result.setControllablePolicy(convertBoolean(typeDefinition.isControllablePolicy(), false));
-		result.setCreatable(convertBoolean(typeDefinition.isCreatable(), false));
-		result.setDescription(typeDefinition.getDescription());
-		result.setDisplayName(typeDefinition.getDisplayName());
-		result.setFileable(convertBoolean(typeDefinition.isFileable(), false));
-		result.setFulltextIndexed(convertBoolean(typeDefinition.isFulltextIndexed(), false));
-		result.setId(typeDefinition.getId());
-		result.setIncludedInSupertypeQuery(convertBoolean(typeDefinition.isIncludedInSupertypeQuery(), false));
-		result.setLocalName(typeDefinition.getLocalName());
-		result.setLocalNamespace(typeDefinition.getLocalNamespace());
-		result.setParentId(typeDefinition.getParentTypeId());
-		result.setQueryable(convertBoolean(typeDefinition.isQueryable(), false));
-		result.setQueryName(typeDefinition.getQueryName());
-
-		if (typeDefinition.getPropertyDefinitions() != null) {
-			for (PropertyDefinition<?> propDef : typeDefinition.getPropertyDefinitions().values()) {
-				result.getPropertyDefinition().add(convert(propDef));
-			}
-		}
-
-		// handle extensions
-		convertExtension(typeDefinition, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a property definition object.
-	 */
-	public static CmisPropertyDefinitionType convert(PropertyDefinition<?> propertyDefinition) {
-		if (propertyDefinition == null) {
-			return null;
-		}
-
-		CmisPropertyDefinitionType result = null;
-
-		if (propertyDefinition instanceof PropertyStringDefinition) {
-			result = new CmisPropertyStringDefinitionType();
-
-			PropertyStringDefinition source = (PropertyStringDefinition) propertyDefinition;
-			CmisPropertyStringDefinitionType target = (CmisPropertyStringDefinitionType) result;
-
-			convertChoiceStringList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyString defaultValue = new CmisPropertyString();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (String value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-
-			// specific
-			target.setMaxLength(source.getMaxLength());
-		} else if (propertyDefinition instanceof PropertyIdDefinition) {
-			result = new CmisPropertyIdDefinitionType();
-
-			PropertyIdDefinition source = (PropertyIdDefinition) propertyDefinition;
-			CmisPropertyIdDefinitionType target = (CmisPropertyIdDefinitionType) result;
-
-			convertChoiceIdList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyId defaultValue = new CmisPropertyId();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (String value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-		} else if (propertyDefinition instanceof PropertyIntegerDefinition) {
-			result = new CmisPropertyIntegerDefinitionType();
-
-			PropertyIntegerDefinition source = (PropertyIntegerDefinition) propertyDefinition;
-			CmisPropertyIntegerDefinitionType target = (CmisPropertyIntegerDefinitionType) result;
-
-			convertChoiceIntegerList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyInteger defaultValue = new CmisPropertyInteger();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (BigInteger value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-
-			// specific
-			target.setMinValue(source.getMinValue());
-			target.setMaxValue(source.getMaxValue());
-		} else if (propertyDefinition instanceof PropertyDecimalDefinition) {
-			result = new CmisPropertyDecimalDefinitionType();
-
-			PropertyDecimalDefinition source = (PropertyDecimalDefinition) propertyDefinition;
-			CmisPropertyDecimalDefinitionType target = (CmisPropertyDecimalDefinitionType) result;
-
-			convertChoiceDecimalList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyDecimal defaultValue = new CmisPropertyDecimal();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (BigDecimal value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-
-			// specific
-			target.setMinValue(source.getMinValue());
-			target.setMaxValue(source.getMaxValue());
-			if (source.getPrecision() != null) {
-				target.setPrecision(source.getPrecision().value());
-			}
-		} else if (propertyDefinition instanceof PropertyBooleanDefinition) {
-			result = new CmisPropertyBooleanDefinitionType();
-
-			PropertyBooleanDefinition source = (PropertyBooleanDefinition) propertyDefinition;
-			CmisPropertyBooleanDefinitionType target = (CmisPropertyBooleanDefinitionType) result;
-
-			convertChoiceBooleanList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyBoolean defaultValue = new CmisPropertyBoolean();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (Boolean value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-		} else if (propertyDefinition instanceof PropertyDateTimeDefinition) {
-			result = new CmisPropertyDateTimeDefinitionType();
-
-			PropertyDateTimeDefinition source = (PropertyDateTimeDefinition) propertyDefinition;
-			CmisPropertyDateTimeDefinitionType target = (CmisPropertyDateTimeDefinitionType) result;
-
-			convertChoiceDateTimeList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyDateTime defaultValue = new CmisPropertyDateTime();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (XMLGregorianCalendar value : convertCalendar(source.getDefaultValue())) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-
-			// specific
-			target.setResolution(convert(EnumDateTimeResolution.class, source.getDateTimeResolution()));
-		} else if (propertyDefinition instanceof PropertyHtmlDefinition) {
-			result = new CmisPropertyHtmlDefinitionType();
-
-			PropertyHtmlDefinition source = (PropertyHtmlDefinition) propertyDefinition;
-			CmisPropertyHtmlDefinitionType target = (CmisPropertyHtmlDefinitionType) result;
-
-			convertChoiceHtmlList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyHtml defaultValue = new CmisPropertyHtml();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (String value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-		} else if (propertyDefinition instanceof PropertyUriDefinition) {
-			result = new CmisPropertyUriDefinitionType();
-
-			PropertyUriDefinition source = (PropertyUriDefinition) propertyDefinition;
-			CmisPropertyUriDefinitionType target = (CmisPropertyUriDefinitionType) result;
-
-			convertChoiceUriList(source.getChoices(), target.getChoice());
-
-			if (source.getDefaultValue() != null) {
-				CmisPropertyUri defaultValue = new CmisPropertyUri();
-				defaultValue.setPropertyDefinitionId(propertyDefinition.getId());
-				for (String value : source.getDefaultValue()) {
-					defaultValue.getValue().add(value);
-				}
-				target.setDefaultValue(defaultValue);
-			}
-		} else {
-			return null;
-		}
-
-		result.setCardinality(convert(EnumCardinality.class, propertyDefinition.getCardinality()));
-		result.setDescription(propertyDefinition.getDescription());
-		result.setDisplayName(propertyDefinition.getDisplayName());
-		result.setId(propertyDefinition.getId());
-		result.setInherited(propertyDefinition.isInherited());
-		result.setLocalName(propertyDefinition.getLocalName());
-		result.setLocalNamespace(propertyDefinition.getLocalNamespace());
-		result.setOpenChoice(propertyDefinition.isOpenChoice());
-		result.setOrderable(convertBoolean(propertyDefinition.isOrderable(), false));
-		result.setPropertyType(convert(EnumPropertyType.class, propertyDefinition.getPropertyType()));
-		result.setQueryable(convertBoolean(propertyDefinition.isQueryable(), false));
-		result.setQueryName(propertyDefinition.getQueryName());
-		result.setRequired(convertBoolean(propertyDefinition.isRequired(), false));
-		result.setUpdatability(convert(EnumUpdatability.class, propertyDefinition.getUpdatability()));
-
-		// handle extensions
-		convertExtension(propertyDefinition, result);
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Choices ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<String>> convertChoiceStringList(List<CmisChoiceString> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-		for (CmisChoiceString choice : choices) {
-			ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-			newChoice.setChoice(convertChoiceStringList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceStringList(List<Choice<String>> choices, List<CmisChoiceString> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<String> choice : choices) {
-			CmisChoiceString newChoice = new CmisChoiceString();
-
-			convertChoiceStringList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (String value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<String>> convertChoiceIdList(List<CmisChoiceId> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-		for (CmisChoiceId choice : choices) {
-			ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-			newChoice.setChoice(convertChoiceIdList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceIdList(List<Choice<String>> choices, List<CmisChoiceId> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<String> choice : choices) {
-			CmisChoiceId newChoice = new CmisChoiceId();
-
-			convertChoiceIdList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (String value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<BigInteger>> convertChoiceIntegerList(List<CmisChoiceInteger> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<BigInteger>> result = new ArrayList<Choice<BigInteger>>();
-
-		for (CmisChoiceInteger choice : choices) {
-			ChoiceImpl<BigInteger> newChoice = new ChoiceImpl<BigInteger>();
-
-			newChoice.setChoice(convertChoiceIntegerList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceIntegerList(List<Choice<BigInteger>> choices, List<CmisChoiceInteger> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<BigInteger> choice : choices) {
-			CmisChoiceInteger newChoice = new CmisChoiceInteger();
-
-			convertChoiceIntegerList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (BigInteger value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<BigDecimal>> convertChoiceDecimalList(List<CmisChoiceDecimal> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<BigDecimal>> result = new ArrayList<Choice<BigDecimal>>();
-
-		for (CmisChoiceDecimal choice : choices) {
-			ChoiceImpl<BigDecimal> newChoice = new ChoiceImpl<BigDecimal>();
-
-			newChoice.setChoice(convertChoiceDecimalList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceDecimalList(List<Choice<BigDecimal>> choices, List<CmisChoiceDecimal> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<BigDecimal> choice : choices) {
-			CmisChoiceDecimal newChoice = new CmisChoiceDecimal();
-
-			convertChoiceDecimalList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (BigDecimal value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<Boolean>> convertChoiceBooleanList(List<CmisChoiceBoolean> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<Boolean>> result = new ArrayList<Choice<Boolean>>();
-
-		for (CmisChoiceBoolean choice : choices) {
-			ChoiceImpl<Boolean> newChoice = new ChoiceImpl<Boolean>();
-
-			newChoice.setChoice(convertChoiceBooleanList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceBooleanList(List<Choice<Boolean>> choices, List<CmisChoiceBoolean> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<Boolean> choice : choices) {
-			CmisChoiceBoolean newChoice = new CmisChoiceBoolean();
-
-			convertChoiceBooleanList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (Boolean value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<GregorianCalendar>> convertChoiceDateTimeList(List<CmisChoiceDateTime> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<GregorianCalendar>> result = new ArrayList<Choice<GregorianCalendar>>();
-
-		for (CmisChoiceDateTime choice : choices) {
-			ChoiceImpl<GregorianCalendar> newChoice = new ChoiceImpl<GregorianCalendar>();
-
-			newChoice.setChoice(convertChoiceDateTimeList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(convertXMLCalendar(choice.getValue()));
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceDateTimeList(List<Choice<GregorianCalendar>> choices,
-			List<CmisChoiceDateTime> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<GregorianCalendar> choice : choices) {
-			CmisChoiceDateTime newChoice = new CmisChoiceDateTime();
-
-			convertChoiceDateTimeList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (XMLGregorianCalendar value : convertCalendar(choice.getValue())) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<String>> convertChoiceHtmlList(List<CmisChoiceHtml> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-		for (CmisChoiceHtml choice : choices) {
-			ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-			newChoice.setChoice(convertChoiceHtmlList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceHtmlList(List<Choice<String>> choices, List<CmisChoiceHtml> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<String> choice : choices) {
-			CmisChoiceHtml newChoice = new CmisChoiceHtml();
-
-			convertChoiceHtmlList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (String value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static List<Choice<String>> convertChoiceUriList(List<CmisChoiceUri> choices) {
-		if (choices == null) {
-			return null;
-		}
-
-		List<Choice<String>> result = new ArrayList<Choice<String>>();
-
-		for (CmisChoiceUri choice : choices) {
-			ChoiceImpl<String> newChoice = new ChoiceImpl<String>();
-
-			newChoice.setChoice(convertChoiceUriList(choice.getChoice()));
-			newChoice.setDisplayName(choice.getDisplayName());
-			newChoice.setValue(choice.getValue());
-
-			result.add(newChoice);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a choices list.
-	 */
-	private static void convertChoiceUriList(List<Choice<String>> choices, List<CmisChoiceUri> target) {
-		if (choices == null) {
-			return;
-		}
-
-		for (Choice<String> choice : choices) {
-			CmisChoiceUri newChoice = new CmisChoiceUri();
-
-			convertChoiceUriList(choice.getChoice(), newChoice.getChoice());
-			newChoice.setDisplayName(choice.getDisplayName());
-
-			if (choice.getValue() != null) {
-				for (String value : choice.getValue()) {
-					newChoice.getValue().add(value);
-				}
-			}
-
-			target.add(newChoice);
-		}
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Objects ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a CMIS object.
-	 */
-	public static ObjectData convert(CmisObjectType object) {
-		if (object == null) {
-			return null;
-		}
-
-		ObjectDataImpl result = new ObjectDataImpl();
-
-		result.setAcl(convert(object.getAcl(), object.isExactACL()));
-		result.setAllowableActions(convert(object.getAllowableActions()));
-		if (object.getChangeEventInfo() != null) {
-			ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl();
-			if (object.getChangeEventInfo().getChangeTime() != null) {
-				changeEventInfo.setChangeTime(object.getChangeEventInfo().getChangeTime().toGregorianCalendar());
-			}
-			changeEventInfo.setChangeType(convert(ChangeType.class, object.getChangeEventInfo().getChangeType()));
-			convertExtension(object.getChangeEventInfo(), changeEventInfo);
-
-			result.setChangeEventInfo(changeEventInfo);
-		}
-		result.setIsExactAcl(object.isExactACL());
-		result.setPolicyIds(convert(object.getPolicyIds()));
-		result.setProperties(convert(object.getProperties()));
-		List<ObjectData> relationships = new ArrayList<ObjectData>();
-		for (CmisObjectType cmisObject : object.getRelationship()) {
-			relationships.add(convert(cmisObject));
-		}
-		result.setRelationships(relationships);
-		List<RenditionData> renditions = new ArrayList<RenditionData>();
-		for (CmisRenditionType rendition : object.getRendition()) {
-			renditions.add(convert(rendition));
-		}
-		result.setRenditions(renditions);
-
-		// handle extensions
-		convertExtension(object, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a properties object.
-	 */
-	public static Properties convert(CmisPropertiesType properties) {
-		if (properties == null) {
-			return null;
-		}
-
-		PropertiesImpl result = new PropertiesImpl();
-
-		for (CmisProperty property : properties.getProperty()) {
-			result.addProperty(convert(property));
-		}
-
-		// handle extensions
-		convertExtension(properties, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a property object.
-	 */
-	public static PropertyData<?> convert(CmisProperty property) {
-		if (property == null) {
-			return null;
-		}
-
-		PropertyData<?> result = null;
-
-		if (property instanceof CmisPropertyString) {
-			result = new PropertyStringImpl(property.getPropertyDefinitionId(), ((CmisPropertyString) property)
-					.getValue());
-		} else if (property instanceof CmisPropertyId) {
-			result = new PropertyIdImpl(property.getPropertyDefinitionId(), ((CmisPropertyId) property).getValue());
-		} else if (property instanceof CmisPropertyInteger) {
-			result = new PropertyIntegerImpl(property.getPropertyDefinitionId(), ((CmisPropertyInteger) property)
-					.getValue());
-		} else if (property instanceof CmisPropertyDecimal) {
-			result = new PropertyDecimalImpl(property.getPropertyDefinitionId(), ((CmisPropertyDecimal) property)
-					.getValue());
-		} else if (property instanceof CmisPropertyBoolean) {
-			result = new PropertyBooleanImpl(property.getPropertyDefinitionId(), ((CmisPropertyBoolean) property)
-					.getValue());
-		} else if (property instanceof CmisPropertyDateTime) {
-			result = new PropertyDateTimeImpl(property.getPropertyDefinitionId(),
-					convertXMLCalendar(((CmisPropertyDateTime) property).getValue()));
-		} else if (property instanceof CmisPropertyHtml) {
-			result = new PropertyHtmlImpl(property.getPropertyDefinitionId(), ((CmisPropertyHtml) property).getValue());
-		} else if (property instanceof CmisPropertyUri) {
-			result = new PropertyUriImpl(property.getPropertyDefinitionId(), ((CmisPropertyUri) property).getValue());
-		} else {
-			return null;
-		}
-
-		((AbstractPropertyData<?>) result).setLocalName(property.getLocalName());
-		((AbstractPropertyData<?>) result).setQueryName(property.getQueryName());
-		((AbstractPropertyData<?>) result).setDisplayName(property.getDisplayName());
-
-		// handle extensions
-		convertExtension(property, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a properties object.
-	 */
-	public static CmisPropertiesType convert(Properties properties) {
-		if (properties == null) {
-			return null;
-		}
-
-		CmisPropertiesType result = new CmisPropertiesType();
-
-		if (properties.getProperties() != null) {
-			for (PropertyData<?> property : properties.getProperties().values()) {
-				result.getProperty().add(convert(property));
-			}
-		}
-
-		// handle extensions
-		convertExtension(properties, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a property object.
-	 */
-	public static CmisProperty convert(PropertyData<?> property) {
-		if (property == null) {
-			return null;
-		}
-
-		CmisProperty result = null;
-
-		if (property instanceof PropertyString) {
-			result = new CmisPropertyString();
-			((CmisPropertyString) result).getValue().addAll(((PropertyString) property).getValues());
-		} else if (property instanceof PropertyId) {
-			result = new CmisPropertyId();
-			((CmisPropertyId) result).getValue().addAll(((PropertyId) property).getValues());
-		} else if (property instanceof PropertyInteger) {
-			result = new CmisPropertyInteger();
-			((CmisPropertyInteger) result).getValue().addAll(((PropertyInteger) property).getValues());
-		} else if (property instanceof PropertyDecimal) {
-			result = new CmisPropertyDecimal();
-			((CmisPropertyDecimal) result).getValue().addAll(((PropertyDecimal) property).getValues());
-		} else if (property instanceof PropertyBoolean) {
-			result = new CmisPropertyBoolean();
-			((CmisPropertyBoolean) result).getValue().addAll(((PropertyBoolean) property).getValues());
-		} else if (property instanceof PropertyDateTime) {
-			result = new CmisPropertyDateTime();
-			((CmisPropertyDateTime) result).getValue().addAll(
-					convertCalendar(((PropertyDateTime) property).getValues()));
-		} else if (property instanceof PropertyHtml) {
-			result = new CmisPropertyHtml();
-			((CmisPropertyHtml) result).getValue().addAll(((PropertyHtml) property).getValues());
-		} else if (property instanceof PropertyUri) {
-			result = new CmisPropertyUri();
-			((CmisPropertyUri) result).getValue().addAll(((PropertyUri) property).getValues());
-		} else {
-			return null;
-		}
-
-		result.setPropertyDefinitionId(property.getId());
-		result.setLocalName(property.getLocalName());
-		result.setQueryName(property.getQueryName());
-		result.setDisplayName(property.getDisplayName());
-
-		return result;
-	}
-
-	/**
-	 * Converts a rendition object.
-	 */
-	public static RenditionData convert(CmisRenditionType rendition) {
-		if (rendition == null) {
-			return null;
-		}
-
-		RenditionDataImpl result = new RenditionDataImpl();
-
-		result.setBigHeight(rendition.getHeight());
-		result.setKind(rendition.getKind());
-		result.setBigLength(rendition.getLength());
-		result.setMimeType(rendition.getMimetype());
-		result.setRenditionDocumentId(rendition.getRenditionDocumentId());
-		result.setStreamId(rendition.getStreamId());
-		result.setTitle(rendition.getTitle());
-		result.setBigWidth(rendition.getWidth());
-
-		// handle extensions
-		convertExtension(rendition, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a rendition object.
-	 */
-	public static CmisRenditionType convert(RenditionData rendition) {
-		if (rendition == null) {
-			return null;
-		}
-
-		CmisRenditionType result = new CmisRenditionType();
-
-		result.setHeight(rendition.getBigHeight());
-		result.setKind(rendition.getKind());
-		result.setLength(rendition.getBigLength());
-		result.setMimetype(rendition.getMimeType());
-		result.setRenditionDocumentId(rendition.getRenditionDocumentId());
-		result.setStreamId(rendition.getStreamId());
-		result.setTitle(rendition.getTitle());
-		result.setWidth(rendition.getBigWidth());
-
-		// handle extensions
-		convertExtension(rendition, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a CMIS object.
-	 */
-	public static CmisObjectType convert(ObjectData object) {
-		if (object == null) {
-			return null;
-		}
-
-		CmisObjectType result = new CmisObjectType();
-
-		result.setAcl(convert(object.getAcl()));
-		result.setAllowableActions(convert(object.getAllowableActions()));
-		if (object.getChangeEventInfo() != null) {
-			CmisChangeEventType changeEventInfo = new CmisChangeEventType();
-
-			changeEventInfo
-					.setChangeType(convert(EnumTypeOfChanges.class, object.getChangeEventInfo().getChangeType()));
-			changeEventInfo.setChangeTime(convertCalendar(object.getChangeEventInfo().getChangeTime()));
-
-			convertExtension(object.getChangeEventInfo(), changeEventInfo);
-
-			result.setChangeEventInfo(changeEventInfo);
-		}
-		result.setExactACL(object.getAcl() == null ? null : object.getAcl().isExact());
-		result.setPolicyIds(convert(object.getPolicyIds()));
-		result.setProperties(convert(object.getProperties()));
-		if (object.getRelationships() != null) {
-			for (ObjectData relationship : object.getRelationships()) {
-				result.getRelationship().add(convert(relationship));
-			}
-		}
-		if (object.getRenditions() != null) {
-			for (RenditionData rendition : object.getRenditions()) {
-				result.getRendition().add(convert(rendition));
-			}
-		}
-
-		// handle extensions
-		convertExtension(object, result);
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- ACLs and Policies ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts an ACL object with its ACEs.
-	 */
-	public static Acl convert(CmisAccessControlListType acl, Boolean isExact) {
-		if (acl == null) {
-			return null;
-		}
-
-		AccessControlListImpl result = new AccessControlListImpl();
-
-		List<Ace> aces = new ArrayList<Ace>();
-		for (CmisAccessControlEntryType entry : acl.getPermission()) {
-			if (entry == null) {
-				continue;
-			}
-
-			AccessControlEntryImpl ace = new AccessControlEntryImpl();
-			ace.setDirect(entry.isDirect());
-			ace.setPermissions(entry.getPermission());
-			AccessControlPrincipalDataImpl principal = new AccessControlPrincipalDataImpl(
-					entry.getPrincipal() == null ? null : entry.getPrincipal().getPrincipalId());
-			convertExtension(entry.getPrincipal(), principal);
-			ace.setPrincipal(principal);
-
-			// handle extensions
-			convertExtension(entry, ace);
-
-			aces.add(ace);
-		}
-
-		result.setAces(aces);
-
-		result.setExact(isExact);
-
-		// handle extensions
-		convertExtension(acl, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ACL object with its ACEs.
-	 */
-	public static CmisAccessControlListType convert(Acl acl) {
-		if (acl == null) {
-			return null;
-		}
-
-		CmisAccessControlListType result = new CmisAccessControlListType();
-
-		if (acl.getAces() != null) {
-			for (Ace ace : acl.getAces()) {
-				if (ace == null) {
-					continue;
-				}
-
-				CmisAccessControlEntryType entry = new CmisAccessControlEntryType();
-
-				if (ace.getPrincipal() != null) {
-					CmisAccessControlPrincipalType pincipal = new CmisAccessControlPrincipalType();
-
-					pincipal.setPrincipalId(ace.getPrincipal().getId());
-					convertExtension(pincipal, ace.getPrincipal());
-
-					entry.setPrincipal(pincipal);
-				}
-
-				entry.setDirect(ace.isDirect());
-				entry.getPermission().addAll(ace.getPermissions());
-
-				convertExtension(ace, entry);
-
-				result.getPermission().add(entry);
-			}
-		}
-
-		// handle extensions
-		convertExtension(acl, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an AllowableActions object.
-	 */
-	public static AllowableActions convert(CmisAllowableActionsType allowableActions) {
-		if (allowableActions == null) {
-			return null;
-		}
-
-		AllowableActionsImpl result = new AllowableActionsImpl();
-
-		Set<Action> set = EnumSet.noneOf(Action.class);
-
-		if (Boolean.TRUE.equals(allowableActions.isCanAddObjectToFolder())) {
-			set.add(Action.CAN_ADD_OBJECT_TO_FOLDER);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanApplyACL())) {
-			set.add(Action.CAN_APPLY_ACL);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanApplyPolicy())) {
-			set.add(Action.CAN_APPLY_POLICY);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCancelCheckOut())) {
-			set.add(Action.CAN_CANCEL_CHECK_OUT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCheckIn())) {
-			set.add(Action.CAN_CHECK_IN);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCheckOut())) {
-			set.add(Action.CAN_CHECK_OUT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCreateDocument())) {
-			set.add(Action.CAN_CREATE_DOCUMENT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCreateFolder())) {
-			set.add(Action.CAN_CREATE_FOLDER);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanCreateRelationship())) {
-			set.add(Action.CAN_CREATE_RELATIONSHIP);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanDeleteContentStream())) {
-			set.add(Action.CAN_DELETE_CONTENT_STREAM);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanDeleteObject())) {
-			set.add(Action.CAN_DELETE_OBJECT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanDeleteTree())) {
-			set.add(Action.CAN_DELETE_TREE);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetACL())) {
-			set.add(Action.CAN_GET_ACL);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetAllVersions())) {
-			set.add(Action.CAN_GET_ALL_VERSIONS);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetAppliedPolicies())) {
-			set.add(Action.CAN_GET_APPLIED_POLICIES);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetChildren())) {
-			set.add(Action.CAN_GET_CHILDREN);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetContentStream())) {
-			set.add(Action.CAN_GET_CONTENT_STREAM);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetDescendants())) {
-			set.add(Action.CAN_GET_DESCENDANTS);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetFolderParent())) {
-			set.add(Action.CAN_GET_FOLDER_PARENT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetFolderTree())) {
-			set.add(Action.CAN_GET_FOLDER_TREE);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetObjectParents())) {
-			set.add(Action.CAN_GET_OBJECT_PARENTS);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetObjectRelationships())) {
-			set.add(Action.CAN_GET_OBJECT_RELATIONSHIPS);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetProperties())) {
-			set.add(Action.CAN_GET_PROPERTIES);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanGetRenditions())) {
-			set.add(Action.CAN_GET_RENDITIONS);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanMoveObject())) {
-			set.add(Action.CAN_MOVE_OBJECT);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanRemoveObjectFromFolder())) {
-			set.add(Action.CAN_REMOVE_OBJECT_FROM_FOLDER);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanRemovePolicy())) {
-			set.add(Action.CAN_REMOVE_POLICY);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanSetContentStream())) {
-			set.add(Action.CAN_SET_CONTENT_STREAM);
-		}
-		if (Boolean.TRUE.equals(allowableActions.isCanUpdateProperties())) {
-			set.add(Action.CAN_UPDATE_PROPERTIES);
-		}
-
-		result.setAllowableActions(set);
-
-		// handle extensions
-		convertExtension(allowableActions, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an AllowableActions object.
-	 */
-	public static CmisAllowableActionsType convert(AllowableActions allowableActions) {
-		if (allowableActions == null) {
-			return null;
-		}
-
-		CmisAllowableActionsType result = new CmisAllowableActionsType();
-
-		if (allowableActions.getAllowableActions() != null) {
-			Set<Action> set = allowableActions.getAllowableActions();
-
-			result.setCanAddObjectToFolder(set.contains(Action.CAN_ADD_OBJECT_TO_FOLDER));
-			result.setCanApplyACL(set.contains(Action.CAN_APPLY_ACL));
-			result.setCanApplyPolicy(set.contains(Action.CAN_APPLY_POLICY));
-			result.setCanCancelCheckOut(set.contains(Action.CAN_CANCEL_CHECK_OUT));
-			result.setCanCheckIn(set.contains(Action.CAN_CHECK_IN));
-			result.setCanCheckOut(set.contains(Action.CAN_CHECK_OUT));
-			result.setCanCreateDocument(set.contains(Action.CAN_CREATE_DOCUMENT));
-			result.setCanCreateFolder(set.contains(Action.CAN_CREATE_FOLDER));
-			result.setCanCreateRelationship(set.contains(Action.CAN_CREATE_RELATIONSHIP));
-			result.setCanDeleteContentStream(set.contains(Action.CAN_DELETE_CONTENT_STREAM));
-			result.setCanDeleteObject(set.contains(Action.CAN_DELETE_OBJECT));
-			result.setCanDeleteTree(set.contains(Action.CAN_DELETE_TREE));
-			result.setCanGetACL(set.contains(Action.CAN_GET_ACL));
-			result.setCanGetAllVersions(set.contains(Action.CAN_GET_ALL_VERSIONS));
-			result.setCanGetAppliedPolicies(set.contains(Action.CAN_GET_APPLIED_POLICIES));
-			result.setCanGetChildren(set.contains(Action.CAN_GET_CHILDREN));
-			result.setCanGetContentStream(set.contains(Action.CAN_GET_CONTENT_STREAM));
-			result.setCanGetDescendants(set.contains(Action.CAN_GET_DESCENDANTS));
-			result.setCanGetFolderParent(set.contains(Action.CAN_GET_FOLDER_PARENT));
-			result.setCanGetFolderTree(set.contains(Action.CAN_GET_FOLDER_TREE));
-			result.setCanGetObjectParents(set.contains(Action.CAN_GET_OBJECT_PARENTS));
-			result.setCanGetObjectRelationships(set.contains(Action.CAN_GET_OBJECT_RELATIONSHIPS));
-			result.setCanGetProperties(set.contains(Action.CAN_GET_PROPERTIES));
-			result.setCanGetRenditions(set.contains(Action.CAN_GET_RENDITIONS));
-			result.setCanMoveObject(set.contains(Action.CAN_MOVE_OBJECT));
-			result.setCanRemoveObjectFromFolder(set.contains(Action.CAN_REMOVE_OBJECT_FROM_FOLDER));
-			result.setCanRemovePolicy(set.contains(Action.CAN_REMOVE_POLICY));
-			result.setCanSetContentStream(set.contains(Action.CAN_SET_CONTENT_STREAM));
-			result.setCanUpdateProperties(set.contains(Action.CAN_UPDATE_PROPERTIES));
-
-		}
-
-		// handle extensions
-		convertExtension(allowableActions, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a list of policy ids.
-	 */
-	public static PolicyIdList convert(CmisListOfIdsType policyIds) {
-		if (policyIds == null) {
-			return null;
-		}
-
-		PolicyIdListImpl result = new PolicyIdListImpl();
-		result.setPolicyIds(policyIds.getId());
-
-		// handle extensions
-		convertExtension(policyIds, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a list of policy ids.
-	 */
-	public static CmisListOfIdsType convert(PolicyIdList policyIds) {
-		if (policyIds == null) {
-			return null;
-		}
-
-		CmisListOfIdsType result = new CmisListOfIdsType();
-		if (policyIds.getPolicyIds() != null) {
-			for (String id : policyIds.getPolicyIds()) {
-				result.getId().add(id);
-			}
-		}
-
-		// handle extensions
-		convertExtension(policyIds, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a list of policy ids.
-	 */
-	public static CmisListOfIdsType convertPolicyIds(List<String> policyIds) {
-		if (policyIds == null) {
-			return null;
-		}
-
-		CmisListOfIdsType result = new CmisListOfIdsType();
-		result.getId().addAll(policyIds);
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Lists, containers and similar ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a list of calendar objects.
-	 */
-	public static List<GregorianCalendar> convertXMLCalendar(List<XMLGregorianCalendar> calendar) {
-		if (calendar == null) {
-			return null;
-		}
-
-		List<GregorianCalendar> result = new ArrayList<GregorianCalendar>();
-		for (XMLGregorianCalendar cal : calendar) {
-			result.add(cal.toGregorianCalendar());
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a list of calendar objects.
-	 */
-	public static List<XMLGregorianCalendar> convertCalendar(List<GregorianCalendar> calendar) {
-		if (calendar == null) {
-			return null;
-		}
-
-		DatatypeFactory df;
-		try {
-			df = DatatypeFactory.newInstance();
-		} catch (DatatypeConfigurationException e) {
-			throw new CmisRuntimeException("Convert exception: " + e.getMessage(), e);
-		}
-
-		List<XMLGregorianCalendar> result = new ArrayList<XMLGregorianCalendar>();
-		for (GregorianCalendar cal : calendar) {
-			result.add(df.newXMLGregorianCalendar(cal));
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a calendar object.
-	 */
-	public static XMLGregorianCalendar convertCalendar(GregorianCalendar calendar) {
-		if (calendar == null) {
-			return null;
-		}
-
-		DatatypeFactory df;
-		try {
-			df = DatatypeFactory.newInstance();
-		} catch (DatatypeConfigurationException e) {
-			throw new CmisRuntimeException("Convert exception: " + e.getMessage(), e);
-		}
-
-		return df.newXMLGregorianCalendar(calendar);
-	}
-
-	/**
-	 * Converts a type list.
-	 */
-	public static TypeDefinitionList convert(CmisTypeDefinitionListType typeList) {
-		if (typeList == null) {
-			return null;
-		}
-
-		TypeDefinitionListImpl result = new TypeDefinitionListImpl();
-		List<TypeDefinition> types = new ArrayList<TypeDefinition>();
-		for (CmisTypeDefinitionType typeDefinition : typeList.getTypes()) {
-			types.add(convert(typeDefinition));
-		}
-
-		result.setList(types);
-		result.setHasMoreItems(typeList.isHasMoreItems());
-		result.setNumItems(typeList.getNumItems());
-
-		// handle extensions
-		convertExtension(typeList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a type list.
-	 */
-	public static CmisTypeDefinitionListType convert(TypeDefinitionList typeList) {
-		if (typeList == null) {
-			return null;
-		}
-
-		CmisTypeDefinitionListType result = new CmisTypeDefinitionListType();
-
-		if (typeList.getList() != null) {
-			for (TypeDefinition tdd : typeList.getList()) {
-				result.getTypes().add(convert(tdd));
-			}
-		}
-
-		result.setHasMoreItems(convertBoolean(typeList.hasMoreItems(), false));
-		result.setNumItems(typeList.getNumItems());
-
-		// handle extensions
-		convertExtension(typeList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a type container list.
-	 */
-	public static List<TypeDefinitionContainer> convertTypeContainerList(List<CmisTypeContainer> typeContainers) {
-		if (typeContainers == null) {
-			return null;
-		}
-
-		List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
-		for (CmisTypeContainer container : typeContainers) {
-			TypeDefinitionContainerImpl newConatiner = new TypeDefinitionContainerImpl();
-			newConatiner.setTypeDefinition(convert(container.getType()));
-			newConatiner.setChildren(convertTypeContainerList(container.getChildren()));
-			convertExtension(container, newConatiner);
-
-			result.add(newConatiner);
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a type container list.
-	 */
-	public static void convertTypeContainerList(List<TypeDefinitionContainer> typeContainers,
-			List<CmisTypeContainer> target) {
-		if (typeContainers == null) {
-			return;
-		}
-
-		for (TypeDefinitionContainer container : typeContainers) {
-			CmisTypeContainer newConatiner = new CmisTypeContainer();
-			newConatiner.setType(convert(container.getTypeDefinition()));
-			convertTypeContainerList(container.getChildren(), newConatiner.getChildren());
-			convertExtension(container, newConatiner);
-
-			target.add(newConatiner);
-		}
-	}
-
-	/**
-	 * Converts an ObjectInFolder object.
-	 */
-	public static ObjectInFolderData convert(CmisObjectInFolderType objectInFolder) {
-		if (objectInFolder == null) {
-			return null;
-		}
-
-		ObjectInFolderDataImpl result = new ObjectInFolderDataImpl();
-
-		result.setObject(convert(objectInFolder.getObject()));
-		result.setPathSegment(objectInFolder.getPathSegment());
-
-		// handle extensions
-		convertExtension(objectInFolder, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectInFolder object.
-	 */
-	public static CmisObjectInFolderType convert(ObjectInFolderData objectInFolder) {
-		if (objectInFolder == null) {
-			return null;
-		}
-
-		CmisObjectInFolderType result = new CmisObjectInFolderType();
-
-		result.setObject(convert(objectInFolder.getObject()));
-		result.setPathSegment(objectInFolder.getPathSegment());
-
-		// handle extensions
-		convertExtension(objectInFolder, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectParent object.
-	 */
-	public static ObjectParentData convert(CmisObjectParentsType objectParent) {
-		if (objectParent == null) {
-			return null;
-		}
-
-		ObjectParentDataImpl result = new ObjectParentDataImpl();
-
-		result.setObject(convert(objectParent.getObject()));
-		result.setRelativePathSegment(objectParent.getRelativePathSegment());
-
-		// handle extensions
-		convertExtension(objectParent, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectParent object.
-	 */
-	public static CmisObjectParentsType convert(ObjectParentData objectParent) {
-		if (objectParent == null) {
-			return null;
-		}
-
-		CmisObjectParentsType result = new CmisObjectParentsType();
-
-		result.setObject(convert(objectParent.getObject()));
-		result.setRelativePathSegment(objectParent.getRelativePathSegment());
-
-		// handle extensions
-		convertExtension(objectParent, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectInFolder list object.
-	 */
-	public static ObjectInFolderList convert(CmisObjectInFolderListType objectInFolderList) {
-		if (objectInFolderList == null) {
-			return null;
-		}
-
-		ObjectInFolderListImpl result = new ObjectInFolderListImpl();
-		List<ObjectInFolderData> objects = new ArrayList<ObjectInFolderData>();
-		for (CmisObjectInFolderType object : objectInFolderList.getObjects()) {
-			objects.add(convert(object));
-		}
-
-		result.setObjects(objects);
-
-		result.setHasMoreItems(objectInFolderList.isHasMoreItems());
-		result.setNumItems(objectInFolderList.getNumItems());
-
-		// handle extensions
-		convertExtension(objectInFolderList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectInFolder list object.
-	 */
-	public static CmisObjectInFolderListType convert(ObjectInFolderList objectInFolderList) {
-		if (objectInFolderList == null) {
-			return null;
-		}
-
-		CmisObjectInFolderListType result = new CmisObjectInFolderListType();
-
-		if (objectInFolderList.getObjects() != null) {
-			for (ObjectInFolderData object : objectInFolderList.getObjects()) {
-				result.getObjects().add(convert(object));
-			}
-		}
-
-		result.setHasMoreItems(objectInFolderList.hasMoreItems());
-		result.setNumItems(objectInFolderList.getNumItems());
-
-		// handle extensions
-		convertExtension(objectInFolderList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an Object list object.
-	 */
-	public static ObjectList convert(CmisObjectListType objectList) {
-		if (objectList == null) {
-			return null;
-		}
-
-		ObjectListImpl result = new ObjectListImpl();
-
-		List<ObjectData> objects = new ArrayList<ObjectData>();
-		for (CmisObjectType object : objectList.getObjects()) {
-			objects.add(convert(object));
-		}
-
-		result.setObjects(objects);
-		result.setHasMoreItems(objectList.isHasMoreItems());
-		result.setNumItems(objectList.getNumItems());
-
-		// handle extensions
-		convertExtension(objectList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an Object list object.
-	 */
-	public static CmisObjectListType convert(ObjectList objectList) {
-		if (objectList == null) {
-			return null;
-		}
-
-		CmisObjectListType result = new CmisObjectListType();
-
-		if (objectList.getObjects() != null) {
-			for (ObjectData object : objectList.getObjects()) {
-				result.getObjects().add(convert(object));
-			}
-		}
-
-		result.setHasMoreItems(objectList.hasMoreItems());
-		result.setNumItems(objectList.getNumItems());
-
-		// handle extensions
-		convertExtension(objectList, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectInFolder container object.
-	 */
-	public static ObjectInFolderContainer convert(CmisObjectInFolderContainerType container) {
-		if (container == null) {
-			return null;
-		}
-
-		ObjectInFolderContainerImpl result = new ObjectInFolderContainerImpl();
-
-		result.setObject(convert(container.getObjectInFolder()));
-
-		List<ObjectInFolderContainer> containerList = new ArrayList<ObjectInFolderContainer>();
-		for (CmisObjectInFolderContainerType containerChild : container.getChildren()) {
-			containerList.add(convert(containerChild));
-		}
-
-		result.setChildren(containerList);
-
-		// handle extensions
-		convertExtension(container, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an ObjectInFolder container object.
-	 */
-	public static CmisObjectInFolderContainerType convert(ObjectInFolderContainer container) {
-		if (container == null) {
-			return null;
-		}
-
-		CmisObjectInFolderContainerType result = new CmisObjectInFolderContainerType();
-
-		result.setObjectInFolder(convert(container.getObject()));
-
-		if (container.getChildren() != null) {
-			for (ObjectInFolderContainer child : container.getChildren()) {
-				result.getChildren().add(convert(child));
-			}
-		}
-
-		// handle extensions
-		convertExtension(container, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts an access control list object.
-	 */
-	public static Acl convert(CmisACLType acl) {
-		Acl result = convert(acl.getACL(), acl.isExact());
-
-		// handle extensions
-		convertExtension(acl, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a FailedToDelete object.
-	 */
-	public static FailedToDeleteData convert(DeleteTreeResponse.FailedToDelete failedToDelete) {
-		if (failedToDelete == null) {
-			return null;
-		}
-
-		FailedToDeleteDataImpl result = new FailedToDeleteDataImpl();
-
-		result.setIds(failedToDelete.getObjectIds());
-
-		// handle extensions
-		convertExtension(failedToDelete, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a FailedToDelete object.
-	 */
-	public static DeleteTreeResponse.FailedToDelete convert(FailedToDeleteData failedToDelete) {
-		if (failedToDelete == null) {
-			return null;
-		}
-
-		DeleteTreeResponse.FailedToDelete result = new DeleteTreeResponse.FailedToDelete();
-
-		if (failedToDelete.getIds() != null) {
-			for (String id : failedToDelete.getIds()) {
-				result.getObjectIds().add(id);
-			}
-		}
-
-		// handle extensions
-		convertExtension(failedToDelete, result);
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Stream ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a content stream object.
-	 */
-	public static ContentStream convert(CmisContentStreamType contentStream) {
-		if (contentStream == null) {
-			return null;
-		}
-
-		ContentStreamImpl result = new ContentStreamImpl();
-
-		result.setFileName(contentStream.getFilename());
-		result.setLength(contentStream.getLength());
-		result.setMimeType(contentStream.getMimeType());
-		if (contentStream.getStream() != null) {
-			try {
-				if (contentStream.getStream() instanceof StreamingDataHandler) {
-					result.setStream(((StreamingDataHandler) contentStream.getStream()).readOnce());
-				} else {
-					result.setStream(contentStream.getStream().getInputStream());
-				}
-			} catch (IOException e) {
-				throw new CmisRuntimeException("Could not get the stream: " + e.getMessage(), e);
-			}
-		}
-
-		// handle extensions
-		convertExtension(contentStream, result);
-
-		return result;
-	}
-
-	/**
-	 * Converts a content stream object.
-	 */
-	public static CmisContentStreamType convert(final ContentStream contentStream) {
-		if (contentStream == null) {
-			return null;
-		}
-
-		CmisContentStreamType result = new CmisContentStreamType();
-
-		result.setFilename(contentStream.getFileName());
-		result.setLength(contentStream.getBigLength());
-		result.setMimeType(contentStream.getMimeType());
-
-		result.setStream(new DataHandler(new DataSource() {
-
-			public OutputStream getOutputStream() throws IOException {
-				return null;
-			}
-
-			public String getName() {
-				return contentStream.getFileName();
-			}
-
-			public InputStream getInputStream() throws IOException {
-				return contentStream.getStream();
-			}
-
-			public String getContentType() {
-				return contentStream.getMimeType();
-			}
-		}));
-
-		return result;
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Extensions and holders ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts a provider extension into a Web Services extension.
-	 */
-	public static CmisExtensionType convert(ExtensionsData extension) {
-		if (extension == null) {
-			return null;
-		}
-
-		CmisExtensionType result = new CmisExtensionType();
-
-		if (extension.getExtensions() != null) {
-			for (Object obj : extension.getExtensions()) {
-				result.getAny().add(obj);
-			}
-		}
-
-		return result;
-	}
-
-	/**
-	 * Converts a provider extension into a Web Services extension holder.
-	 */
-	public static javax.xml.ws.Holder<CmisExtensionType> convertExtensionHolder(ExtensionsData extension) {
-		if (extension == null) {
-			return null;
-		}
-
-		javax.xml.ws.Holder<CmisExtensionType> result = new javax.xml.ws.Holder<CmisExtensionType>();
-		result.value = convert(extension);
-
-		return result;
-	}
-
-	/**
-	 * Copies a holder value.
-	 */
-	public static void setExtensionValues(javax.xml.ws.Holder<CmisExtensionType> source, ExtensionsData target) {
-		if (target == null) {
-			return;
-		}
-		target.setExtensions(null);
-
-		if ((source == null) || (source.value == null)) {
-			return;
-		}
-
-		List<Object> list = new ArrayList<Object>();
-		target.setExtensions(list);
-
-		if (!source.value.getAny().isEmpty()) {
-			for (Object obj : source.value.getAny()) {
-				list.add(obj);
-			}
-		}
-	}
-
-	/**
-	 * Converts a Web Services extension extension into a provider holder.
-	 */
-	public static ExtensionsData convertExtensionHolder(javax.xml.ws.Holder<CmisExtensionType> extension) {
-		if (extension == null) {
-			return null;
-		}
-
-		return convert(extension.value);
-	}
-
-	/**
-	 * Copies a holder value.
-	 */
-	public static void setExtensionValues(ExtensionsData source, javax.xml.ws.Holder<CmisExtensionType> target) {
-		if ((target == null) || (target.value == null)) {
-			return;
-		}
-		target.value.getAny().clear();
-
-		if ((source == null) || (source.getExtensions() == null)) {
-			return;
-		}
-
-		if (source.getExtensions() != null) {
-			for (Object ext : source.getExtensions()) {
-				target.value.getAny().add(ext);
-			}
-		}
-	}
-
-	/**
-	 * Converts a holder into a WS holder.
-	 */
-	public static <T> javax.xml.ws.Holder<T> convertHolder(Holder<T> orgHolder) {
-		if (orgHolder == null) {
-			return null;
-		}
-
-		javax.xml.ws.Holder<T> result = new javax.xml.ws.Holder<T>();
-		result.value = orgHolder.getValue();
-
-		return result;
-	}
-
-	/**
-	 * Converts a WS holder into a holder.
-	 */
-	public static <T> Holder<T> convertHolder(javax.xml.ws.Holder<T> orgHolder) {
-		if (orgHolder == null) {
-			return null;
-		}
-
-		Holder<T> result = new Holder<T>();
-		result.setValue(orgHolder.value);
-
-		return result;
-	}
-
-	/**
-	 * Copies a holder value for a WS holder to a holder.
-	 */
-	public static <T> void setHolderValue(javax.xml.ws.Holder<T> source, Holder<T> target) {
-		if ((source == null) || (target == null)) {
-			return;
-		}
-
-		target.setValue(source.value);
-	}
-
-	/**
-	 * Copies a holder value for a holder to a WS holder.
-	 */
-	public static <T> void setHolderValue(Holder<T> source, javax.xml.ws.Holder<T> target) {
-		if ((source == null) || (target == null)) {
-			return;
-		}
-
-		target.value = source.getValue();
-	}
-
-	@SuppressWarnings("unchecked")
-	public static void convertExtension(Object source, ExtensionsData target) {
-		if (source == null) {
-			return;
-		}
-
-		try {
-			Method m = source.getClass().getMethod("getAny", new Class<?>[0]);
-			List<Object> list = (List<Object>) m.invoke(source, new Object[0]);
-
-			if (!list.isEmpty()) {
-				target.setExtensions(list);
-			} else {
-				target.setExtensions(null);
-			}
-		} catch (NoSuchMethodException e) {
-		} catch (Exception e) {
-			throw new CmisRuntimeException("Exception: " + e.getMessage(), e);
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	public static void convertExtension(ExtensionsData source, Object target) {
-		if (source == null) {
-			return;
-		}
-
-		try {
-			Method m = source.getClass().getMethod("getAny", new Class<?>[0]);
-			List<Object> list = (List<Object>) m.invoke(source, new Object[0]);
-
-			list.clear();
-			if (source.getExtensions() != null) {
-				list.addAll(source.getExtensions());
-			}
-		} catch (NoSuchMethodException e) {
-		} catch (Exception e) {
-			throw new CmisRuntimeException("Exception: " + e.getMessage(), e);
-		}
-	}
-
-	/**
-	 * Converts an extension object.
-	 */
-	public static ExtensionsData convert(CmisExtensionType extension) {
-		if (extension == null) {
-			return null;
-		}
-
-		ExtensionDataImpl result = new ExtensionDataImpl();
-		result.setExtensions(extension.getAny());
-
-		return result;
-	}
-
-	private static boolean convertBoolean(Boolean value, boolean def) {
-		return (value == null ? def : value.booleanValue());
-	}
-
-	// -------------------------------------------------------------------------
-	// --- Enums ---
-	// -------------------------------------------------------------------------
-
-	/**
-	 * Converts an Enum.
-	 */
-	public static <T extends Enum<T>> T convert(Class<T> destClass, Enum<?> source) {
-		if (source == null) {
-			return null;
-		}
+    /**
+     * Private constructor.
+     */
+    private Converter() {
+    }
+
+    // -------------------------------------------------------------------------
+    // --- Repository Info ---
+    // -------------------------------------------------------------------------
+
+    /**
+     * Converts a repository info object.
+     */
+    public static RepositoryInfo convert(CmisRepositoryInfoType repositoryInfo) {
+        if (repositoryInfo == null) {
+            return null;
+        }
+
+        RepositoryInfoImpl result = new RepositoryInfoImpl();
+
+        result.setAclCapabilities(convert(repositoryInfo.getAclCapability()));
+        result.setChangesIncomplete(repositoryInfo.isChangesIncomplete());
+        List<BaseTypeId> baseObjectTypeIds = new ArrayList<BaseTypeId>();
+        for (EnumBaseObjectTypeIds bot : repositoryInfo.getChangesOnType()) {
+            baseObjectTypeIds.add(convert(BaseTypeId.class, bot));
+        }
+        result.setChangesOnType(baseObjectTypeIds);
+        result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
+        result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
+        result.setPrincipalAnonymous(repositoryInfo.getPrincipalAnonymous());
+        result.setPrincipalAnyone(repositoryInfo.getPrincipalAnyone());
+        result.setProductName(repositoryInfo.getProductName());
+        result.setProductVersion(repositoryInfo.getProductVersion());
+        result.setRepositoryCapabilities(convert(repositoryInfo.getCapabilities()));
+        result.setRepositoryDescription(repositoryInfo.getRepositoryDescription());
+        result.setRepositoryId(repositoryInfo.getRepositoryId());
+        result.setRepositoryName(repositoryInfo.getRepositoryName());
+        result.setRootFolder(repositoryInfo.getRootFolderId());
+        result.setThinClientUri(repositoryInfo.getThinClientURI());
+        result.setVendorName(repositoryInfo.getVendorName());
+
+        // handle extensions
+        convertExtension(repositoryInfo, result);
+
+        return result;
+    }
+
+    /**
+     * Converts a repository capability object.
+     */
+    public static RepositoryCapabilities convert(CmisRepositoryCapabilitiesType capabilities) {
+        if (capabilities == null) {
+            return null;
+        }
+
+        RepositoryCapabilitiesImpl result = new RepositoryCapabilitiesImpl();
+
+        result.setAllVersionsSearchable(capabilities.isCapabilityAllVersionsSearchable());
+        result.setCapabilityAcl(convert(CapabilityAcl.class, capabilities.getCapabilityACL()));
+        result.setCapabilityChanges(convert(CapabilityChanges.class, capabilities.getCapabilityChanges()));
+        result.setCapabilityContentStreamUpdates(convert(CapabilityContentStreamUpdates.class, capabilities
+                .getCapabilityContentStreamUpdatability()));
+        result.setCapabilityJoin(convert(CapabilityJoin.class, capabilities.getCapabilityJoin()));
+        result.setCapabilityQuery(convert(CapabilityQuery.class, capabilities.getCapabilityQuery()));
+        result.setCapabilityRendition(convert(CapabilityRenditions.class, capabilities.getCapabilityRenditions()));
+        result.setIsPwcSearchable(capabilities.isCapabilityPWCSearchable());
+        result.setIsPwcUpdatable(capabilities.isCapabilityPWCUpdatable());
+        result.setSupportsGetDescendants(capabilities.isCapabilityGetDescendants());
+        result.setSupportsGetFolderTree(capabilities.isCapabilityGetFolderTree());
+        result.setSupportsMultifiling(capabilities.isCapabilityMultifiling());
+        result.setSupportsUnfiling(capabilities.isCapabilityUnfiling());
+        result.setSupportsVersionSpecificFiling(capabilities.isCapabilityVersionSpecificFiling());
+
+        // handle extensions
+        convertExtension(capabilities, result);
+
+        return result;
+    }
+
+    /**
+     * Converts a ACL capability object.
+     */
+    public static AclCapabilities convert(CmisACLCapabilityType aclCapabilities) {
+        if (aclCapabilities == null) {
+            return null;
+        }
+
+        AclCapabilitiesDataImpl result = new AclCapabilitiesDataImpl();
+
+        result.setSupportedPermissions(convert(SupportedPermissions.class, aclCapabilities.getSupportedPermissions()));
+
+        result.setAclPropagation(convert(AclPropagation.class, aclCapabilities.getPropagation()));
+
+        List<PermissionDefinition> permissionDefinitionList = new ArrayList<PermissionDefinition>();
+        for (CmisPermissionDefinition permDef : aclCapabilities.getPermissions()) {
+            PermissionDefinitionDataImpl permDefData = new PermissionDefinitionDataImpl();
+            permDefData.setPermission(permDef.getPermission());
+            permDefData.setDescription(permDef.getDescription());
+            convertExtension(permDef, permDefData);
+
+            permissionDefinitionList.add(permDefData);
+        }
+        result.setPermissionDefinitionData(permissionDefinitionList);
+
+        Map<String, PermissionMapping> permissionMapping = new LinkedHashMap<String, PermissionMapping>();
+        for (CmisPermissionMapping permMapping : aclCapabilities.getMapping()) {
+            if (permMapping.getKey() != null) {
+                PermissionMappingDataImpl permMappingData = new PermissionMappingDataImpl();
+                String key = permMapping.getKey().value();
+                permMappingData.setKey(key);
+                permMappingData.setPermissions(permMapping.getPermission());
+                convertExtension(permMapping, permMappingData);
+                permissionMapping.put(key, permMappingData);
+            }
+        }
+        result.setPermissionMappingData(permissionMapping);
+
+        // handle extensions
+        convertExtension(aclCapabilities, result);
+
+        return result;
+    }
+
+    /**
+     * Converts a repository info object.
+     */
+    public static CmisRepositoryInfoType convert(RepositoryInfo repositoryInfo) {
+        if (repositoryInfo == null) {
+            return null;
+        }
+
+        CmisRepositoryInfoType result = new CmisRepositoryInfoType();
+
+        result.setAclCapability(convert(repositoryInfo.getAclCapabilities()));
+        result.setCapabilities(convert(repositoryInfo.getCapabilities()));
+        result.setChangesIncomplete(repositoryInfo.getChangesIncomplete());
+        result.setCmisVersionSupported(repositoryInfo.getCmisVersionSupported());
+        result.setLatestChangeLogToken(repositoryInfo.getLatestChangeLogToken());
+        result.setPrincipalAnonymous(repositoryInfo.getPrincipalIdAnonymous());
+        result.setPrincipalAnyone(repositoryInfo.getPrincipalIdAnyone());
+        result.setProductName(repositoryInfo.getProductName());
+        result.setProductVersion(repositoryInfo.getProductVersion());
+        result.setRepositoryDescription(repositoryInfo.getDescription());
+        result.setRepositoryId(repositoryInfo.getId());
+        result.setRepositoryName(repositoryInfo.getName());
+        result.setRootFolderId(repositoryInfo.getRootFolderId());
+        result.setThinClientURI(repositoryInfo.getThinClientUri());
+        result.setVendorName(repositoryInfo.getVendorName());
+
+        if (repositoryInfo.getChangesOnType() != null) {
+            for (BaseTypeId boti : repositoryInfo.getChangesOnType()) {
+                result.getChangesOnType().add(convert(EnumBaseObjectTypeIds.class, boti));
+            }
+        }
+
+        // handle extensions
+        convertExtension(repositoryInfo, result);
+
+        return result;
+    }
+
+    /**
+     * Converts a repository capability object.
+     */
+    public static CmisRepositoryCapabilitiesType convert(RepositoryCapabilities capabilities) {
+        if (capabilities == null) {
+            return null;
+        }
+
+        CmisRepositoryCapabilitiesType result = new CmisRepositoryCapabilitiesType();
+
+        result.setCapabilityACL(convert(EnumCapabilityACL.class, capabilities.getAclCapability()));
+        result.setCapabilityAllVersionsSearchable(capabilities.isAllVersionsSearchableSupported());
+        result.setCapabilityChanges(convert(EnumCapabilityChanges.class, capabilities.getChangesCapability()));
+        result.setCapabilityContentStreamUpdatability(convert(EnumCapabilityContentStreamUpdates.class, capabilities
+                .getContentStreamUpdatesCapability()));
+        result.setCapabilityGetDescendants(capabilities.isGetDescendantsSupported());
+        result.setCapabilityGetFolderTree(capabilities.isGetFolderTreeSupported());
+        result.setCapabilityJoin(convert(EnumCapabilityJoin.class, capabilities.getJoinCapability()));
+        result.setCapabilityMultifiling(capabilities.isMultifilingSupported());
+        result.setCapabilityPWCSearchable(capabilities.isPwcSearchableSupported());
+        result.setCapabilityPWCUpdatable(capabilities.isPwcUpdatableSupported());
+        result.setCapabilityQuery(convert(EnumCapabilityQuery.class, capabilities.getQueryCapability()));
+        result.setCapabilityRenditions(convert(EnumCapabilityRendition.class, capabilities.getRenditionsCapability()));
+        result.setCapabilityUnfiling(capabilities.isUnfilingSupported());
+        result.setCapabilityVersionSpecificFiling(capabilities.isVersionSpecificFilingSupported());
+
+        // handle extensions
+        convertExtension(capabilities, result);
+
+        return result;
+    }
+
+    /**
+     * Converts a ACL capability object.
+     */
+    public static CmisACLCapabilityType convert(AclCapabilities aclCapabilities) {
+        if (aclCapabilities == null) {
+            return null;
+        }
+
+        CmisACLCapabilityType result = new CmisACLCapabilityType();
+
+        result.setSupportedPermissions(convert(EnumSupportedPermissions.class, aclCapabilities
+                .getSupportedPermissions()));
+
+        result.setPropagation(convert(EnumACLPropagation.class, aclCapabilities.getAclPropagation()));
+
+        if (aclCapabilities.getPermissions() != null) {
+            for (PermissionDefinition pdd : aclCapabilities.getPermissions()) {
+                CmisPermissionDefinition permDef = new CmisPermissionDefinition();
+                permDef.setDescription(pdd.getDescription());
+                permDef.setPermission(pdd.getId());
+                convertExtension(pdd, permDef);
+
+                result.getPermissions().add(permDef);
+            }
+        }
+
+        if (aclCapabilities.getPermissionMapping() != null) {
+            for (PermissionMapping pmd : aclCapabilities.getPermissionMapping().values()) {
+                CmisPermissionMapping permMap = new CmisPermissionMapping();
+                permMap.setKey(EnumAllowableActionsKey.fromValue(pmd.getKey()));
+
+                if (pmd.getPermissions() != null) {
+                    for (String permission : pmd.getPermissions()) {
+                        permMap.getPermission().add(permission);
+                    }
+                }
+
+                convertExtension(pmd, permMap);
+
+                result.getMapping().add(permMap);
+            }
+        }
+
+        // handle extensions
+        convertExtension(aclCapabilities, result);
+
+        return result;
+    }
+
+    // -------------------------------------------------------------------------
+    // --- Types ---
+    // -------------------------------------------------------------------------
+
+    /**
+     * Converts a type definition object.
+     */

[... 2115 lines stripped ...]