001
014
015 package com.liferay.portal.kernel.search.messaging;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.messaging.Message;
020 import com.liferay.portal.kernel.messaging.MessageBusUtil;
021 import com.liferay.portal.kernel.search.Hits;
022
023
026 public class SearchReaderMessageListener
027 extends BaseSearchEngineMessageListener {
028
029 public void receive(Message message) {
030 try {
031 doReceive(message);
032 }
033 catch (Exception e) {
034 _log.error("Unable to process message " + message, e);
035 }
036 }
037
038 protected void doCommandSearch(Message message, SearchRequest searchRequest)
039 throws Exception {
040
041 Hits hits = searchEngine.getSearcher().search(
042 searchRequest.getCompanyId(), searchRequest.getQuery(),
043 searchRequest.getSorts(), searchRequest.getStart(),
044 searchRequest.getEnd());
045
046 Message responseMessage = MessageBusUtil.createResponseMessage(
047 message, hits);
048
049 MessageBusUtil.sendMessage(
050 responseMessage.getDestinationName(), responseMessage);
051 }
052
053 protected void doReceive(Message message) throws Exception {
054 Object payload = message.getPayload();
055
056 if (!(payload instanceof SearchRequest)) {
057 return;
058 }
059
060 SearchRequest searchRequest = (SearchRequest)payload;
061
062 SearchEngineCommand searchEnginecommand =
063 searchRequest.getSearchEngineCommand();
064
065 if (searchEnginecommand.equals(SearchEngineCommand.SEARCH)) {
066 doCommandSearch(message, searchRequest);
067 }
068 }
069
070 private static Log _log = LogFactoryUtil.getLog(
071 SearchReaderMessageListener.class);
072
073 }