public static UnifiedPolicySettingStatus ToStatusStorage(UnifiedPolicyStatus status)
        {
            UnifiedPolicySettingStatus unifiedPolicySettingStatus = new UnifiedPolicySettingStatus();

            unifiedPolicySettingStatus[ADObjectSchema.OrganizationalUnitRoot] = new ADObjectId(status.TenantId);
            unifiedPolicySettingStatus.SetId((ADObjectId)DalHelper.ConvertFromStoreObject(status.ObjectId, typeof(ADObjectId)));
            unifiedPolicySettingStatus.SettingType           = UnifiedPolicyStorageFactory.ConvertToSettingType(status.ObjectType);
            unifiedPolicySettingStatus.ParentObjectId        = status.ParentObjectId;
            unifiedPolicySettingStatus.Container             = status.Workload.ToString();
            unifiedPolicySettingStatus.ObjectVersion         = status.Version.InternalStorage;
            unifiedPolicySettingStatus.ErrorCode             = (int)status.ErrorCode;
            unifiedPolicySettingStatus.ErrorMessage          = status.ErrorMessage;
            unifiedPolicySettingStatus.WhenProcessedUTC      = status.WhenProcessedUTC;
            unifiedPolicySettingStatus.AdditionalDiagnostics = status.AdditionalDiagnostics;
            switch (status.Mode)
            {
            case Mode.PendingDeletion:
                unifiedPolicySettingStatus.ObjectStatus = StatusMode.PendingDeletion;
                break;

            case Mode.Deleted:
                unifiedPolicySettingStatus.ObjectStatus = StatusMode.Deleted;
                break;

            default:
                unifiedPolicySettingStatus.ObjectStatus = StatusMode.Active;
                break;
            }
            return(unifiedPolicySettingStatus);
        }
        internal PolicyDistributionErrorDetails CreatePolicyDistributionError(Workload singleWorkload, UnifiedPolicyStorageBase storage, UnifiedPolicySettingStatus status)
        {
            bool flag = false;
            UnifiedPolicyErrorCode errorCode = UnifiedPolicyErrorCode.Unknown;
            string   empty                 = string.Empty;
            DateTime lastErrorTime         = DateTime.UtcNow;
            string   additionalDiagnostics = string.Empty;

            if (status == null)
            {
                if (storage is ScopeStorage)
                {
                    flag                  = true;
                    errorCode             = UnifiedPolicyErrorCode.PolicySyncTimeout;
                    empty                 = string.Empty;
                    lastErrorTime         = DateTime.UtcNow;
                    additionalDiagnostics = (this.includeDiagnosticInfo ? Strings.DiagnoseMissingStatusForScope(storage.WhenChangedUTC.Value) : string.Empty);
                }
                else if (storage.WhenChangedUTC != null)
                {
                    DateTime dateTime = storage.WhenChangedUTC.Value.Add(PolicySettingStatusHelpers.policySyncTimeoutInterval);
                    if (dateTime < DateTime.UtcNow)
                    {
                        flag                  = true;
                        errorCode             = UnifiedPolicyErrorCode.PolicySyncTimeout;
                        empty                 = string.Empty;
                        lastErrorTime         = dateTime;
                        additionalDiagnostics = (this.includeDiagnosticInfo ? Strings.DiagnosePendingStatusTimeout(storage.WhenChangedUTC.Value, PolicySettingStatusHelpers.policySyncTimeoutInterval) : string.Empty);
                    }
                }
            }
            else if (status.ErrorCode != 0)
            {
                flag                  = true;
                errorCode             = (UnifiedPolicyErrorCode)status.ErrorCode;
                empty                 = string.Empty;
                lastErrorTime         = status.WhenProcessedUTC;
                additionalDiagnostics = (this.includeDiagnosticInfo ? status.AdditionalDiagnostics : string.Empty);
            }
            if (flag)
            {
                return(new PolicyDistributionErrorDetails(this.GetStorageObjectName(storage), storage.Guid, PolicySettingStatusHelpers.GetConfigurationObjectTypeFromString(storage.GetType().Name), singleWorkload, errorCode, empty, lastErrorTime, additionalDiagnostics));
            }
            return(null);
        }
        private static void DeleteReferencedObject(ITenantConfigurationSession session, UnifiedPolicySettingStatus deleteStatus)
        {
            IConfigurable configurable = null;
            bool          flag         = false;
            QueryFilter   filter       = UnifiedPolicySession.CreateGetObjectQueryFilter(deleteStatus.OrganizationalUnitRoot.ObjectGuid, deleteStatus.Id.ObjectGuid, true);
            string        settingType;

            if ((settingType = deleteStatus.SettingType) != null)
            {
                if (!(settingType == "AssociationStorage"))
                {
                    if (!(settingType == "BindingStorage"))
                    {
                        if (!(settingType == "PolicyStorage"))
                        {
                            if (!(settingType == "RuleStorage"))
                            {
                                if (!(settingType == "ScopeStorage"))
                                {
                                    goto IL_F7;
                                }
                                configurable = session.Find <ScopeStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            }
                            else
                            {
                                configurable = session.Find <RuleStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            }
                        }
                        else
                        {
                            configurable = session.Find <PolicyStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                            flag         = true;
                        }
                    }
                    else
                    {
                        configurable = session.Find <BindingStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                    }
                }
                else
                {
                    configurable = session.Find <AssociationStorage>(filter, null, false, null).FirstOrDefault <IConfigurable>();
                }
                if (flag)
                {
                    IEnumerable <RuleStorage> enumerable = from RuleStorage r in session.Find <RuleStorage>(new ComparisonFilter(ComparisonOperator.Equal, DalHelper.IncludeTombstonesProperty, true), null, false, null)
                                                           where r.ParentPolicyId == deleteStatus.Id.ObjectGuid && r.ObjectState != ObjectState.Deleted
                                                           select r;
                    foreach (RuleStorage instance in enumerable)
                    {
                        session.Delete(instance);
                    }
                    IEnumerable <BindingStorage> enumerable2 = session.Find <BindingStorage>(QueryFilter.AndTogether(new QueryFilter[]
                    {
                        new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicyStorageBaseSchema.ContainerProp, deleteStatus.Id.ObjectGuid),
                        new ComparisonFilter(ComparisonOperator.Equal, DalHelper.IncludeTombstonesProperty, true)
                    }), null, false, null).Cast <BindingStorage>();
                    foreach (BindingStorage instance2 in enumerable2)
                    {
                        session.Delete(instance2);
                    }
                }
                if (configurable != null && configurable.ObjectState != ObjectState.Deleted)
                {
                    session.Delete(configurable);
                }
                return;
            }
IL_F7:
            throw new NotSupportedException(string.Format("Unable to delete object of type '{0}'", deleteStatus.SettingType ?? "<null>"));
        }
 private static bool HasDistributionFailed(UnifiedPolicyStorageBase storageObject, UnifiedPolicySettingStatus status)
 {
     return(status.ObjectVersion == storageObject.PolicyVersion && status.ErrorCode != 0);
 }