1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.search.lucene.messaging;
16  
17  import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
18  import com.liferay.portal.kernel.messaging.BaseDestinationEventListener;
19  import com.liferay.portal.kernel.messaging.DestinationNames;
20  import com.liferay.portal.kernel.messaging.MessageBusUtil;
21  import com.liferay.portal.kernel.messaging.MessageListener;
22  import com.liferay.portal.kernel.search.BooleanQueryFactory;
23  import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
24  import com.liferay.portal.kernel.search.TermQueryFactory;
25  import com.liferay.portal.kernel.search.TermQueryFactoryUtil;
26  import com.liferay.portal.kernel.search.messaging.BaseSearchEngineMessageListener;
27  import com.liferay.portal.kernel.search.messaging.SearchReaderMessageListener;
28  import com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener;
29  import com.liferay.portal.search.lucene.LuceneSearchEngineImpl;
30  
31  /**
32   * <a href="SearchEngineDestinationEventListener.java.html"><b><i>View Source
33   * </i></b></a>
34   *
35   * @author Michael C. Han
36   */
37  public class SearchEngineDestinationEventListener
38      extends BaseDestinationEventListener {
39  
40      public SearchEngineDestinationEventListener() {
41      }
42  
43      /**
44       * @deprecated
45       */
46      public SearchEngineDestinationEventListener(
47          SearchReaderMessageListener searchReaderMessageListener,
48          SearchWriterMessageListener searchWriterMessageListener) {
49  
50          _searchReaderMessageListener = searchReaderMessageListener;
51          _searchWriterMessageListener = searchWriterMessageListener;
52      }
53  
54      public void messageListenerRegistered(
55          String destinationName, MessageListener messageListener) {
56  
57          if (!isProceed(destinationName, messageListener)) {
58              return;
59          }
60  
61          MessageBusUtil.unregisterMessageListener(
62              DestinationNames.SEARCH_READER, _searchReaderMessageListener);
63          MessageBusUtil.unregisterMessageListener(
64              DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
65  
66          BaseSearchEngineMessageListener baseSearchEngineMessageListener =
67              (BaseSearchEngineMessageListener)messageListener;
68  
69          if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
70                  LuceneSearchEngineImpl.NAME)) {
71  
72              setBooleanQueryFactory(
73                  new com.liferay.portal.search.generic.
74                      BooleanQueryFactoryImpl());
75              setTermQueryFactory(
76                  new com.liferay.portal.search.generic.TermQueryFactoryImpl());
77          }
78      }
79  
80      public void messageListenerUnregistered(
81          String destinationName, MessageListener messageListener) {
82  
83          if (!isProceed(destinationName, messageListener)) {
84              return;
85          }
86  
87          MessageBusUtil.registerMessageListener(
88              DestinationNames.SEARCH_READER, _searchReaderMessageListener);
89          MessageBusUtil.registerMessageListener(
90              DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
91  
92          BaseSearchEngineMessageListener baseSearchEngineMessageListener =
93              (BaseSearchEngineMessageListener)messageListener;
94  
95          if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
96                  LuceneSearchEngineImpl.NAME)) {
97  
98              setBooleanQueryFactory(
99                  new com.liferay.portal.search.lucene.BooleanQueryFactoryImpl());
100             setTermQueryFactory(
101                 new com.liferay.portal.search.lucene.TermQueryFactoryImpl());
102         }
103     }
104 
105     public void setSearchReaderMessageListener(
106         SearchReaderMessageListener searchReaderMessageListener) {
107 
108         _searchReaderMessageListener = searchReaderMessageListener;
109     }
110 
111     public void setSearchWriterMessageListener(
112         SearchWriterMessageListener searchWriterMessageListener) {
113 
114         _searchWriterMessageListener = searchWriterMessageListener;
115     }
116 
117     protected boolean isProceed(
118         String destinationName, MessageListener messageListener) {
119 
120         if ((!destinationName.equals(DestinationNames.SEARCH_READER)) ||
121             (messageListener == _searchReaderMessageListener) ||
122             !(messageListener instanceof SearchReaderMessageListener)) {
123 
124             return false;
125         }
126         else {
127             return true;
128         }
129     }
130 
131     protected void setBooleanQueryFactory(
132         BooleanQueryFactory booleanQueryFactory) {
133 
134         BooleanQueryFactoryUtil booleanQueryFactoryUtil =
135             (BooleanQueryFactoryUtil)PortalBeanLocatorUtil.locate(
136                 BooleanQueryFactoryUtil.class.getName());
137 
138         booleanQueryFactoryUtil.setBooleanQueryFactory(booleanQueryFactory);
139     }
140 
141     protected void setTermQueryFactory(TermQueryFactory termQueryFactory) {
142         TermQueryFactoryUtil termQueryFactoryUtil =
143             (TermQueryFactoryUtil)PortalBeanLocatorUtil.locate(
144                 TermQueryFactoryUtil.class.getName());
145 
146         termQueryFactoryUtil.setTermQueryFactory(termQueryFactory);
147     }
148 
149     private SearchReaderMessageListener _searchReaderMessageListener;
150     private SearchWriterMessageListener _searchWriterMessageListener;
151 
152 }