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.layoutsadmin.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.search.BaseIndexer;
020    import com.liferay.portal.kernel.search.Document;
021    import com.liferay.portal.kernel.search.Field;
022    import com.liferay.portal.kernel.search.SearchContext;
023    import com.liferay.portal.kernel.search.SearchEngineUtil;
024    import com.liferay.portal.kernel.search.Summary;
025    import com.liferay.portal.kernel.util.ArrayUtil;
026    import com.liferay.portal.kernel.util.GetterUtil;
027    import com.liferay.portal.kernel.util.MapUtil;
028    import com.liferay.portal.kernel.util.StringPool;
029    import com.liferay.portal.model.ExportImportConfiguration;
030    import com.liferay.portal.service.ExportImportConfigurationLocalServiceUtil;
031    import com.liferay.portal.util.PortletKeys;
032    
033    import java.io.Serializable;
034    
035    import java.util.Date;
036    import java.util.Locale;
037    import java.util.Map;
038    import java.util.TimeZone;
039    
040    import javax.portlet.PortletRequest;
041    import javax.portlet.PortletResponse;
042    import javax.portlet.PortletURL;
043    
044    /**
045     * @author Mate Thurzo
046     */
047    public class ExportImportConfigurationIndexer extends BaseIndexer {
048    
049            public static final String[] CLASS_NAMES =
050                    {ExportImportConfiguration.class.getName()};
051    
052            public static final String PORTLET_ID = PortletKeys.LAYOUTS_ADMIN;
053    
054            @Override
055            public String[] getClassNames() {
056                    return CLASS_NAMES;
057            }
058    
059            @Override
060            public String getPortletId() {
061                    return PORTLET_ID;
062            }
063    
064            @Override
065            protected void doDelete(Object obj) throws Exception {
066                    ExportImportConfiguration exportImportConfiguration =
067                            (ExportImportConfiguration)obj;
068    
069                    deleteDocument(
070                            exportImportConfiguration.getCompanyId(),
071                            exportImportConfiguration.getExportImportConfigurationId());
072            }
073    
074            @Override
075            protected Document doGetDocument(Object obj) throws Exception {
076                    ExportImportConfiguration exportImportConfiguration =
077                            (ExportImportConfiguration)obj;
078    
079                    Document document = getBaseModelDocument(
080                            PORTLET_ID, exportImportConfiguration);
081    
082                    document.addText(
083                            Field.DESCRIPTION, exportImportConfiguration.getDescription());
084                    document.addText(Field.NAME, exportImportConfiguration.getName());
085                    document.addKeyword(Field.TYPE, exportImportConfiguration.getType());
086    
087                    Map<String, Serializable> settingsMap =
088                            exportImportConfiguration.getSettingsMap();
089    
090                    populateDates(document, settingsMap);
091                    populateLayoutIds(document, settingsMap);
092                    populateLocale(document, settingsMap);
093                    populateParameterMap(document, settingsMap);
094                    populateSiteInformation(document, settingsMap);
095                    populateTimeZone(document, settingsMap);
096    
097                    document.addKeyword(
098                            _PREFIX_SETTING + Field.USER_ID,
099                            MapUtil.getLong(settingsMap, "userId"));
100    
101                    return document;
102            }
103    
104            @Override
105            protected Summary doGetSummary(
106                            Document document, Locale locale, String snippet,
107                            PortletURL portletURL, PortletRequest portletRequest,
108                            PortletResponse portletResponse)
109                    throws Exception {
110    
111                    String exportImportConfigurationId = document.get(Field.ENTRY_CLASS_PK);
112    
113                    Summary summary = createSummary(
114                            document, Field.TITLE, Field.DESCRIPTION);
115    
116                    portletURL.setParameter(
117                            "struts_action", "/layouts_admin/edit_export_configuration");
118                    portletURL.setParameter(
119                            "exportImportConfigurationId", exportImportConfigurationId);
120    
121                    summary.setPortletURL(portletURL);
122    
123                    return summary;
124            }
125    
126            @Override
127            protected void doReindex(Object obj) throws Exception {
128                    ExportImportConfiguration exportImportConfiguration =
129                            (ExportImportConfiguration)obj;
130    
131                    Document document = getDocument(exportImportConfiguration);
132    
133                    SearchEngineUtil.updateDocument(
134                            getSearchEngineId(), exportImportConfiguration.getCompanyId(),
135                            document, isCommitImmediately());
136            }
137    
138            @Override
139            protected void doReindex(String className, long classPK) throws Exception {
140                    ExportImportConfiguration exportImportConfiguration =
141                            ExportImportConfigurationLocalServiceUtil.
142                                    getExportImportConfiguration(classPK);
143    
144                    doReindex(exportImportConfiguration);
145            }
146    
147            @Override
148            protected void doReindex(String[] ids) throws Exception {
149                    long companyId = GetterUtil.getLong(ids[0]);
150    
151                    reindexExportImportConfigurations(companyId);
152            }
153    
154            @Override
155            protected String getPortletId(SearchContext searchContext) {
156                    return PORTLET_ID;
157            }
158    
159            protected void populateDates(
160                    Document document, Map<String, Serializable> settingsMap) {
161    
162                    if (settingsMap.containsKey("endDate")) {
163                            Date endDate = (Date)settingsMap.get("endDate");
164    
165                            document.addDate(_PREFIX_SETTING + "endDate", endDate);
166                    }
167    
168                    if (settingsMap.containsKey("startDate")) {
169                            Date startDate = (Date)settingsMap.get("startDate");
170    
171                            document.addDate(_PREFIX_SETTING + "startDate", startDate);
172                    }
173            }
174    
175            protected void populateLayoutIds(
176                    Document document, Map<String, Serializable> settingsMap) {
177    
178                    if (!settingsMap.containsKey("layoutIdMap")) {
179                            return;
180                    }
181    
182                    Map<Number, Boolean> layoutIdMap =
183                            (Map<Number, Boolean>)settingsMap.get("layoutIdMap");
184    
185                    document.addKeyword(
186                            "layoutIds", ArrayUtil.toLongArray(layoutIdMap.keySet()));
187            }
188    
189            protected void populateLocale(
190                    Document document, Map<String, Serializable> settingsMap) {
191    
192                    Locale locale = (Locale)settingsMap.get("locale");
193    
194                    document.addText(_PREFIX_SETTING + "locale", locale.toString());
195            }
196    
197            protected void populateParameterMap(
198                    Document document, Map<String, Serializable> settingsMap) {
199    
200                    if (!settingsMap.containsKey("parameterMap")) {
201                            return;
202                    }
203    
204                    Map<String, String[]> parameterMap =
205                            (Map<String, String[]>)settingsMap.get("parameterMap");
206    
207                    for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
208                            String[] parameterValues = ArrayUtil.clone(entry.getValue());
209    
210                            for (int i = 0; i < parameterValues.length; i++) {
211                                    String parameterValue = parameterValues[i];
212    
213                                    if (parameterValue.equals(StringPool.TRUE)) {
214                                            parameterValues[i] = "on";
215                                    }
216                                    else if (parameterValue.equals(StringPool.FALSE)) {
217                                            parameterValues[i] = "off";
218                                    }
219                            }
220    
221                            document.addKeyword(
222                                    _PREFIX_PARAMETER + entry.getKey(), parameterValues);
223                    }
224            }
225    
226            protected void populateSiteInformation(
227                    Document document, Map<String, Serializable> settingsMap) {
228    
229                    document.addKeyword(
230                            _PREFIX_SETTING + "privateLayout",
231                            MapUtil.getBoolean(settingsMap, "privateLayout"));
232                    document.addKeyword(
233                            _PREFIX_SETTING + "sourceGroupId",
234                            MapUtil.getLong(settingsMap, "sourceGroupId"));
235                    document.addKeyword(
236                            _PREFIX_SETTING + "targetGroupId",
237                            MapUtil.getLong(settingsMap, "targetGroupId"));
238            }
239    
240            protected void populateTimeZone(
241                    Document document, Map<String, Serializable> settingsMap) {
242    
243                    TimeZone timeZone = (TimeZone)settingsMap.get("timeZone");
244    
245                    if (timeZone != null) {
246                            document.addKeyword(
247                                    _PREFIX_SETTING + "timeZone", timeZone.getDisplayName());
248                    }
249            }
250    
251            protected void reindexExportImportConfigurations(long companyId)
252                    throws PortalException {
253    
254                    final ActionableDynamicQuery actionableDynamicQuery =
255                            ExportImportConfigurationLocalServiceUtil.
256                                    getActionableDynamicQuery();
257    
258                    actionableDynamicQuery.setCompanyId(companyId);
259                    actionableDynamicQuery.setPerformActionMethod(
260                            new ActionableDynamicQuery.PerformActionMethod() {
261    
262                                    @Override
263                                    public void performAction(Object object)
264                                            throws PortalException {
265    
266                                            ExportImportConfiguration exportImportConfiguration =
267                                                    (ExportImportConfiguration)object;
268    
269                                            Document document = getDocument(exportImportConfiguration);
270    
271                                            actionableDynamicQuery.addDocument(document);
272                                    }
273    
274                            });
275                    actionableDynamicQuery.setSearchEngineId(getSearchEngineId());
276    
277                    actionableDynamicQuery.performActions();
278            }
279    
280            private static final String _PREFIX_PARAMETER = "parameter_";
281    
282            private static final String _PREFIX_SETTING = "setting_";
283    
284    }