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);
        }
Exemplo n.º 2
0
        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;
            }
        }