1
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
45 public class SearchEngineDestinationEventListener
46 extends BaseDestinationEventListener {
47
48 public SearchEngineDestinationEventListener() {
49 }
50
51
54 public SearchEngineDestinationEventListener(
55 SearchReaderMessageListener searchReaderMessageListener,
56 SearchWriterMessageListener searchWriterMessageListener) {
57
58 _searchReaderMessageListener = searchReaderMessageListener;
59 _searchWriterMessageListener = searchWriterMessageListener;
60 }
61
62 public void messageListenerRegistered(
63 String destinationName, MessageListener messageListener) {
64
65 if (!isProceed(destinationName, messageListener)) {
66 return;
67 }
68
69 MessageBusUtil.unregisterMessageListener(
70 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
71 MessageBusUtil.unregisterMessageListener(
72 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
73
74 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
75 (BaseSearchEngineMessageListener)messageListener;
76
77 if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
78 LuceneSearchEngineImpl.NAME)) {
79
80 setBooleanQueryFactory(
81 new com.liferay.portal.search.generic.
82 BooleanQueryFactoryImpl());
83 setTermQueryFactory(
84 new com.liferay.portal.search.generic.TermQueryFactoryImpl());
85 }
86 }
87
88 public void messageListenerUnregistered(
89 String destinationName, MessageListener messageListener) {
90
91 if (!isProceed(destinationName, messageListener)) {
92 return;
93 }
94
95 MessageBusUtil.registerMessageListener(
96 DestinationNames.SEARCH_READER, _searchReaderMessageListener);
97 MessageBusUtil.registerMessageListener(
98 DestinationNames.SEARCH_WRITER, _searchWriterMessageListener);
99
100 BaseSearchEngineMessageListener baseSearchEngineMessageListener =
101 (BaseSearchEngineMessageListener)messageListener;
102
103 if (!baseSearchEngineMessageListener.getSearchEngineName().contains(
104 LuceneSearchEngineImpl.NAME)) {
105
106 setBooleanQueryFactory(
107 new com.liferay.portal.search.lucene.BooleanQueryFactoryImpl());
108 setTermQueryFactory(
109 new com.liferay.portal.search.lucene.TermQueryFactoryImpl());
110 }
111 }
112
113 public void setSearchReaderMessageListener(
114 SearchReaderMessageListener searchReaderMessageListener) {
115
116 _searchReaderMessageListener = searchReaderMessageListener;
117 }
118
119 public void setSearchWriterMessageListener(
120 SearchWriterMessageListener searchWriterMessageListener) {
121
122 _searchWriterMessageListener = searchWriterMessageListener;
123 }
124
125 protected boolean isProceed(
126 String destinationName, MessageListener messageListener) {
127
128 if ((!destinationName.equals(DestinationNames.SEARCH_READER)) ||
129 (messageListener == _searchReaderMessageListener) ||
130 !(messageListener instanceof SearchReaderMessageListener)) {
131
132 return false;
133 }
134 else {
135 return true;
136 }
137 }
138
139 protected void setBooleanQueryFactory(
140 BooleanQueryFactory booleanQueryFactory) {
141
142 BooleanQueryFactoryUtil booleanQueryFactoryUtil =
143 (BooleanQueryFactoryUtil)PortalBeanLocatorUtil.locate(
144 BooleanQueryFactoryUtil.class.getName());
145
146 booleanQueryFactoryUtil.setBooleanQueryFactory(booleanQueryFactory);
147 }
148
149 protected void setTermQueryFactory(TermQueryFactory termQueryFactory) {
150 TermQueryFactoryUtil termQueryFactoryUtil =
151 (TermQueryFactoryUtil)PortalBeanLocatorUtil.locate(
152 TermQueryFactoryUtil.class.getName());
153
154 termQueryFactoryUtil.setTermQueryFactory(termQueryFactory);
155 }
156
157 private SearchReaderMessageListener _searchReaderMessageListener;
158 private SearchWriterMessageListener _searchWriterMessageListener;
159
160 }