public static Guid?GetPolicyTagForArchiveFromItem(StoreObject item, out bool isExplicit, out bool isKeptInPlace, out DateTime?moveToArchive) { isExplicit = false; moveToArchive = null; Guid?result = null; byte[] array = (byte[])item.GetValueOrDefault <object>(InternalSchema.ArchiveTag); if (array != null && array.Length == PolicyTagHelper.SizeOfGuid) { result = new Guid?(new Guid(array)); } object valueOrDefault = item.GetValueOrDefault <object>(StoreObjectSchema.RetentionFlags); if (valueOrDefault != null && valueOrDefault is int) { isKeptInPlace = (((int)valueOrDefault & 32) != 0); } else { isKeptInPlace = false; } isExplicit = (item.GetValueOrDefault <object>(StoreObjectSchema.ArchivePeriod) != null); moveToArchive = (DateTime?)item.GetValueAsNullable <ExDateTime>(ItemSchema.ArchiveDate); return(result); }
public static void ClearPolicyTagForArchiveOnItem(StoreObject item) { if (item.GetValueOrDefault <object>(StoreObjectSchema.ArchiveTag) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.ArchiveTag }); } if (item.GetValueOrDefault <object>(StoreObjectSchema.ArchivePeriod) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.ArchivePeriod }); } if (item.GetValueOrDefault <object>(InternalSchema.ArchiveDate) != null) { item.DeleteProperties(new PropertyDefinition[] { InternalSchema.ArchiveDate }); } object valueOrDefault = item.GetValueOrDefault <object>(StoreObjectSchema.RetentionFlags); if (valueOrDefault != null && valueOrDefault is int) { RetentionAndArchiveFlags retentionAndArchiveFlags = (RetentionAndArchiveFlags)((int)valueOrDefault & -33); item[StoreObjectSchema.RetentionFlags] = (int)retentionAndArchiveFlags; } }
public static void SetPolicyTagForDeleteOnItem(PolicyTag policyTag, StoreObject item) { item[StoreObjectSchema.PolicyTag] = policyTag.PolicyGuid.ToByteArray(); CompositeRetentionProperty compositeRetentionProperty = null; byte[] valueOrDefault = item.GetValueOrDefault <byte[]>(ItemSchema.StartDateEtc); if (valueOrDefault != null) { try { compositeRetentionProperty = CompositeRetentionProperty.Parse(valueOrDefault, true); } catch (ArgumentException) { compositeRetentionProperty = null; } } if (compositeRetentionProperty == null) { compositeRetentionProperty = new CompositeRetentionProperty(); compositeRetentionProperty.Integer = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault2 = item.GetValueOrDefault <object>(InternalSchema.ReceivedTime); if (valueOrDefault2 == null) { valueOrDefault2 = item.GetValueOrDefault <object>(StoreObjectSchema.CreationTime); } if (valueOrDefault2 == null) { compositeRetentionProperty.Date = new DateTime?((DateTime)ExDateTime.Now); } else { compositeRetentionProperty.Date = new DateTime?((DateTime)((ExDateTime)valueOrDefault2)); } item[InternalSchema.StartDateEtc] = compositeRetentionProperty.GetBytes(true); } long fileTime = 0L; try { fileTime = compositeRetentionProperty.Date.Value.AddDays(policyTag.TimeSpanForRetention.TotalDays).ToFileTimeUtc(); } catch (ArgumentOutOfRangeException) { fileTime = 0L; } item[InternalSchema.RetentionPeriod] = (int)policyTag.TimeSpanForRetention.TotalDays; DateTime dateTime = DateTime.FromFileTimeUtc(fileTime); item[InternalSchema.RetentionDate] = dateTime; if (item.GetValueOrDefault <object>(StoreObjectSchema.ExplicitPolicyTag) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.ExplicitPolicyTag }); } }
public static Guid?GetPolicyTagForDeleteFromItem(StoreObject item, out bool isExplicit, out DateTime?deleteTime) { isExplicit = false; deleteTime = null; Guid?result = null; byte[] array = (byte[])item.GetValueOrDefault <object>(InternalSchema.PolicyTag); if (array != null && array.Length == PolicyTagHelper.SizeOfGuid) { result = new Guid?(new Guid(array)); } isExplicit = (item.GetValueOrDefault <object>(StoreObjectSchema.RetentionPeriod) != null); deleteTime = (DateTime?)item.GetValueAsNullable <ExDateTime>(ItemSchema.RetentionDate); return(result); }
internal static FolderSyncState GetSyncState(SyncStateStorage syncStateStorage, Folder syncStateParentFolder, ISyncProviderFactory syncProviderFactory, string syncStateName, Func <SyncStateStorage, StoreObject, FolderSyncStateMetadata, SyncStateInfo, ISyncProviderFactory, bool, ISyncLogger, FolderSyncState> creator, ISyncLogger syncLogger = null) { ArgumentValidator.ThrowIfNullOrEmpty("syncStateName", syncStateName); SyncStateInfo syncStateInfo = new FolderSyncStateInfo(syncStateName); StoreObject syncStateStoreObject = SyncState.GetSyncStateStoreObject(syncStateStorage, syncStateParentFolder, syncStateInfo, syncLogger, new PropertyDefinition[] { InternalSchema.SyncFolderSourceKey }); if (syncStateStoreObject == null) { return(null); } byte[] valueOrDefault = syncStateStoreObject.GetValueOrDefault <byte[]>(InternalSchema.SyncFolderSourceKey); if (syncProviderFactory != null) { try { syncProviderFactory.SetCollectionIdFromBytes(valueOrDefault); } catch (ArgumentException innerException) { syncStateStorage.DeleteFolderSyncState(syncStateName); syncStateStorage.DeviceMetadata.TryRemove(syncStateName, null); throw new CorruptSyncStateException(ServerStrings.ExSyncStateCorrupted(syncStateName), innerException); } } FolderSyncStateMetadata folderSyncStateMetadata = FolderSyncState.GetFolderSyncStateMetadata(syncStateStorage, syncStateStoreObject.Session as MailboxSession, syncStateName, syncLogger); if (creator == null) { return(new FolderSyncState(syncStateStorage, syncStateStoreObject, folderSyncStateMetadata, syncStateInfo, syncProviderFactory, false, syncLogger)); } return(creator(syncStateStorage, syncStateStoreObject, folderSyncStateMetadata, syncStateInfo, syncProviderFactory, false, syncLogger)); }
private static CompositeRetentionProperty GetSetStartDateEtc(PolicyTag policyTag, StoreObject item) { CompositeRetentionProperty compositeRetentionProperty = null; byte[] array = null; try { array = item.GetValueOrDefault <byte[]>(InternalSchema.StartDateEtc); } catch (NotInBagPropertyErrorException) { array = null; } if (array != null) { try { compositeRetentionProperty = CompositeRetentionProperty.Parse(array, true); } catch (ArgumentException) { compositeRetentionProperty = null; } } if (compositeRetentionProperty == null) { compositeRetentionProperty = new CompositeRetentionProperty(); compositeRetentionProperty.Integer = (int)policyTag.TimeSpanForRetention.TotalDays; object valueOrDefault = item.GetValueOrDefault <object>(InternalSchema.ReceivedTime); if (valueOrDefault == null) { valueOrDefault = item.GetValueOrDefault <object>(StoreObjectSchema.CreationTime); } if (valueOrDefault == null) { compositeRetentionProperty.Date = new DateTime?((DateTime)ExDateTime.Now); } else { compositeRetentionProperty.Date = new DateTime?((DateTime)((ExDateTime)valueOrDefault)); } item[InternalSchema.StartDateEtc] = compositeRetentionProperty.GetBytes(true); } return(compositeRetentionProperty); }
public static void ClearPolicyTagForDeleteOnItem(StoreObject item) { if (item.GetValueOrDefault <object>(StoreObjectSchema.PolicyTag) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.PolicyTag }); } if (item.GetValueOrDefault <object>(StoreObjectSchema.RetentionPeriod) != null) { item.DeleteProperties(new PropertyDefinition[] { StoreObjectSchema.RetentionPeriod }); } if (item.GetValueOrDefault <object>(InternalSchema.RetentionDate) != null) { item.DeleteProperties(new PropertyDefinition[] { InternalSchema.RetentionDate }); } }
public static void SetKeepInPlaceForArchiveOnItem(StoreObject item) { PolicyTagHelper.ClearPolicyTagForArchiveOnItem(item); object valueOrDefault = item.GetValueOrDefault <object>(StoreObjectSchema.RetentionFlags); RetentionAndArchiveFlags retentionAndArchiveFlags; if (valueOrDefault != null && valueOrDefault is int) { retentionAndArchiveFlags = (RetentionAndArchiveFlags)((int)valueOrDefault | 32); } else { retentionAndArchiveFlags = RetentionAndArchiveFlags.KeepInPlace; } item[StoreObjectSchema.RetentionFlags] = (int)retentionAndArchiveFlags; }