1
22
23 package com.liferay.portal.search.lucene.messaging;
24
25 import com.liferay.portal.kernel.messaging.Message;
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.messaging.SearchRequest;
30 import com.liferay.portal.search.lucene.LuceneSearchEngineUtil;
31
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
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 doReceive(Message message) throws Exception {
57 SearchRequest searchRequest = (SearchRequest)message.getPayload();
58
59 String command = searchRequest.getCommand();
60
61 if (command.equals(SearchRequest.COMMAND_INDEX_ONLY)) {
62 doCommandIndexOnly(message);
63 }
64 else if (command.equals(SearchRequest.COMMAND_SEARCH)) {
65 doCommandSearch(message, searchRequest);
66 }
67 }
68
69 protected void doCommandIndexOnly(Message message)
70 throws Exception {
71
72 Boolean indexReadOnly = Boolean.valueOf(
73 LuceneSearchEngineUtil.isIndexReadOnly());
74
75 message.setPayload(indexReadOnly);
76
77 _messageSender.send(message.getResponseDestination(), message);
78 }
79
80 protected void doCommandSearch(Message message, SearchRequest searchRequest)
81 throws Exception {
82
83 Hits hits = LuceneSearchEngineUtil.search(
84 searchRequest.getCompanyId(), searchRequest.getQuery(),
85 searchRequest.getSorts(), searchRequest.getStart(),
86 searchRequest.getEnd());
87
88 message.setPayload(hits);
89
90 _messageSender.send(message.getResponseDestination(), message);
91 }
92
93 private static Log _log =
94 LogFactory.getLog(LuceneReaderMessageListener.class);
95
96 private MessageSender _messageSender;
97
98 }