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 Object payload = message.getPayload();
58
59 if (!LuceneSearchEngineUtil.isRegistered() ||
60 !(payload instanceof SearchRequest)) {
61
62 return;
63 }
64
65 SearchRequest searchRequest = (SearchRequest)payload;
66
67 String command = searchRequest.getCommand();
68
69 if (command.equals(SearchRequest.COMMAND_INDEX_ONLY)) {
70 doCommandIndexOnly(message);
71 }
72 else if (command.equals(SearchRequest.COMMAND_SEARCH)) {
73 doCommandSearch(message, searchRequest);
74 }
75 }
76
77 protected void doCommandIndexOnly(Message message)
78 throws Exception {
79
80 Boolean indexReadOnly = Boolean.valueOf(
81 LuceneSearchEngineUtil.isIndexReadOnly());
82
83 message.setPayload(indexReadOnly);
84
85 _messageSender.send(message.getResponseDestination(), message);
86 }
87
88 protected void doCommandSearch(Message message, SearchRequest searchRequest)
89 throws Exception {
90
91 Hits hits = LuceneSearchEngineUtil.search(
92 searchRequest.getCompanyId(), searchRequest.getQuery(),
93 searchRequest.getSorts(), searchRequest.getStart(),
94 searchRequest.getEnd());
95
96 message.setPayload(hits);
97
98 _messageSender.send(message.getResponseDestination(), message);
99 }
100
101 private static Log _log =
102 LogFactory.getLog(LuceneReaderMessageListener.class);
103
104 private MessageSender _messageSender;
105
106 }