internal RequestJobObjectId(ADUser adUser) { if (adUser == null) { throw new ArgumentNullException("adUser", "An ADUser must be provided to this constructor"); } this.adUser = adUser; this.sourceUser = null; this.targetUser = null; this.indexEntry = null; Guid a; Guid a2; RequestIndexEntryProvider.GetMoveGuids(adUser, out a, out a2); if (a != Guid.Empty && a2 != Guid.Empty) { this.requestGuid = a; this.mdbGuid = a2; } else { this.requestGuid = adUser.ExchangeGuid; this.mdbGuid = Guid.Empty; } this.messageId = null; }
public override MRSRequestMailboxEntry Read(RequestIndexEntryProvider requestIndexEntryProvider, RequestIndexEntryObjectId identity) { this.ValidateRequestIndexId(identity.IndexId); ADUser aduser = requestIndexEntryProvider.ReadADUser(identity.IndexId.Mailbox, Guid.Empty); if (aduser == null) { return(null); } ExchangePrincipal mailboxOwner = ExchangePrincipal.FromADUser(aduser, RemotingOptions.AllowCrossSite); MRSRequestMailboxEntry result; using (MailboxSession mailboxSession = MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, "Client=MSExchangeMigration")) { MailboxStoreTypeProvider session = new MailboxStoreTypeProvider(aduser) { MailboxSession = mailboxSession }; MRSRequestMailboxEntry mrsrequestMailboxEntry = MRSRequest.Read <MRSRequestMailboxEntry>(session, identity.RequestGuid); mrsrequestMailboxEntry.RequestIndexId = identity.IndexId; mrsrequestMailboxEntry.OrganizationId = identity.OrganizationId; result = mrsrequestMailboxEntry; } return(result); }
public override T Read(RequestIndexEntryProvider requestIndexEntryProvider, RequestIndexEntryObjectId identity) { ArgumentValidator.ThrowIfNull("targetExchangeGuid", identity.TargetExchangeGuid); ADRecipient adrecipient = requestIndexEntryProvider.Read <ADRecipient>((IRecipientSession session) => session.FindByExchangeGuidIncludingAlternate(identity.TargetExchangeGuid)); if (adrecipient == null) { MrsTracer.Common.Warning("No ADRecipient found with ExchangeGuid '{0}' including alternates.", new object[] { identity.TargetExchangeGuid }); return(default(T)); } ADUser aduser = adrecipient as ADUser; if (aduser == null) { MrsTracer.Common.Warning("'{0}' is not a user.", new object[] { adrecipient.Id.ToString() }); return(default(T)); } T t = Activator.CreateInstance <T>(); t.TargetUser = aduser; t.TargetExchangeGuid = identity.TargetExchangeGuid; t.TargetMDB = aduser.Database; T result = t; result.RequestGuid = identity.RequestGuid; result.SetExchangePrincipal(); return(result); }
public IConfigurable Read <T>(ObjectId identity) where T : IConfigurable, new() { if (identity == null) { throw new ArgumentNullException("identity"); } RequestIndexEntryObjectId requestIndexEntryObjectId = identity as RequestIndexEntryObjectId; if (requestIndexEntryObjectId == null) { throw new ArgumentException("This provider only supports RequestIndexEntryObjectIds", "identity"); } Type typeFromHandle = typeof(T); if (!typeFromHandle.IsSubclassOf(typeof(RequestBase)) && !typeof(IRequestIndexEntry).IsAssignableFrom(typeFromHandle)) { throw new ArgumentException("This provider only supports reading types of RequestBase or IRequestIndexEntry"); } IRequestIndexEntry requestIndexEntry = this.Read(requestIndexEntryObjectId); if (requestIndexEntry == null || requestIndexEntry is T) { return(requestIndexEntry); } if (!typeFromHandle.IsSubclassOf(typeof(RequestBase))) { return(null); } return(RequestIndexEntryProvider.CreateRequest <T>(requestIndexEntry)); }
internal static void ValidateRequestJob(RequestJobBase requestJob) { if (requestJob.IsFake || requestJob.WorkItemQueueMdb == null) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMissing); requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestNotDeserialized; return; } if (requestJob.OriginatingMDBGuid != Guid.Empty && requestJob.OriginatingMDBGuid != requestJob.WorkItemQueueMdb.ObjectGuid) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned); requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestInWrongMDB(requestJob.OriginatingMDBGuid, requestJob.WorkItemQueueMdb.ObjectGuid); return; } if (requestJob.OriginatingMDBGuid == Guid.Empty) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; return; } MailboxRelocationRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob); if (MailboxRelocationRequestStatistics.IsTerminalState(requestJob)) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; return; } if (!requestJob.ValidateUser(requestJob.User, requestJob.UserId)) { return; } Guid guid; Guid guid2; RequestIndexEntryProvider.GetMoveGuids(requestJob.User, out guid, out guid2); if (guid != requestJob.ExchangeGuid) { MrsTracer.Common.Error("Orphaned RequestJob: mailbox guid does not match between AD {0} and workitem queue {1}.", new object[] { requestJob.User.ExchangeGuid, requestJob.ExchangeGuid }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationMailboxGuidsDontMatch(guid, requestJob.ExchangeGuid); return; } if (!MailboxRelocationRequestStatistics.ValidateNoOtherRequests(requestJob)) { return; } if (CommonUtils.IsImplicitSplit(requestJob.Flags, requestJob.User)) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ErrorImplicitSplit; return; } requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; }
public ScopeRestorer(RequestIndexEntryProvider owner) { this.ownerProvider = owner; this.savedRecipSession = owner.recipSession; this.savedConfigSession = owner.configSession; this.savedDomainController = owner.domainController; this.savedOrgId = owner.orgId; }
public IRequestIndexEntry Read(RequestIndexEntryObjectId objectId) { if (objectId.IndexId.RequestIndexEntryType == null) { return(null); } return(RequestIndexEntryProvider.Handle <IRequestIndexEntry>(objectId.IndexId.RequestIndexEntryType, (IRequestIndexEntryHandler handler) => handler.Read(this, objectId))); }
void IRequestIndexEntryHandler.Save(RequestIndexEntryProvider requestIndexEntryProvider, IRequestIndexEntry instance) { if (instance == null) { throw new ArgumentNullException("instance"); } this.Save(requestIndexEntryProvider, (T)((object)instance)); }
public void Save(IConfigurable instance) { IRequestIndexEntry requestIndexEntry = RequestIndexEntryProvider.ValidateInstance(instance); RequestIndexEntryProvider.Handle(requestIndexEntry.GetType(), delegate(IRequestIndexEntryHandler handler) { handler.Save(this, requestIndexEntry); }); }
private static T Handle <T>(Type requestIndexEntryType, Func <IRequestIndexEntryHandler, T> function) { T returnValue = default(T); RequestIndexEntryProvider.Handle(requestIndexEntryType, delegate(IRequestIndexEntryHandler handler) { returnValue = function(handler); }); return(returnValue); }
IRequestIndexEntry IRequestIndexEntryHandler.Read(RequestIndexEntryProvider requestIndexEntryProvider, RequestIndexEntryObjectId identity) { Type typeFromHandle = typeof(T); if (identity.IndexId.RequestIndexEntryType != typeFromHandle) { throw new ArgumentException(string.Format("The provided identity is requesting an IRequestIndexEntry of type {0}, but this handler only supports type {1}.", identity.IndexId.RequestIndexEntryType.Name, typeFromHandle.Name), "identity"); } return(this.Read(requestIndexEntryProvider, identity)); }
public override void Save(RequestIndexEntryProvider requestIndexEntryProvider, T instance) { ArgumentValidator.ThrowIfNull("instance", instance); ArgumentValidator.ThrowIfNull("instance.TargetUser", instance.TargetUser); ArgumentValidator.ThrowIfNull("instance.TargetExchangeGuid", instance.TargetExchangeGuid); instance.SetExchangePrincipal(); using (MailboxSession mailboxSession = MailboxSession.OpenAsAdmin(instance.GetExchangePrincipal(), CultureInfo.InvariantCulture, "Client=MSExchangeMigration")) { instance.Save(new MailboxStoreTypeProvider(instance.TargetUser) { MailboxSession = mailboxSession }); } }
public override IEnumerable <MRSRequestMailboxEntry> FindPaged(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) { RequestIndexEntryQueryFilter requestIndexEntryQueryFilter = filter as RequestIndexEntryQueryFilter; ADUser aduser = requestIndexEntryProvider.ReadADUser(requestIndexEntryQueryFilter.MailboxId, Guid.Empty); if (aduser == null) { return(null); } List <MRSRequestMailboxEntry> list = new List <MRSRequestMailboxEntry>(MailboxRequestIndexEntryHandler.GetRequestIndexEntries(aduser, requestIndexEntryQueryFilter)); foreach (MRSRequestMailboxEntry mrsrequestMailboxEntry in list) { mrsrequestMailboxEntry.RequestIndexId = new RequestIndexId(requestIndexEntryQueryFilter.MailboxId); mrsrequestMailboxEntry.OrganizationId = aduser.OrganizationId; } return(list); }
public override void Delete(RequestIndexEntryProvider requestIndexEntryProvider, MRSRequestMailboxEntry instance) { this.ValidateRequestIndexId(instance.RequestIndexId); ADUser aduser = requestIndexEntryProvider.ReadADUser(instance.RequestIndexId.Mailbox, Guid.Empty); if (instance.Principal == null) { instance.Principal = ExchangePrincipal.FromADUser(aduser, RemotingOptions.AllowCrossSite); } using (MailboxSession mailboxSession = MailboxSession.OpenAsAdmin(instance.Principal, CultureInfo.InvariantCulture, "Client=MSExchangeMigration")) { MailboxStoreTypeProvider session = new MailboxStoreTypeProvider(aduser) { MailboxSession = mailboxSession }; instance.Delete(session); } }
internal IEnumerable <T> InternalGetObjects <T>(ObjectId rootId, IConfigDataProvider session, OptionalIdentityData optionalData, out LocalizedString?notFoundReason) where T : IConfigurable, new() { if (session == null) { throw new ArgumentNullException("session"); } RequestIndexEntryProvider requestIndexEntryProvider = session as RequestIndexEntryProvider; if (requestIndexEntryProvider == null) { throw new ArgumentException(MrsStrings.MustProvideValidSessionForFindingRequests); } if (this.requestGuid != Guid.Empty && this.indexToUse != null) { List <T> list = new List <T>(1); RequestIndexEntryObjectId identity = new RequestIndexEntryObjectId(this.requestGuid, this.RequestType, this.OrganizationId, this.indexToUse, null); T t = (T)((object)requestIndexEntryProvider.Read <T>(identity)); if (t != null) { list.Add(t); notFoundReason = null; } else { notFoundReason = new LocalizedString?(MrsStrings.NoSuchRequestInSpecifiedIndex); } return(list); } if (string.IsNullOrEmpty(this.requestName) || this.indexToUse == null) { notFoundReason = new LocalizedString?(MrsStrings.NotEnoughInformationSupplied); return(new List <T>(0)); } if (this.mailboxId != null) { QueryFilter filter = new RequestIndexEntryQueryFilter(this.requestName, this.mailboxId, this.RequestType, this.indexToUse, true); notFoundReason = new LocalizedString?(MrsStrings.NoSuchRequestInSpecifiedIndex); return(requestIndexEntryProvider.FindPaged <T>(filter, rootId, true, null, 2)); } QueryFilter filter2 = new RequestIndexEntryQueryFilter(this.requestName, null, this.RequestType, this.indexToUse, false); notFoundReason = new LocalizedString?(MrsStrings.NoSuchRequestInSpecifiedIndex); return(requestIndexEntryProvider.FindPaged <T>(filter2, rootId, true, null, 2)); }
public IEnumerable <T> FindPaged <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) where T : IConfigurable, new() { Type requestIndexEntryType = RequestIndexEntryProvider.ValidateQueryFilter <T>(filter); IEnumerable <IRequestIndexEntry> enumerable = RequestIndexEntryProvider.Handle <IEnumerable <IRequestIndexEntry> >(requestIndexEntryType, (IRequestIndexEntryHandler handler) => handler.FindPaged(this, filter, rootId, deepSearch, sortBy, pageSize)); if (enumerable == null) { return(Array <T> .Empty); } if (typeof(T).IsSubclassOf(typeof(RequestBase))) { return(enumerable.Select(new Func <IRequestIndexEntry, T>(RequestIndexEntryProvider.CreateRequest <T>))); } if (enumerable is IEnumerable <T> ) { return((IEnumerable <T>)enumerable); } MrsTracer.Common.Warning("IndexId not supported by this provider.", new object[0]); return(Array <T> .Empty); }
public static void CreateAndPopulateRequestIndexEntries(RequestJobBase requestJobBase, RequestIndexId requestIndexId) { if (requestJobBase == null) { throw new ArgumentNullException("requestJobBase"); } if (requestJobBase.IndexEntries == null) { requestJobBase.IndexEntries = new List <IRequestIndexEntry>(); } if (requestJobBase.IndexIds == null) { requestJobBase.IndexIds = new List <RequestIndexId>(); } RequestIndexEntryProvider.Handle(requestIndexId.RequestIndexEntryType, delegate(IRequestIndexEntryHandler handler) { IRequestIndexEntry item = handler.CreateRequestIndexEntryFromRequestJob(requestJobBase, requestIndexId); requestJobBase.IndexIds.Add(requestIndexId); requestJobBase.IndexEntries.Add(item); }); }
public IConfigurable[] Find <T>(QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy) where T : IConfigurable, new() { Type requestIndexEntryType = RequestIndexEntryProvider.ValidateQueryFilter <T>(filter); IRequestIndexEntry[] array = RequestIndexEntryProvider.Handle <IRequestIndexEntry[]>(requestIndexEntryType, (IRequestIndexEntryHandler handler) => handler.Find(this, filter, rootId, deepSearch, sortBy)); if (array == null) { return(Array <IConfigurable> .Empty); } Type typeFromHandle = typeof(T); if (array.GetType().GetElementType() == typeFromHandle) { return(array.Cast <IConfigurable>().ToArray <IConfigurable>()); } if (typeFromHandle.IsSubclassOf(typeof(RequestBase))) { return(array.Select(new Func <IRequestIndexEntry, T>(RequestIndexEntryProvider.CreateRequest <T>)).Cast <IConfigurable>().ToArray <IConfigurable>()); } MrsTracer.Common.Warning("IndexId not supported by this provider.", new object[0]); return(Array <IConfigurable> .Empty); }
public static void CreateAndPopulateRequestIndexEntries(RequestJobBase requestJobBase, IConfigurationSession session) { if (requestJobBase == null) { throw new ArgumentNullException("requestJobBase"); } if (requestJobBase.IndexEntries == null) { requestJobBase.IndexEntries = new List <IRequestIndexEntry>(); } if (requestJobBase.IndexIds == null) { requestJobBase.IndexIds = new List <RequestIndexId>(); } RequestIndexId indexId = new RequestIndexId(RequestIndexLocation.AD); RequestIndexEntryProvider.Handle(indexId.RequestIndexEntryType, delegate(IRequestIndexEntryHandler handler) { IRequestIndexEntry item = handler.CreateRequestIndexEntryFromRequestJob(requestJobBase, session); requestJobBase.IndexIds.Add(indexId); requestJobBase.IndexEntries.Add(item); }); }
public override void Save(RequestIndexEntryProvider requestIndexEntryProvider, MRSRequestWrapper instance) { ADHandler.Save(requestIndexEntryProvider.ConfigSession, instance); }
public override MRSRequestWrapper Read(RequestIndexEntryProvider requestIndexEntryProvider, RequestIndexEntryObjectId identity) { return(ADHandler.Read(requestIndexEntryProvider.ConfigSession, identity.RequestGuid, identity.RequestType)); }
public override IEnumerable <MRSRequestWrapper> FindPaged(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) { QueryFilter filter2 = ADHandler.ConvertFilter(filter); return(requestIndexEntryProvider.ConfigSession.FindPaged <MRSRequestWrapper>(filter2, rootId, deepSearch, sortBy, pageSize)); }
public override MRSRequestWrapper[] Find(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy) { return(ADHandler.Find(requestIndexEntryProvider.ConfigSession, filter, rootId, deepSearch, sortBy)); }
internal static void ValidateRequestJob(RequestJobBase requestJob) { if (requestJob.IsFake || requestJob.WorkItemQueueMdb == null) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMissing); requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestNotDeserialized; return; } if (requestJob.OriginatingMDBGuid != Guid.Empty && requestJob.OriginatingMDBGuid != requestJob.WorkItemQueueMdb.ObjectGuid) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned); requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestInWrongMDB(requestJob.OriginatingMDBGuid, requestJob.WorkItemQueueMdb.ObjectGuid); return; } if (requestJob.OriginatingMDBGuid == Guid.Empty) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; return; } MoveRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob); if (requestJob.CancelRequest || requestJob.Status == RequestStatus.Completed || requestJob.Status == RequestStatus.CompletedWithWarning) { requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; return; } if (!requestJob.ValidateUser(requestJob.User, requestJob.UserId)) { return; } Guid guid; Guid guid2; RequestIndexEntryProvider.GetMoveGuids(requestJob.User, out guid, out guid2); if (guid != requestJob.ExchangeGuid) { MrsTracer.Common.Error("Orphaned RequestJob: mailbox guid does not match between AD {0} and workitem queue {1}.", new object[] { requestJob.User.ExchangeGuid, requestJob.ExchangeGuid }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationMailboxGuidsDontMatch(guid, requestJob.ExchangeGuid); return; } if (requestJob.User.MailboxMoveStatus == RequestStatus.None) { MrsTracer.Common.Warning("Orphaned RequestJob: AD user {0} is not being moved.", new object[] { requestJob.User.ToString() }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned); requestJob.ValidationMessage = MrsStrings.ValidationADUserIsNotBeingMoved; return; } if (requestJob.Flags != requestJob.User.MailboxMoveFlags) { if ((requestJob.Flags & RequestJobBase.StaticFlags) != (requestJob.User.MailboxMoveFlags & RequestJobBase.StaticFlags)) { MrsTracer.Common.Error("Mismatched RequestJob: flags don't match: AD [{0}], workitem queue [{1}]", new object[] { requestJob.User.MailboxMoveFlags, requestJob.Flags }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationFlagsMismatch(requestJob.User.MailboxMoveFlags.ToString(), requestJob.Flags.ToString()); return; } MrsTracer.Common.Debug("Possibly mismatched RequestJob: flags don't match: AD [{0}], workitem queue [{1}]", new object[] { requestJob.User.MailboxMoveFlags, requestJob.Flags }); } if (requestJob.PrimaryIsMoving) { if (requestJob.SourceIsLocal && (requestJob.SourceDatabase == null || !requestJob.SourceDatabase.Equals(requestJob.User.MailboxMoveSourceMDB))) { MrsTracer.Common.Error("Mismatched RequestJob: Source database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveSourceMDB, requestJob.SourceDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationSourceMDBMismatch((requestJob.User.MailboxMoveSourceMDB != null) ? requestJob.User.MailboxMoveSourceMDB.ToString() : "(null)", (requestJob.SourceDatabase != null) ? requestJob.SourceDatabase.ToString() : "(null)"); return; } if (requestJob.TargetIsLocal && (requestJob.TargetDatabase == null || (!requestJob.RehomeRequest && !requestJob.TargetDatabase.Equals(requestJob.User.MailboxMoveTargetMDB)))) { MrsTracer.Common.Error("Target database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveTargetMDB, requestJob.TargetDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationTargetMDBMismatch((requestJob.User.MailboxMoveTargetMDB != null) ? requestJob.User.MailboxMoveTargetMDB.ToString() : "(null)", (requestJob.TargetDatabase != null) ? requestJob.TargetDatabase.ToString() : "(null)"); return; } } if (requestJob.JobType >= MRSJobType.RequestJobE14R5_PrimaryOrArchiveExclusiveMoves && requestJob.ArchiveIsMoving) { if (requestJob.SourceIsLocal && (requestJob.SourceArchiveDatabase == null || !requestJob.SourceArchiveDatabase.Equals(requestJob.User.MailboxMoveSourceArchiveMDB))) { MrsTracer.Common.Error("Mismatched RequestJob: Source archive database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveSourceArchiveMDB, requestJob.SourceArchiveDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationSourceArchiveMDBMismatch((requestJob.User.MailboxMoveSourceArchiveMDB != null) ? requestJob.User.MailboxMoveSourceArchiveMDB.ToString() : "(null)", (requestJob.SourceArchiveDatabase != null) ? requestJob.SourceArchiveDatabase.ToString() : "(null)"); return; } if (requestJob.TargetIsLocal && (requestJob.TargetArchiveDatabase == null || (!requestJob.RehomeRequest && !requestJob.TargetArchiveDatabase.Equals(requestJob.User.MailboxMoveTargetArchiveMDB)))) { MrsTracer.Common.Error("Target archive database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveTargetArchiveMDB, requestJob.TargetArchiveDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationTargetArchiveMDBMismatch((requestJob.User.MailboxMoveTargetArchiveMDB != null) ? requestJob.User.MailboxMoveTargetArchiveMDB.ToString() : "(null)", (requestJob.TargetArchiveDatabase != null) ? requestJob.TargetArchiveDatabase.ToString() : "(null)"); return; } } requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; }
public virtual IEnumerable <T> FindPaged(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) { return(Array <T> .Empty); }
string IMailboxReplicationService.ValidateAndPopulateRequestJob(string requestJobXML, out string reportEntryXMLs) { string reportString = null; string resultString = null; try { this.ForwardKnownExceptions(delegate { List <ReportEntry> list = new List <ReportEntry>(); try { RequestJobXML requestJob = XMLSerializableBase.Deserialize <RequestJobXML>(requestJobXML, true); using (TransactionalRequestJob transactionalRequestJob = new TransactionalRequestJob(requestJob)) { transactionalRequestJob.IsFake = true; transactionalRequestJob.Identity = new RequestJobObjectId((transactionalRequestJob.RequestType == MRSRequestType.Move) ? transactionalRequestJob.ExchangeGuid : transactionalRequestJob.RequestGuid, (transactionalRequestJob.WorkItemQueueMdb == null) ? Guid.Empty : transactionalRequestJob.WorkItemQueueMdb.ObjectGuid, null); RequestIndexEntryProvider requestIndexEntryProvider = new RequestIndexEntryProvider(); using (requestIndexEntryProvider.RescopeTo(transactionalRequestJob.DomainControllerToUpdate, transactionalRequestJob.OrganizationId)) { if (transactionalRequestJob.SourceUserId != null) { transactionalRequestJob.SourceUser = requestIndexEntryProvider.ReadADUser(transactionalRequestJob.SourceUserId, transactionalRequestJob.SourceExchangeGuid); } if (transactionalRequestJob.TargetUserId != null) { transactionalRequestJob.TargetUser = requestIndexEntryProvider.ReadADUser(transactionalRequestJob.TargetUserId, transactionalRequestJob.TargetExchangeGuid); } } if (MailboxSyncerJobs.ContainsJob(transactionalRequestJob.IdentifyingGuid)) { resultString = requestJobXML; } else { BaseJob baseJob = MailboxSyncerJobs.ConstructJob(transactionalRequestJob); if (baseJob == null) { MrsTracer.Service.Error("Don't know how to process '{0}' request", new object[] { transactionalRequestJob.RequestType }); throw new RequestTypeNotUnderstoodPermanentException(CommonUtils.LocalComputerName, VersionInformation.MRS.ToString(), (int)transactionalRequestJob.RequestType); } using (baseJob) { baseJob.Initialize(transactionalRequestJob); baseJob.ValidateAndPopulateRequestJob(list); transactionalRequestJob.Message = baseJob.CachedRequestJob.Message; transactionalRequestJob.SourceVersion = baseJob.CachedRequestJob.SourceVersion; transactionalRequestJob.SourceArchiveVersion = baseJob.CachedRequestJob.SourceArchiveVersion; transactionalRequestJob.SourceServer = baseJob.CachedRequestJob.SourceServer; transactionalRequestJob.SourceArchiveServer = baseJob.CachedRequestJob.SourceArchiveServer; transactionalRequestJob.TargetVersion = baseJob.CachedRequestJob.TargetVersion; transactionalRequestJob.TargetArchiveVersion = baseJob.CachedRequestJob.TargetArchiveVersion; transactionalRequestJob.TargetServer = baseJob.CachedRequestJob.TargetServer; transactionalRequestJob.TargetArchiveServer = baseJob.CachedRequestJob.TargetArchiveServer; transactionalRequestJob.RemoteDatabaseGuid = baseJob.CachedRequestJob.RemoteDatabaseGuid; resultString = XMLSerializableBase.Serialize(new RequestJobXML(transactionalRequestJob), false); } } } } finally { reportString = XMLSerializableBase.Serialize(list, false); } }, null); } finally { reportEntryXMLs = reportString; } return(resultString); }
public abstract T Read(RequestIndexEntryProvider requestIndexEntryProvider, RequestIndexEntryObjectId identity);
public abstract void Save(RequestIndexEntryProvider requestIndexEntryProvider, T instance);
IRequestIndexEntry[] IRequestIndexEntryHandler.Find(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy) { return((IRequestIndexEntry[])this.Find(requestIndexEntryProvider, filter, rootId, deepSearch, sortBy)); }
IEnumerable <IRequestIndexEntry> IRequestIndexEntryHandler.FindPaged(RequestIndexEntryProvider requestIndexEntryProvider, QueryFilter filter, ObjectId rootId, bool deepSearch, SortBy sortBy, int pageSize) { return(this.FindPaged(requestIndexEntryProvider, filter, rootId, deepSearch, sortBy, pageSize)); }