1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.search.lucene.messaging;
24  
25  import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
26  import com.liferay.portal.kernel.messaging.BaseDestinationEventListener;
27  import com.liferay.portal.kernel.messaging.DestinationNames;
28  import com.liferay.portal.kernel.messaging.MessageBusUtil;
29  import com.liferay.portal.kernel.messaging.MessageListener;
30  import com.liferay.portal.kernel.search.BooleanQueryFactory;
31  import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
32  import com.liferay.portal.kernel.search.TermQueryFactory;
33  import com.liferay.portal.kernel.search.TermQueryFactoryUtil;
34  import com.liferay.portal.kernel.search.messaging.BaseSearchEngineMessageListener;
35  import com.liferay.portal.kernel.search.messaging.SearchReaderMessageListener;
36  import com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener;
37  import com.liferay.portal.search.lucene.LuceneSearchEngineImpl;
38  
39  /**
40   * <a href="SearchEngineDestinationEventListener.java.html"><b><i>View Source
41   * </i></b></a>
42   *
43   * @author Michael C. Han
44   */
45  public class SearchEngineDestinationEventListener
46      extends BaseDestinationEventListener {
47  
48      public SearchEngineDestinationEventListener(
49          SearchReaderMessageListener searchReaderMessageListener,
50          SearchWriterMessageListener searchWriterMessageListener) {
51  
52          _searchReaderMessageListener = searchReaderMessageListener;
53          _searchWriterMessageListener = searchWriterMessageListener;
54      }
55  
56      public void messageListenerRegistered(
57          String destinationName, MessageListener messageListener) {
58  
59          if (!isProceed(destinationName, messageListener)) {
60              return;
61          }
62  
63          MessageBusUtil.unregisterMessageListener(
64              DestinationNames.SEARCH_READER, _searchReaderMessageListener);
65          MessageBusUtil.unregisterMessageListener(
66              DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
67  
68          BaseSearchEngineMessageListener baseSearchEngineMessageListener =
69              (BaseSearchEngineMessageListener)messageListener;
70  
71          if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
72                  LuceneSearchEngineImpl.NAME)) {
73  
74              setBooleanQueryFactory(
75                  new com.liferay.portal.search.generic.
76                      BooleanQueryFactoryImpl());
77              setTermQueryFactory(
78                  new com.liferay.portal.search.generic.TermQueryFactoryImpl());
79          }
80      }
81  
82      public void messageListenerUnregistered(
83          String destinationName, MessageListener messageListener) {
84  
85          if (!isProceed(destinationName, messageListener)) {
86              return;
87          }
88  
89          MessageBusUtil.registerMessageListener(
90              DestinationNames.SEARCH_READER, _searchReaderMessageListener);
91          MessageBusUtil.registerMessageListener(
92              DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
93  
94          BaseSearchEngineMessageListener baseSearchEngineMessageListener =
95              (BaseSearchEngineMessageListener)messageListener;
96  
97          if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
98                  LuceneSearchEngineImpl.NAME)) {
99  
100             setBooleanQueryFactory(
101                 new com.liferay.portal.search.lucene.BooleanQueryFactoryImpl());
102             setTermQueryFactory(
103                 new com.liferay.portal.search.lucene.TermQueryFactoryImpl());
104         }
105     }
106 
107     protected boolean isProceed(
108         String destinationName, MessageListener messageListener) {
109 
110         if ((!destinationName.equals(DestinationNames.SEARCH_READER)) ||
111             (messageListener == _searchReaderMessageListener) ||
112             !(messageListener instanceof SearchReaderMessageListener)) {
113 
114             return false;
115         }
116         else {
117             return true;
118         }
119     }
120 
121     protected void setBooleanQueryFactory(
122         BooleanQueryFactory booleanQueryFactory) {
123 
124         BooleanQueryFactoryUtil booleanQueryFactoryUtil =
125             (BooleanQueryFactoryUtil)PortalBeanLocatorUtil.locate(
126                 BooleanQueryFactoryUtil.class.getName());
127 
128         booleanQueryFactoryUtil.setBooleanQueryFactory(booleanQueryFactory);
129     }
130 
131     protected void setTermQueryFactory(TermQueryFactory termQueryFactory) {
132         TermQueryFactoryUtil termQueryFactoryUtil =
133             (TermQueryFactoryUtil)PortalBeanLocatorUtil.locate(
134                 TermQueryFactoryUtil.class.getName());
135 
136         termQueryFactoryUtil.setTermQueryFactory(termQueryFactory);
137     }
138 
139     private SearchReaderMessageListener _searchReaderMessageListener;
140     private SearchWriterMessageListener _searchWriterMessageListener;
141 
142 }