1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
package org.kuali.student.common.search.service.impl; |
17 | |
|
18 | |
import java.util.ArrayList; |
19 | |
import java.util.HashMap; |
20 | |
import java.util.List; |
21 | |
import java.util.Map; |
22 | |
|
23 | |
import org.apache.log4j.Logger; |
24 | |
import org.kuali.student.common.exceptions.OperationFailedException; |
25 | |
import org.kuali.student.common.search.dto.SearchRequest; |
26 | |
import org.kuali.student.common.search.dto.SearchResult; |
27 | |
import org.kuali.student.common.search.dto.SearchTypeInfo; |
28 | |
import org.kuali.student.common.search.service.SearchDispatcher; |
29 | |
import org.kuali.student.common.search.service.SearchService; |
30 | |
|
31 | |
public class SearchDispatcherImpl implements SearchDispatcher{ |
32 | 2 | final Logger LOG = Logger.getLogger(SearchDispatcherImpl.class); |
33 | |
|
34 | |
private List<SearchService> services; |
35 | |
|
36 | |
|
37 | 2 | private Map<String,SearchService> serviceMap = null; |
38 | |
|
39 | |
|
40 | |
|
41 | |
public SearchDispatcherImpl() { |
42 | 1 | super(); |
43 | 1 | } |
44 | |
|
45 | |
public SearchDispatcherImpl(SearchService... services){ |
46 | 1 | super(); |
47 | 1 | this.services = new ArrayList<SearchService>(); |
48 | 1 | if(services!=null){ |
49 | 2 | for(SearchService service:services){ |
50 | 1 | this.services.add(service); |
51 | |
} |
52 | |
} |
53 | 1 | } |
54 | |
|
55 | |
public synchronized void init(){ |
56 | 2 | if(serviceMap==null){ |
57 | 2 | serviceMap = new HashMap<String,SearchService>(); |
58 | |
|
59 | |
|
60 | 2 | for(SearchService service:services){ |
61 | 2 | if(null==service){ |
62 | 0 | LOG.warn("Null service passed to SearchDelegator"); |
63 | |
}else{ |
64 | |
try { |
65 | 2 | List<SearchTypeInfo> searchTypes = service.getSearchTypes(); |
66 | 2 | if(searchTypes!=null){ |
67 | 1 | for(SearchTypeInfo searchType:searchTypes){ |
68 | 3 | serviceMap.put(searchType.getKey(),service); |
69 | |
} |
70 | |
} |
71 | 0 | } catch (OperationFailedException e) { |
72 | 0 | LOG.warn("Error getting searchTypes",e); |
73 | 4 | } |
74 | |
} |
75 | |
} |
76 | |
} |
77 | 2 | } |
78 | |
|
79 | |
|
80 | |
|
81 | |
|
82 | |
|
83 | |
|
84 | |
|
85 | |
public SearchResult dispatchSearch(SearchRequest searchRequest) { |
86 | |
|
87 | |
|
88 | 4 | if(serviceMap==null){ |
89 | 2 | init(); |
90 | |
} |
91 | |
|
92 | 4 | if(searchRequest != null){ |
93 | 4 | String searchKey = searchRequest.getSearchKey(); |
94 | 4 | SearchService searchService = serviceMap.get(searchKey); |
95 | 4 | if(searchService != null){ |
96 | |
SearchResult searchResult; |
97 | |
try { |
98 | 2 | searchResult = searchService.search(searchRequest); |
99 | 0 | } catch (Exception e) { |
100 | 0 | LOG.warn("Error invoking search",e); |
101 | 0 | return null; |
102 | 2 | } |
103 | 2 | return searchResult; |
104 | |
} |
105 | 2 | LOG.error("Error Dispatching, Search Service not found for search key:"+searchRequest.getSearchKey()); |
106 | |
} |
107 | 2 | return null; |
108 | |
} |
109 | |
|
110 | |
public void setServices(List<SearchService> services) { |
111 | 1 | this.services = services; |
112 | 1 | } |
113 | |
} |