Esempio n. 1
0
 public static void Convert(DataRow dataRow)
 {
     foreach (object obj in dataRow.Table.Columns)
     {
         DataColumn dataColumn = (DataColumn)obj;
         Type       type       = dataColumn.ExtendedProperties["ExpectedType"] as Type;
         string     text       = dataRow[dataColumn] as string;
         if (type != null && dataRow[dataColumn].GetType() != type && text != null)
         {
             if (type == typeof(Unlimited <int>))
             {
                 dataRow[dataColumn] = Unlimited <int> .Parse(text);
             }
             else if (type == typeof(Unlimited <EnhancedTimeSpan>))
             {
                 dataRow[dataColumn] = Unlimited <EnhancedTimeSpan> .Parse(text);
             }
             else if (type == typeof(EmailAddressPolicyPriority))
             {
                 dataRow[dataColumn] = EmailAddressPolicyPriority.Parse(text);
             }
             else if (type == typeof(SmtpDomainWithSubdomains))
             {
                 dataRow[dataColumn] = SmtpDomainWithSubdomains.Parse(text);
             }
             else if (type == typeof(SmtpAddress))
             {
                 dataRow[dataColumn] = SmtpAddress.Parse(text);
             }
             else if (type == typeof(ProxyAddress))
             {
                 dataRow[dataColumn] = ProxyAddress.Parse(text);
             }
             else if (type == typeof(MailboxId))
             {
                 dataRow[dataColumn] = MailboxId.Parse(text);
             }
             else if (type == typeof(UMLanguage))
             {
                 dataRow[dataColumn] = UMLanguage.Parse(text);
             }
             else
             {
                 if (!(type == typeof(ExchangeObjectVersion)))
                 {
                     throw new ArgumentException(string.Format("Type {0} is not supported convert from string yet", type));
                 }
                 Regex regex = new Regex("^(?<Major>\\d+)\\.(?<Minor>\\d+) \\((?<buildMajor>\\d+)\\.(?<buildMinor>\\d+)\\.(?<buildVersion>\\d+)\\.(?<buildRevison>\\d+)\\)$");
                 Match match = regex.Match(text);
                 if (!match.Success)
                 {
                     throw new ArgumentException(string.Format("{0} is not a valid ExchangeObjectVersion", text));
                 }
                 dataRow[dataColumn] = new ExchangeObjectVersion(byte.Parse(match.Result("${Major}")), byte.Parse(match.Result("${Minor}")), byte.Parse(match.Result("${buildMajor}")), byte.Parse(match.Result("${buildMinor}")), ushort.Parse(match.Result("${buildVersion}")), ushort.Parse(match.Result("${buildRevison}")));
             }
         }
     }
 }
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter(new object[]
     {
         this.DataObject
     });
     base.InternalProcessRecord();
     if (!base.HasErrors)
     {
         bool flag = this.affectedPolicies != null && this.affectedPolicies.Length > 0;
         List <EmailAddressPolicy> list = new List <EmailAddressPolicy>();
         try
         {
             for (int i = 0; i < this.affectedPolicies.Length; i++)
             {
                 if (flag)
                 {
                     base.WriteProgress(Strings.ProgressEmailAddressPolicyPreparingPriority, Strings.ProgressEmailAddressPolicyAdjustingPriority(this.affectedPolicies[i].Identity.ToString()), i * 99 / this.affectedPolicies.Length + 1);
                 }
                 base.DataSession.Save(this.affectedPolicies[i]);
                 this.affectedPolicies[i].Priority = this.affectedPoliciesOriginalPriority[i];
                 list.Add(this.affectedPolicies[i]);
             }
             list.Clear();
         }
         finally
         {
             if (list.Count != 0)
             {
                 try
                 {
                     base.DataSession.Delete(this.DataObject);
                 }
                 catch (DataSourceTransientException)
                 {
                     this.WriteWarning(Strings.VerboseFailedToDeleteEapWhileRollingBack(this.DataObject.Id.ToString()));
                 }
             }
             for (int j = 0; j < list.Count; j++)
             {
                 EmailAddressPolicy emailAddressPolicy = list[j];
                 try
                 {
                     if (flag)
                     {
                         base.WriteProgress(Strings.ProgressEmailAddressPolicyPreparingPriority, Strings.ProgressEmailAddressPolicyRollingBackPriority(emailAddressPolicy.Identity.ToString()), j * 99 / list.Count + 1);
                     }
                     base.DataSession.Save(emailAddressPolicy);
                 }
                 catch (DataSourceTransientException)
                 {
                     this.WriteWarning(Strings.VerboseFailedToRollbackPriority(emailAddressPolicy.Id.ToString()));
                 }
             }
         }
     }
     TaskLogger.LogExit();
 }
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            IConfigurationSession configurationSession = (IConfigurationSession)base.DataSession;

            this.containerId = base.CurrentOrgContainerId.GetDescendantId(EmailAddressPolicy.RdnEapContainerToOrganization);
            this.DataObject  = (EmailAddressPolicy)base.PrepareDataObject();
            if (!base.HasErrors)
            {
                this.DataObject.SetId(this.containerId.GetChildId(base.Name));
                if (!this.DataObject.IsModified(EmailAddressPolicySchema.Priority))
                {
                    this.DataObject.Priority = EmailAddressPolicyPriority.Lowest;
                }
                if (!base.HasErrors && (this.DataObject.Priority != 0 || !this.DataObject.IsModified(EmailAddressPolicySchema.Priority)))
                {
                    UpdateEmailAddressPolicy.PreparePriorityOfEapObjects(base.OrganizationId ?? OrganizationId.ForestWideOrgId, this.DataObject, base.DataSession, new TaskExtendedErrorLoggingDelegate(this.WriteError), out this.affectedPolicies, out this.affectedPoliciesOriginalPriority);
                }
                OrganizationalUnitIdParameter organizationalUnitIdParameter = null;
                if (base.Fields.IsModified("RecipientContainer"))
                {
                    if (this.RecipientContainer == null)
                    {
                        this.DataObject.RecipientContainer = null;
                    }
                    else
                    {
                        organizationalUnitIdParameter = this.RecipientContainer;
                    }
                }
                else if (this.DataObject.RecipientContainer != null)
                {
                    organizationalUnitIdParameter = new OrganizationalUnitIdParameter(this.DataObject.RecipientContainer);
                }
                if (organizationalUnitIdParameter != null)
                {
                    if (base.GlobalConfigSession.IsInPreE14InteropMode())
                    {
                        base.WriteError(new InvalidOperationException(Strings.ErrorCannotSetRecipientContainer), ErrorCategory.InvalidArgument, this.DataObject.Identity);
                    }
                    this.DataObject.RecipientContainer = NewAddressBookBase.GetRecipientContainer(organizationalUnitIdParameter, (IConfigurationSession)base.DataSession, base.OrganizationId ?? OrganizationId.ForestWideOrgId, new NewAddressBookBase.GetUniqueObject(base.GetDataObject <ExchangeOrganizationalUnit>), new Task.ErrorLoggerDelegate(base.WriteError), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose));
                }
            }
            TaskLogger.LogExit();
            return(this.DataObject);
        }
Esempio n. 4
0
 internal static int PreparePriorityOfEapObjects(OrganizationId organizationId, EmailAddressPolicy policy, IConfigDataProvider session, TaskExtendedErrorLoggingDelegate writeError, out EmailAddressPolicy[] policiesAdjusted, out EmailAddressPolicyPriority[] originalPriorities)
 {
     policiesAdjusted   = null;
     originalPriorities = null;
     try
     {
         QueryFilter queryFilter = new AndFilter(new QueryFilter[]
         {
             new ComparisonFilter(ComparisonOperator.LessThan, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Lowest),
             new ComparisonFilter(ComparisonOperator.GreaterThanOrEqual, EmailAddressPolicySchema.Priority, EmailAddressPolicyPriority.Highest)
         });
         if (policy.ObjectState != ObjectState.New)
         {
             queryFilter = new AndFilter(new QueryFilter[]
             {
                 queryFilter,
                 new ComparisonFilter(ComparisonOperator.NotEqual, ADObjectSchema.Id, new ADObjectId(null, policy.Guid))
             });
         }
         IConfigurationSession configurationSession       = (IConfigurationSession)session;
         ADPagedReader <EmailAddressPolicy> adpagedReader = configurationSession.FindPaged <EmailAddressPolicy>(EmailAddressPolicyIdParameter.GetRootContainerId(configurationSession, organizationId), QueryScope.OneLevel, queryFilter, new SortBy(EmailAddressPolicySchema.Priority, SortOrder.Ascending), 0);
         EmailAddressPolicy[] array = adpagedReader.ReadAllPages();
         Array.Sort <EmailAddressPolicy>(array, EmailAddressPolicy.PriorityComparer);
         if (policy.Priority != EmailAddressPolicyPriority.Lowest)
         {
             if (policy.ObjectState == ObjectState.New)
             {
                 if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > 1 + array[array.Length - 1].Priority))
                 {
                     writeError(new ArgumentException(Strings.ErrorInvalidEapNewPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true);
                 }
             }
             else if ((array.Length == 0 && policy.Priority != EmailAddressPolicyPriority.Highest) || (array.Length > 0 && policy.Priority > array[array.Length - 1].Priority))
             {
                 writeError(new ArgumentException(Strings.ErrorInvalidEapSetPriority(policy.Priority.ToString()), "Priority"), ErrorCategory.InvalidArgument, policy.Id, true);
             }
         }
         List <EmailAddressPolicy>         list  = new List <EmailAddressPolicy>();
         List <EmailAddressPolicyPriority> list2 = new List <EmailAddressPolicyPriority>();
         bool flag = false;
         for (int i = 0; i < array.Length; i++)
         {
             int num = i + (flag ? 1 : 0) + EmailAddressPolicyPriority.Highest;
             if (!flag && num == policy.Priority)
             {
                 flag = true;
                 num++;
             }
             EmailAddressPolicyPriority priority = array[i].Priority;
             UpdateEmailAddressPolicy.CheckEapVersion(array[i]);
             array[i].Priority = (EmailAddressPolicyPriority)num;
             if (array[i].IsChanged(EmailAddressPolicySchema.Priority))
             {
                 list.Add(array[i]);
                 list2.Add(priority);
             }
         }
         if (!flag)
         {
             UpdateEmailAddressPolicy.CheckEapVersion(policy);
             policy.Priority = (EmailAddressPolicyPriority)(array.Length + EmailAddressPolicyPriority.Highest);
         }
         foreach (EmailAddressPolicy emailAddressPolicy in list)
         {
             ValidationError[] array2 = emailAddressPolicy.Validate();
             int num2 = 0;
             while (array2.Length > num2)
             {
                 writeError(new InvalidOperationException(Strings.ErrorInvalidOperationOnEapObject(emailAddressPolicy.Id.ToString(), array2[num2].Description)), ErrorCategory.InvalidData, policy.Id, array2.Length - 1 == num2);
                 num2++;
             }
         }
         policiesAdjusted   = list.ToArray();
         originalPriorities = list2.ToArray();
         return(list.Count);
     }
     catch (DataSourceTransientException exception)
     {
         writeError(exception, ErrorCategory.ReadError, policy.Id, true);
     }
     return(-1);
 }