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