1
22
23 package com.liferay.portal.search.lucene.messaging;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.messaging.Message;
28 import com.liferay.portal.kernel.messaging.MessageBusUtil;
29 import com.liferay.portal.kernel.messaging.MessageListener;
30 import com.liferay.portal.kernel.messaging.sender.MessageSender;
31 import com.liferay.portal.kernel.search.Hits;
32 import com.liferay.portal.kernel.search.SearchEngine;
33 import com.liferay.portal.kernel.search.messaging.SearchRequest;
34
35
41 public class LuceneReaderMessageListener implements MessageListener {
42
43 public LuceneReaderMessageListener(MessageSender messageSender) {
44 _messageSender = messageSender;
45 }
46
47 public void receive(Message message) {
48 try {
49 doReceive(message);
50 }
51 catch (Exception e) {
52 _log.error("Unable to process message " + message, e);
53 }
54 }
55
56 public void setSearchEngine(SearchEngine searchEngine) {
57 _searchEngine = searchEngine;
58 }
59
60 protected void doCommandSearch(Message message, SearchRequest searchRequest)
61 throws Exception {
62
63 Hits hits = _searchEngine.getSearcher().search(
64 searchRequest.getCompanyId(), searchRequest.getQuery(),
65 searchRequest.getSorts(), searchRequest.getStart(),
66 searchRequest.getEnd());
67
68 Message responseMessage = MessageBusUtil.createResponseMessage(
69 message, hits);
70
71 _messageSender.send(responseMessage.getDestination(), responseMessage);
72 }
73
74 protected void doReceive(Message message) throws Exception {
75 Object payload = message.getPayload();
76
77 if (!_searchEngine.isRegistered() ||
78 !(payload instanceof SearchRequest)) {
79
80 return;
81 }
82
83 SearchRequest searchRequest = (SearchRequest)payload;
84
85 String command = searchRequest.getCommand();
86
87 if (command.equals(SearchRequest.COMMAND_SEARCH)) {
88 doCommandSearch(message, searchRequest);
89 }
90 }
91
92 private static Log _log =
93 LogFactoryUtil.getLog(LuceneReaderMessageListener.class);
94
95 private MessageSender _messageSender;
96 private SearchEngine _searchEngine;
97
98 }