internal OscFolderCreateResult Create(string provider, Guid providerGuid, string userId, string networkId)
        {
            OscNetworkMoniker     oscNetworkMoniker = new OscNetworkMoniker(providerGuid, networkId, userId);
            OscFolderCreateResult oscFolderCreateResult;

            if (this.networkToFolderMap.TryGetValue(oscNetworkMoniker, out oscFolderCreateResult))
            {
                OscFolderCreator.Tracer.TraceDebug((long)this.GetHashCode(), "Folder creator: folder for provider '{0}' (GUID={1}), user id '{2}', and network id '{3}' found in cache.  Folder is '{4}'.", new object[]
                {
                    provider,
                    providerGuid,
                    userId,
                    networkId,
                    oscFolderCreateResult
                });
                return(oscFolderCreateResult);
            }
            OscFolderCreateResult result;

            try
            {
                StoreObjectId storeObjectId = this.FindExistingFolder(provider, userId, networkId);
                OscFolderCreator.Tracer.TraceDebug((long)this.GetHashCode(), "Folder creator: folder for provider '{0}' (GUID={1}), user id '{2}', and network id '{3}' ALREADY exists with id '{4}'.", new object[]
                {
                    provider,
                    providerGuid,
                    userId,
                    networkId,
                    storeObjectId
                });
                result = this.AddFolderToCache(new OscFolderCreateResult(storeObjectId, false), oscNetworkMoniker);
            }
            catch (ObjectNotFoundException)
            {
                OscFolderCreator.Tracer.TraceDebug((long)this.GetHashCode(), "Folder creator: folder for provider '{0}' (GUID={1}), user id '{2}', and network id '{3}' doesn't exist.", new object[]
                {
                    provider,
                    providerGuid,
                    userId,
                    networkId
                });
                StoreObjectId folderId = this.CreateWhenFolderDoesntExist(provider, providerGuid, userId, networkId);
                result = this.AddFolderToCache(new OscFolderCreateResult(folderId, true), oscNetworkMoniker);
            }
            return(result);
        }
        internal StoreObjectId Find(string provider, string userId, string networkId)
        {
            Util.ThrowOnNullOrEmptyArgument(provider, "provider");
            Util.ThrowOnNullOrEmptyArgument(userId, "userId");
            Guid providerGuid;

            if (!OscProviderRegistry.TryGetGuidFromName(provider, out providerGuid))
            {
                OscSyncLockLocator.Tracer.TraceError <string>((long)this.GetHashCode(), "SyncLock locator: cannot find for unknown provider: {0}", provider);
                throw new ObjectNotFoundException(ServerStrings.UnknownOscProvider(provider));
            }
            OscNetworkMoniker oscNetworkMoniker = new OscNetworkMoniker(providerGuid, networkId, userId);

            foreach (IStorePropertyBag storePropertyBag in new OscSyncLockEnumerator(this.session, this.session.GetDefaultFolderId(DefaultFolderType.Contacts), this.xsoFactory))
            {
                VersionedId valueOrDefault = storePropertyBag.GetValueOrDefault <VersionedId>(ItemSchema.Id, null);
                if (valueOrDefault == null)
                {
                    OscSyncLockLocator.Tracer.TraceError((long)this.GetHashCode(), "SyncLock locator: skipping SyncLock because its id is missing.");
                }
                else
                {
                    string text = this.ExtractNetworkMonikerFromSyncLock(storePropertyBag);
                    OscSyncLockLocator.Tracer.TraceDebug <StoreObjectId, string>((long)this.GetHashCode(), "SyncLock locator: SyncLock with id '{0}' has network moniker '{1}'", valueOrDefault.ObjectId, text);
                    if (oscNetworkMoniker.Equals(text))
                    {
                        OscSyncLockLocator.Tracer.TraceDebug((long)this.GetHashCode(), "SyncLock locator: found for provider '{0}', user id '{1}', and network id '{2}'.  Id is '{3}'", new object[]
                        {
                            provider,
                            userId,
                            networkId,
                            valueOrDefault.ObjectId
                        });
                        return(valueOrDefault.ObjectId);
                    }
                }
            }
            OscSyncLockLocator.Tracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "SyncLock locator: for provider '{0}', user id '{1}', and network id '{2}' not found.", provider, userId, networkId);
            throw new ObjectNotFoundException(ServerStrings.OscSyncLockNotFound(provider, userId, networkId));
        }
Example #3
0
        internal StoreObjectId Find(string provider, string userId, string networkId)
        {
            Util.ThrowOnNullOrEmptyArgument(provider, "provider");
            Util.ThrowOnNullOrEmptyArgument(userId, "userId");
            Guid guid;

            if (!OscProviderRegistry.TryGetGuidFromName(provider, out guid))
            {
                OscFolderLocator.Tracer.TraceError <string>((long)this.GetHashCode(), "Folder locator: cannot find folder for unknown provider: {0}", provider);
                throw new ObjectNotFoundException(ServerStrings.UnknownOscProvider(provider));
            }
            OscNetworkMoniker arg = new OscNetworkMoniker(guid, networkId, userId);

            foreach (IStorePropertyBag storePropertyBag in new OscProviderCandidateFolderEnumerator(this.session, guid, this.xsoFactory))
            {
                VersionedId valueOrDefault = storePropertyBag.GetValueOrDefault <VersionedId>(FolderSchema.Id, null);
                if (valueOrDefault == null)
                {
                    OscFolderLocator.Tracer.TraceError((long)this.GetHashCode(), "Folder locator: skipping folder with invalid id");
                }
                else
                {
                    OscFolderLocator.Tracer.TraceDebug <string, OscNetworkMoniker, StoreObjectId>((long)this.GetHashCode(), "Folder locator: looking for ContactSync FAI for provider '{0}' and moniker '{1}' in folder '{2}'", provider, arg, valueOrDefault.ObjectId);
                    foreach (IStorePropertyBag item in new OscContactSyncFAIEnumerator(this.session, valueOrDefault.ObjectId, this.xsoFactory))
                    {
                        foreach (OscNetworkMoniker oscNetworkMoniker in new OscFolderContactSourcesEnumerator(item))
                        {
                            OscFolderLocator.Tracer.TraceDebug <OscNetworkMoniker, StoreObjectId>((long)this.GetHashCode(), "Folder locator: found network moniker '{0}' in folder '{1}'", oscNetworkMoniker, valueOrDefault.ObjectId);
                            if (arg.Equals(oscNetworkMoniker))
                            {
                                OscFolderLocator.Tracer.TraceDebug <string, StoreObjectId>((long)this.GetHashCode(), "Folder locator: found folder for provider '{0}'.  Folder id is '{1}'", provider, valueOrDefault.ObjectId);
                                return(valueOrDefault.ObjectId);
                            }
                        }
                    }
                }
            }
            OscFolderLocator.Tracer.TraceDebug <string, string, string>((long)this.GetHashCode(), "Folder locator: folder for provider: {0}; user id: {1}; network id: {2}; not found.", provider, userId, networkId);
            throw new ObjectNotFoundException(ServerStrings.OscFolderForProviderNotFound(provider));
        }
 private OscFolderCreateResult AddFolderToCache(OscFolderCreateResult folder, OscNetworkMoniker networkMoniker)
 {
     this.networkToFolderMap[networkMoniker] = folder;
     return(folder);
 }
 private void CreateContactSyncFAI(StoreObjectId folderId, string folderDisplayName, OscNetworkMoniker networkMoniker)
 {
     using (MessageItem messageItem = MessageItem.CreateAssociated(this.session, folderId))
     {
         messageItem.ClassName = "IPM.Microsoft.OSC.ContactSync";
         messageItem[MessageItemSchema.OscContactSources] = new string[]
         {
             networkMoniker.ToString()
         };
         messageItem.Save(SaveMode.ResolveConflicts);
         OscFolderCreator.Tracer.TraceDebug <string, StoreObjectId, OscNetworkMoniker>((long)this.GetHashCode(), "Folder creator: successfully created ContactSync FAI in folder='{0}' (ID='{1}') with network moniker='{2}'", folderDisplayName, folderId, networkMoniker);
     }
 }