1
14
15 package com.liferay.portal.search.lucene.messaging;
16
17 import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
18 import com.liferay.portal.kernel.cluster.messaging.ClusterBridgeMessageListener;
19 import com.liferay.portal.kernel.messaging.BaseDestinationEventListener;
20 import com.liferay.portal.kernel.messaging.DestinationNames;
21 import com.liferay.portal.kernel.messaging.MessageBusUtil;
22 import com.liferay.portal.kernel.messaging.MessageListener;
23 import com.liferay.portal.kernel.search.BooleanQueryFactory;
24 import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
25 import com.liferay.portal.kernel.search.TermQueryFactory;
26 import com.liferay.portal.kernel.search.TermQueryFactoryUtil;
27 import com.liferay.portal.kernel.search.messaging.BaseSearchEngineMessageListener;
28 import com.liferay.portal.kernel.search.messaging.SearchReaderMessageListener;
29 import com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener;
30 import com.liferay.portal.search.lucene.LuceneSearchEngineImpl;
31 import com.liferay.portal.util.PropsValues;
32
33
39 public class SearchEngineDestinationEventListener
40 extends BaseDestinationEventListener {
41
42 public void messageListenerRegistered(
43 String destinationName, MessageListener messageListener) {
44
45 if (!isProceed(destinationName, messageListener)) {
46 return;
47 }
48
49 MessageBusUtil.unregisterMessageListener(
50 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
51 MessageBusUtil.unregisterMessageListener(
52 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
53
54 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
55 (BaseSearchEngineMessageListener)messageListener;
56
57 String searchEngineName =
58 baseSearchEngineMessageListener.getSearchEngineName();
59
60 if (!searchEngineName.contains(LuceneSearchEngineImpl.NAME)) {
61 setBooleanQueryFactory(
62 new com.liferay.portal.search.generic.
63 BooleanQueryFactoryImpl());
64 setTermQueryFactory(
65 new com.liferay.portal.search.generic.TermQueryFactoryImpl());
66
67 _clusterSearchWriterMessageListener.setActive(false);
68 }
69 }
70
71 public void messageListenerUnregistered(
72 String destinationName, MessageListener messageListener) {
73
74 if (!isProceed(destinationName, messageListener)) {
75 return;
76 }
77
78 MessageBusUtil.registerMessageListener(
79 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
80 MessageBusUtil.registerMessageListener(
81 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
82
83 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
84 (BaseSearchEngineMessageListener)messageListener;
85
86 String searchEngineName =
87 baseSearchEngineMessageListener.getSearchEngineName();
88
89 if (!searchEngineName.contains(LuceneSearchEngineImpl.NAME)) {
90 setBooleanQueryFactory(
91 new com.liferay.portal.search.lucene.BooleanQueryFactoryImpl());
92 setTermQueryFactory(
93 new com.liferay.portal.search.lucene.TermQueryFactoryImpl());
94
95 _clusterSearchWriterMessageListener.setActive(
96 PropsValues.LUCENE_REPLICATE_WRITE);
97 }
98 }
99
100 public void setClusterSearchWriterMessageListener(
101 ClusterBridgeMessageListener clusterSearchWriterMessageListener) {
102
103 _clusterSearchWriterMessageListener =
104 clusterSearchWriterMessageListener;
105
106 _clusterSearchWriterMessageListener.setActive(
107 PropsValues.LUCENE_REPLICATE_WRITE);
108 }
109
110 public void setSearchReaderMessageListener(
111 SearchReaderMessageListener searchReaderMessageListener) {
112
113 _searchReaderMessageListener = searchReaderMessageListener;
114 }
115
116 public void setSearchWriterMessageListener(
117 SearchWriterMessageListener searchWriterMessageListener) {
118
119 _searchWriterMessageListener = searchWriterMessageListener;
120 }
121
122 protected boolean isProceed(
123 String destinationName, MessageListener messageListener) {
124
125 if ((!destinationName.equals(DestinationNames.SEARCH_READER)) ||
126 (messageListener == _searchReaderMessageListener) ||
127 !(messageListener instanceof SearchReaderMessageListener)) {
128
129 return false;
130 }
131 else {
132 return true;
133 }
134 }
135
136 protected void setBooleanQueryFactory(
137 BooleanQueryFactory booleanQueryFactory) {
138
139 BooleanQueryFactoryUtil booleanQueryFactoryUtil =
140 (BooleanQueryFactoryUtil)PortalBeanLocatorUtil.locate(
141 BooleanQueryFactoryUtil.class.getName());
142
143 booleanQueryFactoryUtil.setBooleanQueryFactory(booleanQueryFactory);
144 }
145
146 protected void setTermQueryFactory(TermQueryFactory termQueryFactory) {
147 TermQueryFactoryUtil termQueryFactoryUtil =
148 (TermQueryFactoryUtil)PortalBeanLocatorUtil.locate(
149 TermQueryFactoryUtil.class.getName());
150
151 termQueryFactoryUtil.setTermQueryFactory(termQueryFactory);
152 }
153
154 private ClusterBridgeMessageListener _clusterSearchWriterMessageListener;
155 private SearchReaderMessageListener _searchReaderMessageListener;
156 private SearchWriterMessageListener _searchWriterMessageListener;
157
158 }