blob: 6fa48f5f939bc6fc18f87d26d18ccd2b66e9f094 [file] [log] [blame]
/*
* 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.Reflection;
namespace PortCMIS.Enums
{
/// <summary>
/// Base Type ID.
/// </summary>
public enum BaseTypeId
{
/// <summary>
/// CMIS Document Type.
/// </summary>
[CmisValue("cmis:document")]
CmisDocument,
/// <summary>
/// CMIS Folder Type.
/// </summary>
[CmisValue("cmis:folder")]
CmisFolder,
/// <summary>
/// CMIS Relationship Type.
/// </summary>
[CmisValue("cmis:relationship")]
CmisRelationship,
/// <summary>
/// CMIS Policy Type.
/// </summary>
[CmisValue("cmis:policy")]
CmisPolicy,
/// <summary>
/// CMIS Item Type.
/// </summary>
[CmisValue("cmis:item")]
CmisItem,
/// <summary>
/// CMIS Secondary Type.
/// </summary>
[CmisValue("cmis:secondary")]
CmisSecondary
}
/// <summary>
/// Repository Capability: Content Stream Updates
/// </summary>
public enum CapabilityContentStreamUpdates
{
/// <summary>
/// Content can be updated at any time.
/// </summary>
[CmisValue("anytime")]
Anyime,
/// <summary>
/// Only the content on PWCs can be updated.
/// </summary>
[CmisValue("pwconly")]
PWCOnly,
/// <summary>
/// Content cannot be updated.
/// </summary>
[CmisValue("none")]
None
}
/// <summary>
/// Repository Capability: Content Changes.
/// </summary>
public enum CapabilityChanges
{
/// <summary>
/// Change log is not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// The change log only contains object IDs.
/// </summary>
[CmisValue("objectidsonly")]
ObjectIdsOnly,
/// <summary>
/// The change log only contains properties.
/// </summary>
[CmisValue("properties")]
Properties,
/// <summary>
/// The change log only contains everything.
/// </summary>
[CmisValue("all")]
All
}
/// <summary>
/// Repository Capability: Renditions.
/// </summary>
public enum CapabilityRenditions
{
/// <summary>
/// Renditions are not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Renditions can be read.
/// </summary>
[CmisValue("read")]
Read
}
/// <summary>
/// Repository Capability: Query.
/// </summary>
public enum CapabilityQuery
{
/// <summary>
/// Query is not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Only metadata queries are supported.
/// </summary>
[CmisValue("metadataonly")]
MetadataOnly,
/// <summary>
/// Only fulltext queries are supported.
/// </summary>
[CmisValue("fulltextonly")]
FulltextOnly,
/// <summary>
/// Metadata and fulltext queries are supported but only separately.
/// </summary>
[CmisValue("bothseparate")]
BothSeparate,
/// <summary>
/// Metadata and fulltext queries are supported.
/// </summary>
[CmisValue("bothcombined")]
BothCombined
}
/// <summary>
/// Repository Capability: Query Joins.
/// </summary>
public enum CapabilityJoin
{
/// <summary>
/// Joins are not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Only inner joins are supported.
/// </summary>
[CmisValue("inneronly")]
InnerOnly,
/// <summary>
/// Inner and outer joins are supported.
/// </summary>
[CmisValue("innerandouter")]
InnerAndOuter
}
/// <summary>
/// Repository Capability: ACL.
/// </summary>
public enum CapabilityAcl
{
/// <summary>
/// ACLs are not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// ACLs can be discovered.
/// </summary>
[CmisValue("discover")]
Discover,
/// <summary>
/// ACLs can be managed.
/// </summary>
[CmisValue("manage")]
Manage
}
/// <summary>
/// Repository Capability: Order by.
/// </summary>
public enum CapabilityOrderBy
{
/// <summary>
/// Order by is not supported.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Order by is supported for common properties.
/// </summary>
[CmisValue("common")]
Common,
/// <summary>
/// Order by is supported for common and custom properties.
/// </summary>
[CmisValue("custom")]
Custom
}
/// <summary>
/// Supported Permissions.
/// </summary>
public enum SupportedPermissions
{
/// <summary>
/// Basic permissions.
/// </summary>
[CmisValue("basic")]
Basic,
/// <summary>
/// Repository specific permissions.
/// </summary>
[CmisValue("repository")]
Repository,
/// <summary>
/// Basic and repository specific permissions.
/// </summary>
[CmisValue("both")]
Both
}
/// <summary>
/// ACL Propagation flag.
/// </summary>
public enum AclPropagation
{
/// <summary>
/// Repository determines the objects to change.
/// </summary>
[CmisValue("repositorydetermined")]
RepositoryDetermined,
/// <summary>
/// ACL is only changed for this object.
/// </summary>
[CmisValue("objectonly")]
ObjectOnly,
/// <summary>
/// ACL is changed for this object and propagated to related objects.
/// </summary>
[CmisValue("propagate")]
Propagate
}
/// <summary>
/// Content Stream Allowed flag.
/// </summary>
public enum ContentStreamAllowed
{
/// <summary>
/// Documents cannot have content.
/// </summary>
[CmisValue("notallowed")]
NotAllowed,
/// <summary>
/// Documents can have content.
/// </summary>
[CmisValue("allowed")]
Allowed,
/// <summary>
/// Documents must have content.
/// </summary>
[CmisValue("required")]
Required
}
/// <summary>
/// Property Data Type.
/// </summary>
public enum PropertyType
{
/// <summary>
/// Boolean.
/// </summary>
[CmisValue("boolean")]
Boolean,
/// <summary>
/// ID.
/// </summary>
[CmisValue("id")]
Id,
/// <summary>
/// Integer.
/// </summary>
[CmisValue("integer")]
Integer,
/// <summary>
/// DateTime.
/// </summary>
[CmisValue("datetime")]
DateTime,
/// <summary>
/// Decimal.
/// </summary>
[CmisValue("decimal")]
Decimal,
/// <summary>
/// HTML.
/// </summary>
[CmisValue("html")]
Html,
/// <summary>
/// String.
/// </summary>
[CmisValue("string")]
String,
/// <summary>
/// URI.
/// </summary>
[CmisValue("uri")]
Uri
}
/// <summary>
/// Property Cardinality.
/// </summary>
public enum Cardinality
{
/// <summary>
/// Single value property.
/// </summary>
[CmisValue("single")]
Single,
/// <summary>
/// Multivalue property.
/// </summary>
[CmisValue("multi")]
Multi
}
/// <summary>
/// Property Updatability.
/// </summary>
public enum Updatability
{
/// <summary>
/// Read-only property set by repository.
/// </summary>
[CmisValue("readonly")]
ReadOnly,
/// <summary>
/// Read-write property.
/// </summary>
[CmisValue("readwrite")]
ReadWrite,
/// <summary>
/// Property that can only be set if the document is checked out.
/// </summary>
[CmisValue("whencheckedout")]
WhenCheckedOut,
/// <summary>
/// Property that can only be set at object creation.
/// </summary>
[CmisValue("oncreate")]
OnCreate
}
/// <summary>
/// DateTime Property Resolution.
/// </summary>
public enum DateTimeResolution
{
/// <summary>
/// Years only.
/// </summary>
[CmisValue("year")]
Year,
/// <summary>
/// Date.
/// </summary>
[CmisValue("date")]
Date,
/// <summary>
/// Date and time.
/// </summary>
[CmisValue("time")]
Time
}
/// <summary>
/// Decimal Property Precision.
/// </summary>
public enum DecimalPrecision
{
/// <summary>
/// 32 bit precision. ("single" as specified in IEEE-754-1985).
/// </summary>
[CmisValue("32")]
Bits32,
/// <summary>
/// 64 bit precision. ("double" as specified in IEEE-754-1985).
/// </summary>
[CmisValue("64")]
Bits64
}
/// <summary>
/// Include Relationships flag.
/// </summary>
public enum IncludeRelationships
{
/// <summary>
/// Include no relationships.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Only relationships in which the objects returned are the source must be returned.
/// </summary>
[CmisValue("source")]
Source,
/// <summary>
/// Only relationships in which the objects returned are the target must be returned.
/// </summary>
[CmisValue("target")]
Target,
/// <summary>
/// Include all relationships.
/// </summary>
[CmisValue("both")]
Both
}
/// <summary>
/// Versioning State flag.
/// </summary>
public enum VersioningState
{
/// <summary>
/// No version.
/// </summary>
[CmisValue("none")]
None,
/// <summary>
/// Major version.
/// </summary>
[CmisValue("major")]
Major,
/// <summary>
/// Minor version.
/// </summary>
[CmisValue("minor")]
Minor,
/// <summary>
/// Checked out (PWC).
/// </summary>
[CmisValue("checkedout")]
CheckedOut
}
/// <summary>
/// Unfile Object flag.
/// </summary>
public enum UnfileObject
{
/// <summary>
/// Unfile all objects.
/// </summary>
[CmisValue("unfile")]
Unfile,
/// <summary>
/// Delete single filed object, unfile all others.
/// </summary>
[CmisValue("deletesinglefiled")]
DeleteSinglefiled,
/// <summary>
/// Delete all objects.
/// </summary>
[CmisValue("delete")]
Delete
}
/// <summary>
/// Relationship Direction flag.
/// </summary>
public enum RelationshipDirection
{
/// <summary>
/// Only relationship objects where the specified object is the source object.
/// </summary>
[CmisValue("source")]
Source,
/// <summary>
/// Only relationship objects where the specified object is the target object
/// </summary>
[CmisValue("target")]
Target,
/// <summary>
/// All relationships.
/// </summary>
[CmisValue("either")]
Either
}
/// <summary>
/// Return Version flag.
/// </summary>
public enum ReturnVersion
{
/// <summary>
/// Return this version.
/// </summary>
[CmisValue("this")]
This,
/// <summary>
/// Return latest version.
/// </summary>
[CmisValue("latest")]
Latest,
/// <summary>
/// Return latest major version.
/// </summary>
[CmisValue("latestmajor")]
LatestMajor
}
/// <summary>
/// Change Type in change logs.
/// </summary>
public enum ChangeType
{
/// <summary>
/// Object has been created.
/// </summary>
[CmisValue("created")]
Created,
/// <summary>
/// Object has been updated.
/// </summary>
[CmisValue("updated")]
Updated,
/// <summary>
/// Object has been deleted.
/// </summary>
[CmisValue("deleted")]
Deleted,
/// <summary>
/// Permissions (ACL, policies) have been changed.
/// </summary>
[CmisValue("security")]
Security
}
/// <summary>
/// Browser Binding DateTime Format.
/// </summary>
public enum DateTimeFormat
{
/// <summary>
/// Simple format (milliseconds).
/// </summary>
[CmisValue("simple")]
Simple,
/// <summary>
/// Extended format (ISO format).
/// </summary>
[CmisValue("extended")]
Extended
}
/// <summary>
/// Allowable Actions.
/// </summary>
public enum Action
{
/// <summary>
/// User can delete this object.
/// </summary>
[CmisValue("canDeleteObject")]
CanDeleteObject,
/// <summary>
/// Use can update properties of this object.
/// </summary>
[CmisValue("canUpdateProperties")]
CanUpdateProperties,
/// <summary>
/// User can get the folder tree of this folder.
/// </summary>
[CmisValue("canGetFolderTree")]
CanGetFolderTree,
/// <summary>
/// User can get the properties of this object.
/// </summary>
[CmisValue("canGetProperties")]
CanGetProperties,
/// <summary>
/// User can get the relationships of this object.
/// </summary>
[CmisValue("canGetObjectRelationships")]
CanGetObjectRelationships,
/// <summary>
/// User can get the parents of this object.
/// </summary>
[CmisValue("canGetObjectParents")]
CanGetObjectParents,
/// <summary>
/// User can get the parent of this folder.
/// </summary>
[CmisValue("canGetFolderParent")]
CanGetFolderParent,
/// <summary>
/// User can get the descendants of this folder.
/// </summary>
[CmisValue("canGetDescendants")]
CanGetDescendants,
/// <summary>
/// User can move this object.
/// </summary>
[CmisValue("canMoveObject")]
CanMoveObject,
/// <summary>
/// User can delete the content stream of this document.
/// </summary>
[CmisValue("canDeleteContentStream")]
CanDeleteContentStream,
/// <summary>
/// User can checkout this document.
/// </summary>
[CmisValue("canCheckOut")]
CanCheckOut,
/// <summary>
/// User can cancel the check out of this PWC.
/// </summary>
[CmisValue("canCancelCheckOut")]
CanCancelCheckOut,
/// <summary>
/// User can check in this PWC.
/// </summary>
[CmisValue("canCheckIn")]
CanCheckIn,
/// <summary>
/// User can set a content stream of this document.
/// </summary>
[CmisValue("canSetContentStream")]
CanSetContentStream,
/// <summary>
/// User can get the versions of this document.
/// </summary>
[CmisValue("canGetAllVersions")]
CanGetAllVersions,
/// <summary>
/// User can add thi object to a folder.
/// </summary>
[CmisValue("canAddObjectToFolder")]
CanAddObjectToFolder,
/// <summary>
/// User can remove this object form a folder.
/// </summary>
[CmisValue("canRemoveObjectFromFolder")]
CanRemoveObjectFromFolder,
/// <summary>
/// User can get the content stream of this document.
/// </summary>
[CmisValue("canGetContentStream")]
CanGetContentStream,
/// <summary>
/// User can apply policies to this object.
/// </summary>
[CmisValue("canApplyPolicy")]
CanApplyPolicy,
/// <summary>
/// User can get the policies applied to this object.
/// </summary>
[CmisValue("canGetAppliedPolicies")]
CanGetAppliedPolicies,
/// <summary>
/// User can remove policies from this object.
/// </summary>
[CmisValue("canRemovePolicy")]
CanRemovePolicy,
/// <summary>
/// User can get the children of this object.
/// </summary>
[CmisValue("canGetChildren")]
CanGetChildren,
/// <summary>
/// User can create documents in this folder.
/// </summary>
[CmisValue("canCreateDocument")]
CanCreateDocument,
/// <summary>
/// User can create folders in this folder.
/// </summary>
[CmisValue("canCreateFolder")]
CanCreateFolder,
/// <summary>
/// USer can create relationships from and to this object.
/// </summary>
[CmisValue("canCreateRelationship")]
CanCreateRelationship,
/// <summary>
/// User can create items in this folder.
/// </summary>
[CmisValue("canCreateItem")]
CanCreateItem,
/// <summary>
/// User can delete this folder and all descendants.
/// </summary>
[CmisValue("canDeleteTree")]
CanDeleteTree,
/// <summary>
/// User can get the renditions of this object.
/// </summary>
[CmisValue("canGetRenditions")]
CanGetRenditions,
/// <summary>
/// User can get the ACL of this object.
/// </summary>
[CmisValue("canGetAcl")]
CanGetAcl,
/// <summary>
/// User can apply an ACL to this object.
/// </summary>
[CmisValue("canApplyAcl")]
CanApplyAcl
}
/// <summary>
/// CMIS Version.
/// </summary>
public enum CmisVersion
{
/// <summary>
/// CMIS 1.0
/// </summary>
[CmisValue("1.0")]
Cmis_1_0,
/// <summary>
/// CMIS 1.1
/// </summary>
[CmisValue("1.1")]
Cmis_1_1
}
// --- attribute class ---
[AttributeUsage(AttributeTargets.Field)]
internal sealed class CmisValueAttribute : System.Attribute
{
public CmisValueAttribute(string value)
{
Value = value;
}
public string Value
{
get;
private set;
}
}
/// <summary>
/// Handles translations from Enums into CMIS values and vice versa.
/// </summary>
internal static class CmisValue
{
/// <summary>
/// Gets the CMIS value from an enum.
/// </summary>
/// <param name="value">the enum</param>
/// <returns>the CMIS value or <c>null</c> if no value can be determined</returns>
public static string GetCmisValue(this Enum value)
{
FieldInfo fieldInfo = value.GetType().GetRuntimeField(value.ToString());
CmisValueAttribute[] cmisValueAttr = fieldInfo.GetCustomAttributes(typeof(CmisValueAttribute), false) as CmisValueAttribute[];
return cmisValueAttr.Length > 0 ? cmisValueAttr[0].Value : null;
}
/// <summary>
/// Gets an enum from a CMIS value.
/// </summary>
/// <typeparam name="T">the enum type</typeparam>
/// <param name="value">the CMIS value</param>
/// <returns>the enum value</returns>
public static T GetCmisEnum<T>(this string value)
{
Type type = typeof(T);
Type underlyingType = Nullable.GetUnderlyingType(type);
if (underlyingType != null)
{
type = underlyingType;
}
foreach (FieldInfo fieldInfo in type.GetRuntimeFields())
{
CmisValueAttribute[] cmisValueAttr = fieldInfo.GetCustomAttributes(typeof(CmisValueAttribute), false) as CmisValueAttribute[];
if (cmisValueAttr != null && cmisValueAttr.Length > 0 && cmisValueAttr[0].Value == value)
{
return (T)Enum.Parse(type, fieldInfo.Name);
}
}
return default(T);
}
}
}