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