001
014
015 package com.liferay.portal.search.lucene.messaging;
016
017 import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
018 import com.liferay.portal.kernel.cluster.messaging.ClusterBridgeMessageListener;
019 import com.liferay.portal.kernel.messaging.BaseDestinationEventListener;
020 import com.liferay.portal.kernel.messaging.DestinationNames;
021 import com.liferay.portal.kernel.messaging.MessageBusUtil;
022 import com.liferay.portal.kernel.messaging.MessageListener;
023 import com.liferay.portal.kernel.search.BooleanQueryFactory;
024 import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
025 import com.liferay.portal.kernel.search.TermQueryFactory;
026 import com.liferay.portal.kernel.search.TermQueryFactoryUtil;
027 import com.liferay.portal.kernel.search.messaging.BaseSearchEngineMessageListener;
028 import com.liferay.portal.kernel.search.messaging.SearchReaderMessageListener;
029 import com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener;
030 import com.liferay.portal.search.lucene.LuceneSearchEngineImpl;
031 import com.liferay.portal.util.PropsValues;
032
033
036 public class SearchEngineDestinationEventListener
037 extends BaseDestinationEventListener {
038
039 public void messageListenerRegistered(
040 String destinationName, MessageListener messageListener) {
041
042 if (!isProceed(destinationName, messageListener)) {
043 return;
044 }
045
046 MessageBusUtil.unregisterMessageListener(
047 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
048 MessageBusUtil.unregisterMessageListener(
049 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
050
051 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
052 (BaseSearchEngineMessageListener)messageListener;
053
054 String searchEngineName =
055 baseSearchEngineMessageListener.getSearchEngineName();
056
057 if (!searchEngineName.contains(LuceneSearchEngineImpl.NAME)) {
058 setBooleanQueryFactory(
059 new com.liferay.portal.search.generic.
060 BooleanQueryFactoryImpl());
061 setTermQueryFactory(
062 new com.liferay.portal.search.generic.TermQueryFactoryImpl());
063
064 _clusterSearchWriterMessageListener.setActive(false);
065 }
066 }
067
068 public void messageListenerUnregistered(
069 String destinationName, MessageListener messageListener) {
070
071 if (!isProceed(destinationName, messageListener)) {
072 return;
073 }
074
075 MessageBusUtil.registerMessageListener(
076 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
077 MessageBusUtil.registerMessageListener(
078 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
079
080 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
081 (BaseSearchEngineMessageListener)messageListener;
082
083 String searchEngineName =
084 baseSearchEngineMessageListener.getSearchEngineName();
085
086 if (!searchEngineName.contains(LuceneSearchEngineImpl.NAME)) {
087 setBooleanQueryFactory(
088 new com.liferay.portal.search.lucene.BooleanQueryFactoryImpl());
089 setTermQueryFactory(
090 new com.liferay.portal.search.lucene.TermQueryFactoryImpl());
091
092 _clusterSearchWriterMessageListener.setActive(
093 PropsValues.LUCENE_REPLICATE_WRITE);
094 }
095 }
096
097 public void setClusterSearchWriterMessageListener(
098 ClusterBridgeMessageListener clusterSearchWriterMessageListener) {
099
100 _clusterSearchWriterMessageListener =
101 clusterSearchWriterMessageListener;
102
103 _clusterSearchWriterMessageListener.setActive(
104 PropsValues.LUCENE_REPLICATE_WRITE);
105 }
106
107 public void setSearchReaderMessageListener(
108 SearchReaderMessageListener searchReaderMessageListener) {
109
110 _searchReaderMessageListener = searchReaderMessageListener;
111 }
112
113 public void setSearchWriterMessageListener(
114 SearchWriterMessageListener searchWriterMessageListener) {
115
116 _searchWriterMessageListener = searchWriterMessageListener;
117 }
118
119 protected boolean isProceed(
120 String destinationName, MessageListener messageListener) {
121
122 if ((!destinationName.equals(DestinationNames.SEARCH_READER)) ||
123 (messageListener == _searchReaderMessageListener) ||
124 !(messageListener instanceof SearchReaderMessageListener)) {
125
126 return false;
127 }
128 else {
129 return true;
130 }
131 }
132
133 protected void setBooleanQueryFactory(
134 BooleanQueryFactory booleanQueryFactory) {
135
136 BooleanQueryFactoryUtil booleanQueryFactoryUtil =
137 (BooleanQueryFactoryUtil)PortalBeanLocatorUtil.locate(
138 BooleanQueryFactoryUtil.class.getName());
139
140 booleanQueryFactoryUtil.setBooleanQueryFactory(booleanQueryFactory);
141 }
142
143 protected void setTermQueryFactory(TermQueryFactory termQueryFactory) {
144 TermQueryFactoryUtil termQueryFactoryUtil =
145 (TermQueryFactoryUtil)PortalBeanLocatorUtil.locate(
146 TermQueryFactoryUtil.class.getName());
147
148 termQueryFactoryUtil.setTermQueryFactory(termQueryFactory);
149 }
150
151 private ClusterBridgeMessageListener _clusterSearchWriterMessageListener;
152 private SearchReaderMessageListener _searchReaderMessageListener;
153 private SearchWriterMessageListener _searchWriterMessageListener;
154
155 }