public BackendModel(Guid guid, String displayName, BACKEND_TYPE backendType, long internalId, SUBJECT_TYPE subjectType, String distinguishedName) { Guid = guid; DisplayName = displayName; BackendType = backendType; InternalId = internalId; SubjectType = subjectType; DistinguishedName = distinguishedName; }
/// <summary> /// registers a new backend search provider for given subject with given type /// </summary> /// <param name="subjectType"></param> /// <param name="backendType"></param> /// <param name="provider"></param> public void RegisterProvider(SUBJECT_TYPE subjectType, BACKEND_TYPE backendType, IBackendSearchProvider provider) { if (!backendSearchers.ContainsKey(subjectType)) { backendSearchers.Add(subjectType, new Dictionary<BACKEND_TYPE, List<IBackendSearchProvider>>()); } if (!backendSearchers[subjectType].ContainsKey(backendType)) { backendSearchers[subjectType].Add(backendType, new List<IBackendSearchProvider>()); } backendSearchers[subjectType][backendType].Add(provider); }
/// <summary> /// Finds all subjects in a given backend /// </summary> /// <param name="searchString"></param> /// <param name="backendType"></param> /// <returns></returns> public IEnumerable<BackendModel> Search(String searchString, BACKEND_TYPE backendType) { List<BackendModel> r = new List<BackendModel>(); foreach (KeyValuePair<SUBJECT_TYPE, Dictionary<BACKEND_TYPE, List<IBackendSearchProvider>>> kvp in backendSearchers) { List<IBackendSearchProvider> backendsForSubject = kvp.Value[backendType]; if (backendsForSubject == null) { continue; } foreach (IBackendSearchProvider providerInBackend in backendsForSubject) { r.AddRange(providerInBackend.Search(searchString, kvp.Key)); } } return r; }
/// <summary> /// does a search for the given subject over the given backend /// </summary> /// <param name="searchString"></param> /// <param name="subjectType"></param> /// <param name="backendType"></param> /// <returns></returns> public IEnumerable<BackendModel> Search(String searchString, SUBJECT_TYPE subjectType, BACKEND_TYPE backendType) { if (!backendSearchers.ContainsKey(subjectType) || !backendSearchers[subjectType].ContainsKey(backendType)) { return new List<BackendModel>(); } return PerformSearch(searchString, backendSearchers[subjectType][backendType], subjectType); }