| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| */ | |
| using System; | |
| using System.Collections.Generic; | |
| using System.IO; | |
| using System.Text; | |
| using DotCMIS.Data.Extensions; | |
| using DotCMIS.Enums; | |
| namespace DotCMIS.Data.Impl | |
| { | |
| public class RepositoryInfo : ExtensionsData, IRepositoryInfo | |
| { | |
| public RepositoryInfo() | |
| { | |
| } | |
| public RepositoryInfo(IRepositoryInfo source) | |
| { | |
| Id = source.Id; | |
| Name = source.Name; | |
| Description = source.Description; | |
| VendorName = source.VendorName; | |
| ProductName = source.ProductName; | |
| ProductVersion = source.ProductVersion; | |
| RootFolderId = source.RootFolderId; | |
| Capabilities = source.Capabilities; | |
| AclCapabilities = source.AclCapabilities; | |
| LatestChangeLogToken = source.LatestChangeLogToken; | |
| CmisVersionSupported = source.CmisVersionSupported; | |
| ThinClientUri = source.ThinClientUri; | |
| ChangesIncomplete = source.ChangesIncomplete; | |
| ChangesOnType = source.ChangesOnType; | |
| PrincipalIdAnonymous = source.PrincipalIdAnonymous; | |
| PrincipalIdAnyone = source.PrincipalIdAnyone; | |
| } | |
| public string Id { get; set; } | |
| public string Name { get; set; } | |
| public string Description { get; set; } | |
| public string VendorName { get; set; } | |
| public string ProductName { get; set; } | |
| public string ProductVersion { get; set; } | |
| public string RootFolderId { get; set; } | |
| public IRepositoryCapabilities Capabilities { get; set; } | |
| public IAclCapabilities AclCapabilities { get; set; } | |
| public string LatestChangeLogToken { get; set; } | |
| public string CmisVersionSupported { get; set; } | |
| public string ThinClientUri { get; set; } | |
| public bool? ChangesIncomplete { get; set; } | |
| public IList<BaseTypeId?> ChangesOnType { get; set; } | |
| public string PrincipalIdAnonymous { get; set; } | |
| public string PrincipalIdAnyone { get; set; } | |
| } | |
| public class RepositoryCapabilities : ExtensionsData, IRepositoryCapabilities | |
| { | |
| public CapabilityContentStreamUpdates? ContentStreamUpdatesCapability { get; set; } | |
| public CapabilityChanges? ChangesCapability { get; set; } | |
| public CapabilityRenditions? RenditionsCapability { get; set; } | |
| public bool? IsGetDescendantsSupported { get; set; } | |
| public bool? IsGetFolderTreeSupported { get; set; } | |
| public bool? IsMultifilingSupported { get; set; } | |
| public bool? IsUnfilingSupported { get; set; } | |
| public bool? IsVersionSpecificFilingSupported { get; set; } | |
| public bool? IsPwcSearchableSupported { get; set; } | |
| public bool? IsPwcUpdatableSupported { get; set; } | |
| public bool? IsAllVersionsSearchableSupported { get; set; } | |
| public CapabilityQuery? QueryCapability { get; set; } | |
| public CapabilityJoin? JoinCapability { get; set; } | |
| public CapabilityAcl? AclCapability { get; set; } | |
| } | |
| public class AclCapabilities : ExtensionsData, IAclCapabilities | |
| { | |
| public SupportedPermissions? SupportedPermissions { get; set; } | |
| public AclPropagation? AclPropagation { get; set; } | |
| public IList<IPermissionDefinition> Permissions { get; set; } | |
| public IDictionary<string, IPermissionMapping> PermissionMapping { get; set; } | |
| } | |
| public class PermissionDefinition : ExtensionsData, IPermissionDefinition | |
| { | |
| public string Id { get; set; } | |
| public string Description { get; set; } | |
| } | |
| public class PermissionMapping : ExtensionsData, IPermissionMapping | |
| { | |
| public string Key { get; set; } | |
| public IList<string> Permissions { get; set; } | |
| } | |
| public abstract class AbstractTypeDefinition : ExtensionsData, ITypeDefinition | |
| { | |
| private List<IPropertyDefinition> propertyDefintionList = new List<IPropertyDefinition>(); | |
| private Dictionary<string, IPropertyDefinition> propertyDefintionDict = new Dictionary<string, IPropertyDefinition>(); | |
| private string parentTypeId; | |
| public string Id { get; set; } | |
| public string LocalName { get; set; } | |
| public string LocalNamespace { get; set; } | |
| public string DisplayName { get; set; } | |
| public string QueryName { get; set; } | |
| public string Description { get; set; } | |
| public BaseTypeId BaseTypeId { get; set; } | |
| public string ParentTypeId | |
| { | |
| get { return parentTypeId; } | |
| set { parentTypeId = (value == null || value.Length == 0 ? null : value); } | |
| } | |
| public bool? IsCreatable { get; set; } | |
| public bool? IsFileable { get; set; } | |
| public bool? IsQueryable { get; set; } | |
| public bool? IsFulltextIndexed { get; set; } | |
| public bool? IsIncludedInSupertypeQuery { get; set; } | |
| public bool? IsControllablePolicy { get; set; } | |
| public bool? IsControllableAcl { get; set; } | |
| public IPropertyDefinition this[string propertyId] | |
| { | |
| get | |
| { | |
| IPropertyDefinition propertyDefinition = null; | |
| propertyDefintionDict.TryGetValue(propertyId, out propertyDefinition); | |
| return propertyDefinition; | |
| } | |
| } | |
| public IList<IPropertyDefinition> PropertyDefinitions | |
| { | |
| get | |
| { | |
| return propertyDefintionList; | |
| } | |
| } | |
| public void Initialize(ITypeDefinition typeDefinition) | |
| { | |
| Id = typeDefinition.Id; | |
| LocalName = typeDefinition.LocalName; | |
| LocalNamespace = typeDefinition.LocalNamespace; | |
| DisplayName = typeDefinition.DisplayName; | |
| QueryName = typeDefinition.QueryName; | |
| Description = typeDefinition.Description; | |
| BaseTypeId = typeDefinition.BaseTypeId; | |
| ParentTypeId = typeDefinition.ParentTypeId; | |
| IsCreatable = typeDefinition.IsCreatable; | |
| IsFileable = typeDefinition.IsFileable; | |
| IsQueryable = typeDefinition.IsQueryable; | |
| IsFulltextIndexed = typeDefinition.IsFulltextIndexed; | |
| IsIncludedInSupertypeQuery = typeDefinition.IsIncludedInSupertypeQuery; | |
| IsControllablePolicy = typeDefinition.IsControllablePolicy; | |
| IsControllableAcl = typeDefinition.IsControllableAcl; | |
| if (typeDefinition.PropertyDefinitions != null) | |
| { | |
| foreach (IPropertyDefinition propDef in typeDefinition.PropertyDefinitions) | |
| { | |
| AddPropertyDefinition(propDef); | |
| } | |
| } | |
| } | |
| public void AddPropertyDefinition(IPropertyDefinition propertyDefinition) | |
| { | |
| if (propertyDefinition == null || propertyDefinition.Id == null) | |
| { | |
| return; | |
| } | |
| propertyDefintionList.Add(propertyDefinition); | |
| propertyDefintionDict[propertyDefinition.Id] = propertyDefinition; | |
| } | |
| } | |
| public class DocumentTypeDefinition : AbstractTypeDefinition, IDocumentTypeDefinition | |
| { | |
| public bool? IsVersionable { get; set; } | |
| public ContentStreamAllowed? ContentStreamAllowed { get; set; } | |
| } | |
| public class FolderTypeDefinition : AbstractTypeDefinition, IFolderTypeDefinition | |
| { | |
| } | |
| public class PolicyTypeDefinition : AbstractTypeDefinition, IPolicyTypeDefinition | |
| { | |
| } | |
| public class RelationshipTypeDefinition : AbstractTypeDefinition, IRelationshipTypeDefinition | |
| { | |
| public IList<string> AllowedSourceTypeIds { get; set; } | |
| public IList<string> AllowedTargetTypeIds { get; set; } | |
| } | |
| public class TypeDefinitionList : ExtensionsData, ITypeDefinitionList | |
| { | |
| public IList<ITypeDefinition> List { get; set; } | |
| public bool? HasMoreItems { get; set; } | |
| public long? NumItems { get; set; } | |
| } | |
| public class TypeDefinitionContainer : ExtensionsData, ITypeDefinitionContainer | |
| { | |
| public ITypeDefinition TypeDefinition { get; set; } | |
| public IList<ITypeDefinitionContainer> Children { get; set; } | |
| } | |
| public abstract class PropertyDefinition : ExtensionsData, IPropertyDefinition | |
| { | |
| public string Id { get; set; } | |
| public string LocalName { get; set; } | |
| public string LocalNamespace { get; set; } | |
| public string DisplayName { get; set; } | |
| public string QueryName { get; set; } | |
| public string Description { get; set; } | |
| public PropertyType PropertyType { get; set; } | |
| public Cardinality Cardinality { get; set; } | |
| public Updatability Updatability { get; set; } | |
| public bool? IsInherited { get; set; } | |
| public bool? IsRequired { get; set; } | |
| public bool? IsQueryable { get; set; } | |
| public bool? IsOrderable { get; set; } | |
| public bool? IsOpenChoice { get; set; } | |
| } | |
| public class Choice<T> : IChoice<T> | |
| { | |
| public string DisplayName { get; set; } | |
| public IList<T> Value { get; set; } | |
| public IList<IChoice<T>> Choices { get; set; } | |
| } | |
| public class PropertyBooleanDefinition : PropertyDefinition, IPropertyBooleanDefinition | |
| { | |
| public IList<bool> DefaultValue { get; set; } | |
| public IList<IChoice<bool>> Choices { get; set; } | |
| } | |
| public class PropertyDateTimeDefinition : PropertyDefinition, IPropertyDateTimeDefinition | |
| { | |
| public IList<DateTime> DefaultValue { get; set; } | |
| public IList<IChoice<DateTime>> Choices { get; set; } | |
| public DateTimeResolution? DateTimeResolution { get; set; } | |
| } | |
| public class PropertyDecimalDefinition : PropertyDefinition, IPropertyDecimalDefinition | |
| { | |
| public IList<decimal> DefaultValue { get; set; } | |
| public IList<IChoice<decimal>> Choices { get; set; } | |
| public decimal? MinValue { get; set; } | |
| public decimal? MaxValue { get; set; } | |
| public DecimalPrecision? Precision { get; set; } | |
| } | |
| public class PropertyHtmlDefinition : PropertyDefinition, IPropertyHtmlDefinition | |
| { | |
| public IList<string> DefaultValue { get; set; } | |
| public IList<IChoice<string>> Choices { get; set; } | |
| } | |
| public class PropertyIdDefinition : PropertyDefinition, IPropertyIdDefinition | |
| { | |
| public IList<string> DefaultValue { get; set; } | |
| public IList<IChoice<string>> Choices { get; set; } | |
| } | |
| public class PropertyIntegerDefinition : PropertyDefinition, IPropertyIntegerDefinition | |
| { | |
| public IList<long> DefaultValue { get; set; } | |
| public IList<IChoice<long>> Choices { get; set; } | |
| public long? MinValue { get; set; } | |
| public long? MaxValue { get; set; } | |
| } | |
| public class PropertyStringDefinition : PropertyDefinition, IPropertyStringDefinition | |
| { | |
| public IList<string> DefaultValue { get; set; } | |
| public IList<IChoice<string>> Choices { get; set; } | |
| public long? MaxLength { get; set; } | |
| } | |
| public class PropertyUriDefinition : PropertyDefinition, IPropertyUriDefinition | |
| { | |
| public IList<string> DefaultValue { get; set; } | |
| public IList<IChoice<string>> Choices { get; set; } | |
| } | |
| public class ObjectData : ExtensionsData, IObjectData | |
| { | |
| public string Id | |
| { | |
| get | |
| { | |
| return GetFirstValue(PropertyIds.ObjectId) as string; | |
| } | |
| } | |
| public BaseTypeId? BaseTypeId | |
| { | |
| get | |
| { | |
| string baseTypeId = GetFirstValue(PropertyIds.BaseTypeId) as string; | |
| if (baseTypeId == null) | |
| { | |
| return null; | |
| } | |
| return baseTypeId.GetCmisEnum<BaseTypeId>(); | |
| } | |
| } | |
| public IProperties Properties { get; set; } | |
| public IAllowableActions AllowableActions { get; set; } | |
| public IList<IObjectData> Relationships { get; set; } | |
| public IChangeEventInfo ChangeEventInfo { get; set; } | |
| public IAcl Acl { get; set; } | |
| public bool? IsExactAcl { get; set; } | |
| public IPolicyIdList PolicyIds { get; set; } | |
| public IList<IRenditionData> Renditions { get; set; } | |
| private object GetFirstValue(string id) | |
| { | |
| if (Properties == null) { return null; } | |
| IPropertyData property = Properties[id]; | |
| if (property == null) | |
| { | |
| return null; | |
| } | |
| return property.FirstValue; | |
| } | |
| } | |
| public class ObjectList : ExtensionsData, IObjectList | |
| { | |
| public IList<IObjectData> Objects { get; set; } | |
| public bool? HasMoreItems { get; set; } | |
| public long? NumItems { get; set; } | |
| } | |
| public class ObjectInFolderData : ExtensionsData, IObjectInFolderData | |
| { | |
| public IObjectData Object { get; set; } | |
| public string PathSegment { get; set; } | |
| } | |
| public class ObjectInFolderList : ExtensionsData, IObjectInFolderList | |
| { | |
| public IList<IObjectInFolderData> Objects { get; set; } | |
| public bool? HasMoreItems { get; set; } | |
| public long? NumItems { get; set; } | |
| } | |
| public class ObjectInFolderContainer : ExtensionsData, IObjectInFolderContainer | |
| { | |
| public IObjectInFolderData Object { get; set; } | |
| public IList<IObjectInFolderContainer> Children { get; set; } | |
| } | |
| public class ObjectParentData : ExtensionsData, IObjectParentData | |
| { | |
| public IObjectData Object { get; set; } | |
| public string RelativePathSegment { get; set; } | |
| } | |
| public class Properties : ExtensionsData, IProperties | |
| { | |
| private List<IPropertyData> propertyList = new List<IPropertyData>(); | |
| private Dictionary<string, IPropertyData> propertyDict = new Dictionary<string, IPropertyData>(); | |
| public IPropertyData this[string propertyId] | |
| { | |
| get | |
| { | |
| IPropertyData property = null; | |
| propertyDict.TryGetValue(propertyId, out property); | |
| return property; | |
| } | |
| } | |
| public IList<IPropertyData> PropertyList | |
| { | |
| get | |
| { | |
| return propertyList; | |
| } | |
| } | |
| public void AddProperty(IPropertyData property) | |
| { | |
| if (property == null) | |
| { | |
| return; | |
| } | |
| propertyList.Add(property); | |
| if (property.Id != null) | |
| { | |
| propertyDict[property.Id] = property; | |
| } | |
| } | |
| public override string ToString() | |
| { | |
| StringBuilder sb = new StringBuilder(); | |
| foreach (IPropertyData prop in propertyList) | |
| { | |
| if (sb.Length == 0) { sb.Append("["); } | |
| else { sb.Append(", "); } | |
| sb.Append(prop.ToString()); | |
| } | |
| sb.Append("]"); | |
| return sb.ToString(); | |
| } | |
| } | |
| public class PropertyData : ExtensionsData, IPropertyData | |
| { | |
| private IList<object> values; | |
| public PropertyData(PropertyType propertyType) | |
| { | |
| PropertyType = propertyType; | |
| } | |
| public string Id { get; set; } | |
| public string LocalName { get; set; } | |
| public string DisplayName { get; set; } | |
| public string QueryName { get; set; } | |
| public PropertyType PropertyType { get; protected set; } | |
| public IList<object> Values | |
| { | |
| get { return values; } | |
| set | |
| { | |
| if (value == null) | |
| { | |
| values = null; | |
| } | |
| else | |
| { | |
| foreach (object o in value) | |
| { | |
| CheckValue(o); | |
| } | |
| values = value; | |
| } | |
| } | |
| } | |
| public object FirstValue { get { return values == null || Values.Count < 1 ? null : values[0]; } } | |
| public void AddValue(object value) | |
| { | |
| CheckValue(value); | |
| if (Values == null) | |
| { | |
| Values = new List<object>(); | |
| } | |
| Values.Add(value); | |
| } | |
| public void CheckValue(object value) | |
| { | |
| switch (PropertyType) | |
| { | |
| case PropertyType.String: | |
| if (!(value is string)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a String property!"); | |
| } | |
| break; | |
| case PropertyType.Id: | |
| if (!(value is string)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is an Id property!"); | |
| } | |
| break; | |
| case PropertyType.Integer: | |
| if (!(value is sbyte || value is byte || value is short || value is ushort || value is int || value is uint || value is long)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is an Integer property!"); | |
| } | |
| break; | |
| case PropertyType.Boolean: | |
| if (!(value is bool)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a Boolean property!"); | |
| } | |
| break; | |
| case PropertyType.DateTime: | |
| if (!(value is DateTime)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a DateTime property!"); | |
| } | |
| break; | |
| case PropertyType.Decimal: | |
| if (!(value is decimal)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a Decimal property!"); | |
| } | |
| break; | |
| case PropertyType.Uri: | |
| if (!(value is string)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a URI property!"); | |
| } | |
| break; | |
| case PropertyType.Html: | |
| if (!(value is string)) | |
| { | |
| throw new ArgumentException("Property '" + Id + "' is a HTML property!"); | |
| } | |
| break; | |
| } | |
| } | |
| public override string ToString() | |
| { | |
| return Id + ": " + values; | |
| } | |
| } | |
| public class Principal : ExtensionsData, IPrincipal | |
| { | |
| public string Id { get; set; } | |
| } | |
| public class Ace : ExtensionsData, IAce | |
| { | |
| public IPrincipal Principal { get; set; } | |
| public string PrincipalId { get { return Principal == null ? null : Principal.Id; } } | |
| public IList<string> Permissions { get; set; } | |
| public bool IsDirect { get; set; } | |
| } | |
| public class Acl : ExtensionsData, IAcl | |
| { | |
| public IList<IAce> Aces { get; set; } | |
| public bool? IsExact { get; set; } | |
| } | |
| public class ContentStream : ExtensionsData, IContentStream | |
| { | |
| public long? Length { get; set; } | |
| public string MimeType { get; set; } | |
| public string FileName { get; set; } | |
| public Stream Stream { get; set; } | |
| } | |
| public class AllowableActions : ExtensionsData, IAllowableActions | |
| { | |
| public HashSet<string> Actions { get; set; } | |
| } | |
| public class RenditionData : ExtensionsData, IRenditionData | |
| { | |
| public string StreamId { get; set; } | |
| public string MimeType { get; set; } | |
| public long? Length { get; set; } | |
| public string Kind { get; set; } | |
| public string Title { get; set; } | |
| public long? Height { get; set; } | |
| public long? Width { get; set; } | |
| public string RenditionDocumentId { get; set; } | |
| } | |
| public class ChangeEventInfo : ExtensionsData, IChangeEventInfo | |
| { | |
| public ChangeType? ChangeType { get; set; } | |
| public DateTime? ChangeTime { get; set; } | |
| } | |
| public class PolicyIdList : ExtensionsData, IPolicyIdList | |
| { | |
| public IList<string> PolicyIds { get; set; } | |
| } | |
| public class FailedToDeleteData : ExtensionsData, IFailedToDeleteData | |
| { | |
| public IList<string> Ids { get; set; } | |
| } | |
| } |