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.MessageListener;
26 import com.liferay.portal.kernel.messaging.sender.MessageSender;
27 import com.liferay.portal.kernel.search.Hits;
28 import com.liferay.portal.kernel.search.messaging.SearchRequest;
29 import com.liferay.portal.search.lucene.LuceneSearchEngineUtil;
30
31
37 public class LuceneReaderMessageListener implements MessageListener {
38
39 public LuceneReaderMessageListener(MessageSender messageSender) {
40 _messageSender = messageSender;
41 }
42
43 public void receive(Message message) {
44 try {
45 doReceive(message);
46 }
47 catch (Exception e) {
48 _log.error("Unable to process message " + message, e);
49 }
50 }
51
52 public void doReceive(Message message) throws Exception {
53 Object payload = message.getPayload();
54
55 if (!LuceneSearchEngineUtil.isRegistered() ||
56 !(payload instanceof SearchRequest)) {
57
58 return;
59 }
60
61 SearchRequest searchRequest = (SearchRequest)payload;
62
63 String command = searchRequest.getCommand();
64
65 if (command.equals(SearchRequest.COMMAND_INDEX_ONLY)) {
66 doCommandIndexOnly(message);
67 }
68 else if (command.equals(SearchRequest.COMMAND_SEARCH)) {
69 doCommandSearch(message, searchRequest);
70 }
71 }
72
73 protected void doCommandIndexOnly(Message message)
74 throws Exception {
75
76 Boolean indexReadOnly = Boolean.valueOf(
77 LuceneSearchEngineUtil.isIndexReadOnly());
78
79 message.setPayload(indexReadOnly);
80
81 _messageSender.send(message.getResponseDestination(), message);
82 }
83
84 protected void doCommandSearch(Message message, SearchRequest searchRequest)
85 throws Exception {
86
87 Hits hits = LuceneSearchEngineUtil.search(
88 searchRequest.getCompanyId(), searchRequest.getQuery(),
89 searchRequest.getSorts(), searchRequest.getStart(),
90 searchRequest.getEnd());
91
92 message.setPayload(hits);
93
94 _messageSender.send(message.getResponseDestination(), message);
95 }
96
97 private static Log _log =
98 LogFactoryUtil.getLog(LuceneReaderMessageListener.class);
99
100 private MessageSender _messageSender;
101
102 }