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