001
014
015 package com.liferay.portlet.exportimport.util;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.search.BaseIndexer;
022 import com.liferay.portal.kernel.search.BooleanQuery;
023 import com.liferay.portal.kernel.search.Document;
024 import com.liferay.portal.kernel.search.Field;
025 import com.liferay.portal.kernel.search.SearchContext;
026 import com.liferay.portal.kernel.search.SearchEngineUtil;
027 import com.liferay.portal.kernel.search.Summary;
028 import com.liferay.portal.kernel.search.filter.BooleanFilter;
029 import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
030 import com.liferay.portal.kernel.util.ArrayUtil;
031 import com.liferay.portal.kernel.util.GetterUtil;
032 import com.liferay.portal.kernel.util.MapUtil;
033 import com.liferay.portal.kernel.util.StringPool;
034 import com.liferay.portlet.exportimport.lar.ExportImportHelperUtil;
035 import com.liferay.portlet.exportimport.model.ExportImportConfiguration;
036 import com.liferay.portlet.exportimport.service.ExportImportConfigurationLocalServiceUtil;
037
038 import java.io.Serializable;
039
040 import java.util.Date;
041 import java.util.Locale;
042 import java.util.Map;
043 import java.util.TimeZone;
044
045 import javax.portlet.PortletRequest;
046 import javax.portlet.PortletResponse;
047
048
052 @OSGiBeanProperties
053 public class ExportImportConfigurationIndexer extends BaseIndexer {
054
055 public static final String CLASS_NAME =
056 ExportImportConfiguration.class.getName();
057
058 public ExportImportConfigurationIndexer() {
059 setCommitImmediately(true);
060 }
061
062 @Override
063 public String getClassName() {
064 return CLASS_NAME;
065 }
066
067 @Override
068 public void postProcessContextBooleanFilter(
069 BooleanFilter contextBooleanFilter, SearchContext searchContext)
070 throws Exception {
071
072 addStatus(contextBooleanFilter, searchContext);
073
074 contextBooleanFilter.addRequiredTerm(
075 Field.COMPANY_ID, searchContext.getCompanyId());
076 contextBooleanFilter.addRequiredTerm(
077 Field.GROUP_ID,
078 GetterUtil.getLong(searchContext.getAttribute(Field.GROUP_ID)));
079
080 Serializable type = searchContext.getAttribute(Field.TYPE);
081
082 if (type != null) {
083 contextBooleanFilter.addRequiredTerm(
084 Field.TYPE, GetterUtil.getInteger(type));
085 }
086 }
087
088 @Override
089 public void postProcessSearchQuery(
090 BooleanQuery searchQuery, BooleanFilter fullQueryBooleanFilter,
091 SearchContext searchContext)
092 throws Exception {
093
094 addSearchTerm(searchQuery, searchContext, Field.DESCRIPTION, true);
095 addSearchTerm(
096 searchQuery, searchContext, "exportImportConfigurationId", false);
097 addSearchTerm(searchQuery, searchContext, Field.NAME, true);
098 }
099
100 @Override
101 protected void doDelete(Object obj) throws Exception {
102 ExportImportConfiguration exportImportConfiguration =
103 (ExportImportConfiguration)obj;
104
105 deleteDocument(
106 exportImportConfiguration.getCompanyId(),
107 exportImportConfiguration.getExportImportConfigurationId());
108 }
109
110 @Override
111 protected Document doGetDocument(Object obj) throws Exception {
112 ExportImportConfiguration exportImportConfiguration =
113 (ExportImportConfiguration)obj;
114
115 Document document = getBaseModelDocument(
116 CLASS_NAME, exportImportConfiguration);
117
118 document.addText(
119 Field.DESCRIPTION, exportImportConfiguration.getDescription());
120 document.addText(Field.NAME, exportImportConfiguration.getName());
121 document.addKeyword(Field.TYPE, exportImportConfiguration.getType());
122 document.addNumber(
123 "exportImportConfigurationId",
124 exportImportConfiguration.getExportImportConfigurationId());
125
126 Map<String, Serializable> settingsMap =
127 exportImportConfiguration.getSettingsMap();
128
129 populateDates(document, settingsMap);
130 populateLayoutIds(document, settingsMap);
131 populateLocale(document, settingsMap);
132 populateParameterMap(document, settingsMap);
133 populateSiteInformation(document, settingsMap);
134 populateTimeZone(document, settingsMap);
135
136 document.addKeyword(
137 _PREFIX_SETTING + Field.USER_ID,
138 MapUtil.getLong(settingsMap, "userId"));
139
140 return document;
141 }
142
143 @Override
144 protected Summary doGetSummary(
145 Document document, Locale locale, String snippet,
146 PortletRequest portletRequest, PortletResponse portletResponse)
147 throws Exception {
148
149 Summary summary = createSummary(
150 document, Field.TITLE, Field.DESCRIPTION);
151
152 return summary;
153 }
154
155 @Override
156 protected void doReindex(Object obj) throws Exception {
157 ExportImportConfiguration exportImportConfiguration =
158 (ExportImportConfiguration)obj;
159
160 Document document = getDocument(exportImportConfiguration);
161
162 SearchEngineUtil.updateDocument(
163 getSearchEngineId(), exportImportConfiguration.getCompanyId(),
164 document, isCommitImmediately());
165 }
166
167 @Override
168 protected void doReindex(String className, long classPK) throws Exception {
169 ExportImportConfiguration exportImportConfiguration =
170 ExportImportConfigurationLocalServiceUtil.
171 getExportImportConfiguration(classPK);
172
173 doReindex(exportImportConfiguration);
174 }
175
176 @Override
177 protected void doReindex(String[] ids) throws Exception {
178 long companyId = GetterUtil.getLong(ids[0]);
179
180 reindexExportImportConfigurations(companyId);
181 }
182
183 protected void populateDates(
184 Document document, Map<String, Serializable> settingsMap) {
185
186 if (settingsMap.containsKey("endDate")) {
187 Date endDate = (Date)settingsMap.get("endDate");
188
189 document.addDate(_PREFIX_SETTING + "endDate", endDate);
190 }
191
192 if (settingsMap.containsKey("startDate")) {
193 Date startDate = (Date)settingsMap.get("startDate");
194
195 document.addDate(_PREFIX_SETTING + "startDate", startDate);
196 }
197 }
198
199 protected void populateLayoutIds(
200 Document document, Map<String, Serializable> settingsMap) {
201
202 if (!settingsMap.containsKey("layoutIdMap") &&
203 !settingsMap.containsKey("layoutIds")) {
204
205 return;
206 }
207
208 long[] layoutIds = GetterUtil.getLongValues(
209 settingsMap.get("layoutIds"));
210
211 if (ArrayUtil.isEmpty(layoutIds)) {
212 Map<Long, Boolean> layoutIdMap =
213 (Map<Long, Boolean>)settingsMap.get("layoutIdMap");
214
215 try {
216 layoutIds = ExportImportHelperUtil.getLayoutIds(layoutIdMap);
217 }
218 catch (PortalException pe) {
219 }
220 }
221
222 document.addKeyword("layoutIds", layoutIds);
223 }
224
225 protected void populateLocale(
226 Document document, Map<String, Serializable> settingsMap) {
227
228 Locale locale = (Locale)settingsMap.get("locale");
229
230 document.addText(_PREFIX_SETTING + "locale", locale.toString());
231 }
232
233 protected void populateParameterMap(
234 Document document, Map<String, Serializable> settingsMap) {
235
236 if (!settingsMap.containsKey("parameterMap")) {
237 return;
238 }
239
240 Map<String, String[]> parameterMap =
241 (Map<String, String[]>)settingsMap.get("parameterMap");
242
243 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
244 String[] parameterValues = ArrayUtil.clone(entry.getValue());
245
246 for (int i = 0; i < parameterValues.length; i++) {
247 String parameterValue = parameterValues[i];
248
249 if (parameterValue.equals(StringPool.TRUE)) {
250 parameterValues[i] = "on";
251 }
252 else if (parameterValue.equals(StringPool.FALSE)) {
253 parameterValues[i] = "off";
254 }
255 }
256
257 document.addKeyword(
258 _PREFIX_PARAMETER + entry.getKey(), parameterValues);
259 }
260 }
261
262 protected void populateSiteInformation(
263 Document document, Map<String, Serializable> settingsMap) {
264
265 document.addKeyword(
266 _PREFIX_SETTING + "privateLayout",
267 MapUtil.getBoolean(settingsMap, "privateLayout"));
268 document.addKeyword(
269 _PREFIX_SETTING + "sourceGroupId",
270 MapUtil.getLong(settingsMap, "sourceGroupId"));
271 document.addKeyword(
272 _PREFIX_SETTING + "targetGroupId",
273 MapUtil.getLong(settingsMap, "targetGroupId"));
274 }
275
276 protected void populateTimeZone(
277 Document document, Map<String, Serializable> settingsMap) {
278
279 TimeZone timeZone = (TimeZone)settingsMap.get("timeZone");
280
281 if (timeZone != null) {
282 document.addKeyword(
283 _PREFIX_SETTING + "timeZone", timeZone.getDisplayName());
284 }
285 }
286
287 protected void reindexExportImportConfigurations(long companyId)
288 throws PortalException {
289
290 final ActionableDynamicQuery actionableDynamicQuery =
291 ExportImportConfigurationLocalServiceUtil.
292 getActionableDynamicQuery();
293
294 actionableDynamicQuery.setCompanyId(companyId);
295 actionableDynamicQuery.setPerformActionMethod(
296 new ActionableDynamicQuery.PerformActionMethod() {
297
298 @Override
299 public void performAction(Object object) {
300 ExportImportConfiguration exportImportConfiguration =
301 (ExportImportConfiguration)object;
302
303 try {
304 Document document = getDocument(
305 exportImportConfiguration);
306
307 actionableDynamicQuery.addDocument(document);
308 }
309 catch (PortalException pe) {
310 if (_log.isWarnEnabled()) {
311 _log.warn(
312 "Unable to index export import configuration " +
313 exportImportConfiguration.
314 getExportImportConfigurationId(),
315 pe);
316 }
317 }
318 }
319
320 });
321 actionableDynamicQuery.setSearchEngineId(getSearchEngineId());
322
323 actionableDynamicQuery.performActions();
324 }
325
326 private static final String _PREFIX_PARAMETER = "parameter_";
327
328 private static final String _PREFIX_SETTING = "setting_";
329
330 private static final Log _log = LogFactoryUtil.getLog(
331 ExportImportConfigurationIndexer.class);
332
333 }