private IConfigurable CreateOutputObject(byte[] cookie, bool moreData) { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "PagedOutputResultWriter.CreateOutputObject entering"); ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "Create SyncObject list from ADPropertyBag list ..."); List <SyncObject> list = new List <SyncObject>(); foreach (PropertyBag propertyBag in this.entries) { ProcessorHelper.TracePropertBag("<PagedOutputResultWriter::CreateOutputObject>", propertyBag); list.Add(SyncObject.Create((ADPropertyBag)propertyBag)); } ExTraceGlobals.BackSyncTracer.TraceDebug <int>((long)SyncConfiguration.TraceId, "SyncObject count = {0}", list.Count); if (this.serializeCountDelegate != null) { this.serializeCountDelegate(this.entries.Count); } ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "Create SyncData from SyncObject list ..."); SyncData result = null; try { result = new SyncData(cookie, this.createResponseDelegate(list, moreData, cookie, this.currentServiceInstanceId)); ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "SyncData created successfully"); } catch (Exception ex) { ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "Encountered exception during SyncData creation {0}", ex.ToString()); if (this.addErrorSyncObjectDelegate == null) { throw ex; } if (this.FindErrorSyncObjects(cookie, moreData, list) == 0) { ExTraceGlobals.BackSyncTracer.TraceError <string>((long)SyncConfiguration.TraceId, "Didn't find SyncObject that caused the exception. Re-throw exception {0}.", ex.ToString()); throw ex; } ExTraceGlobals.BackSyncTracer.TraceError((long)SyncConfiguration.TraceId, "PagedOutputResultWriter.CreateOutputObject Throw DataSourceTransientException"); throw new DataSourceTransientException(Strings.BackSyncFailedToConvertSyncObjectToDirectoryObject, ex); } return(result); }
internal MsoRawObject(SyncObjectId externalObjectId, string serviceInstanceId, DirectoryObjectsAndLinks directoryObjectsAndLinks, bool?allLinksCollected, bool populateRawObject) : this() { this.ExternalObjectId = externalObjectId; this.ServiceInstanceId = serviceInstanceId; this.SerializedObjectAndLinks = this.SerializeForRpsDelivery(directoryObjectsAndLinks); this.MySyncObject = SyncObject.Create(directoryObjectsAndLinks.Objects[0], directoryObjectsAndLinks.Links, Guid.Empty); if (populateRawObject) { this.ObjectAndLinks = directoryObjectsAndLinks; } if (allLinksCollected != null) { this.AllLinksCollected = allLinksCollected; this.LinksCollected = new int?((directoryObjectsAndLinks.Links == null) ? 0 : directoryObjectsAndLinks.Links.Length); } switch (externalObjectId.ObjectClass) { case DirectoryObjectClass.Account: { Account account = (Account)directoryObjectsAndLinks.Objects[0]; if (account.DisplayName != null) { this.DisplayName = account.DisplayName.Value[0]; return; } break; } case DirectoryObjectClass.Company: { Company company = (Company)directoryObjectsAndLinks.Objects[0]; if (company.DisplayName != null) { this.DisplayName = company.DisplayName.Value[0]; } if (company.AssignedPlan != null) { this.AssignedPlanCapabilities = this.CollectCapabilities(company.AssignedPlan.Value); return; } break; } case DirectoryObjectClass.Contact: { Contact contact = (Contact)directoryObjectsAndLinks.Objects[0]; if (contact.DisplayName != null) { this.DisplayName = contact.DisplayName.Value[0]; } if (contact.ValidationError != null && contact.ValidationError.Value != null) { this.ExchangeValidationError = this.CollectErrorDetails(contact.ValidationError.Value); return; } break; } case DirectoryObjectClass.Device: case DirectoryObjectClass.KeyGroup: case DirectoryObjectClass.ServicePrincipal: case DirectoryObjectClass.SubscribedPlan: break; case DirectoryObjectClass.ForeignPrincipal: { ForeignPrincipal foreignPrincipal = (ForeignPrincipal)directoryObjectsAndLinks.Objects[0]; if (foreignPrincipal.DisplayName != null) { this.DisplayName = foreignPrincipal.DisplayName.Value[0]; return; } break; } case DirectoryObjectClass.Group: { Group group = (Group)directoryObjectsAndLinks.Objects[0]; if (group.DisplayName != null) { this.DisplayName = group.DisplayName.Value[0]; } if (group.ValidationError != null && group.ValidationError.Value != null) { this.ExchangeValidationError = this.CollectErrorDetails(group.ValidationError.Value); } break; } case DirectoryObjectClass.User: { User user = (User)directoryObjectsAndLinks.Objects[0]; if (user.DisplayName != null) { this.DisplayName = user.DisplayName.Value[0]; } if (user.WindowsLiveNetId != null) { this.WindowsLiveNetId = new NetID(user.WindowsLiveNetId.Value[0]); } if (user.AssignedPlan != null) { this.AssignedPlanCapabilities = this.CollectCapabilities(user.AssignedPlan.Value); } if (user.ValidationError != null && user.ValidationError.Value != null) { this.ExchangeValidationError = this.CollectErrorDetails(user.ValidationError.Value); return; } break; } default: return; } }