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); }
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); }