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.documentlibrary.lar.lifecycle;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.search.Indexer;
020    import com.liferay.portal.kernel.search.IndexerRegistryUtil;
021    import com.liferay.portal.kernel.search.SearchException;
022    import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
023    import com.liferay.portal.kernel.util.ArrayUtil;
024    import com.liferay.portal.kernel.util.ListUtil;
025    import com.liferay.portal.kernel.util.MapUtil;
026    import com.liferay.portal.kernel.util.PredicateFilter;
027    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
028    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
029    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
030    import com.liferay.portlet.exportimport.lar.PortletDataContext;
031    import com.liferay.portlet.exportimport.lifecycle.BaseExportImportLifecycleListener;
032    
033    import java.util.List;
034    import java.util.Map;
035    
036    /**
037     * @author Mate Thurzo
038     */
039    @OSGiBeanProperties
040    public class DLIndexingExportImportLifecycleListener
041            extends BaseExportImportLifecycleListener {
042    
043            @Override
044            public boolean isParallel() {
045                    return true;
046            }
047    
048            @Override
049            protected void onLayoutImportProcessFinished(
050                            PortletDataContext portletDataContext)
051                    throws Exception {
052    
053                    reindex(portletDataContext);
054            }
055    
056            @Override
057            protected void onPortletImportProcessFinished(
058                            PortletDataContext portletDataContext)
059                    throws Exception {
060    
061                    reindex(portletDataContext);
062            }
063    
064            protected void reindex(PortletDataContext portletDataContext) {
065                    Map<String, Long> ddmStructureIds =
066                            (Map<String, Long>)portletDataContext.getNewPrimaryKeysMap(
067                                    DDMStructure.class);
068    
069                    if (MapUtil.isEmpty(ddmStructureIds)) {
070                            return;
071                    }
072    
073                    List<DLFileEntry> dlFileEntries =
074                            DLFileEntryLocalServiceUtil.getDDMStructureFileEntries(
075                                    portletDataContext.getGroupId(),
076                                    ArrayUtil.toLongArray(ddmStructureIds.values()));
077    
078                    final Map<Long, Long> dlFileEntryPrimaryKeysMap =
079                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
080                                    DLFileEntry.class);
081    
082                    dlFileEntries = ListUtil.filter(
083                            dlFileEntries,
084                            new PredicateFilter<DLFileEntry>() {
085    
086                                    @Override
087                                    public boolean filter(DLFileEntry dlFileEntry) {
088                                            return !dlFileEntryPrimaryKeysMap.containsValue(
089                                                    dlFileEntry.getFileEntryId());
090                                    }
091    
092                            });
093    
094                    Indexer dlFileEntryIndexer = IndexerRegistryUtil.getIndexer(
095                            DLFileEntry.class);
096    
097                    if (dlFileEntryIndexer == null) {
098                            return;
099                    }
100    
101                    for (DLFileEntry dlFileEntry : dlFileEntries) {
102                            try {
103                                    dlFileEntryIndexer.reindex(dlFileEntry);
104                            }
105                            catch (SearchException se) {
106                                    if (_log.isDebugEnabled() && (dlFileEntry != null)) {
107                                            _log.debug(
108                                                    "Unable to reindex file entry " +
109                                                            dlFileEntry.getFileEntryId(),
110                                                    se);
111                                    }
112                            }
113                    }
114            }
115    
116            private static final Log _log = LogFactoryUtil.getLog(
117                    DLIndexingExportImportLifecycleListener.class);
118    
119    }