001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
049     * @author Mate Thurzo
050     * @author Akos Thurzo
051     */
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    }