예제 #1
0
 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);
        }