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