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;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryUtil;
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.repository.model.Folder;
022    import com.liferay.portal.kernel.util.GetterUtil;
023    import com.liferay.portal.kernel.xml.Element;
024    import com.liferay.portal.model.Repository;
025    import com.liferay.portal.model.RepositoryEntry;
026    import com.liferay.portal.service.RepositoryEntryLocalServiceUtil;
027    import com.liferay.portal.service.RepositoryLocalServiceUtil;
028    import com.liferay.portal.service.ServiceContext;
029    import com.liferay.portlet.documentlibrary.model.DLFolder;
030    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031    import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
032    import com.liferay.portlet.exportimport.lar.BaseStagedModelDataHandler;
033    import com.liferay.portlet.exportimport.lar.ExportImportPathUtil;
034    import com.liferay.portlet.exportimport.lar.PortletDataContext;
035    import com.liferay.portlet.exportimport.lar.StagedModelDataHandlerUtil;
036    import com.liferay.portlet.exportimport.lar.StagedModelModifiedDateComparator;
037    
038    import java.util.List;
039    
040    /**
041     * @author Mate Thurzo
042     */
043    public class RepositoryStagedModelDataHandler
044            extends BaseStagedModelDataHandler<Repository> {
045    
046            public static final String[] CLASS_NAMES = {Repository.class.getName()};
047    
048            @Override
049            public void deleteStagedModel(Repository repository)
050                    throws PortalException {
051    
052                    RepositoryLocalServiceUtil.deleteRepository(
053                            repository.getRepositoryId());
054            }
055    
056            @Override
057            public void deleteStagedModel(
058                            String uuid, long groupId, String className, String extraData)
059                    throws PortalException {
060    
061                    Repository repository = fetchStagedModelByUuidAndGroupId(uuid, groupId);
062    
063                    if (repository != null) {
064                            deleteStagedModel(repository);
065                    }
066            }
067    
068            @Override
069            public Repository fetchStagedModelByUuidAndGroupId(
070                    String uuid, long groupId) {
071    
072                    return RepositoryLocalServiceUtil.fetchRepositoryByUuidAndGroupId(
073                            uuid, groupId);
074            }
075    
076            @Override
077            public List<Repository> fetchStagedModelsByUuidAndCompanyId(
078                    String uuid, long companyId) {
079    
080                    return RepositoryLocalServiceUtil.getRepositoriesByUuidAndCompanyId(
081                            uuid, companyId, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
082                            new StagedModelModifiedDateComparator<Repository>());
083            }
084    
085            @Override
086            public String[] getClassNames() {
087                    return CLASS_NAMES;
088            }
089    
090            @Override
091            public String getDisplayName(Repository repository) {
092                    return repository.getName();
093            }
094    
095            @Override
096            protected void doExportStagedModel(
097                            PortletDataContext portletDataContext, Repository repository)
098                    throws Exception {
099    
100                    Element repositoryElement = portletDataContext.getExportDataElement(
101                            repository);
102    
103                    Folder folder = DLAppLocalServiceUtil.getFolder(
104                            repository.getDlFolderId());
105    
106                    if (folder.getModel() instanceof DLFolder) {
107                            DLFolder dlFolder = (DLFolder)folder.getModel();
108    
109                            repositoryElement.addAttribute(
110                                    "hidden", String.valueOf(dlFolder.isHidden()));
111                    }
112    
113                    portletDataContext.addClassedModel(
114                            repositoryElement, ExportImportPathUtil.getModelPath(repository),
115                            repository);
116    
117                    List<RepositoryEntry> repositoryEntries =
118                            RepositoryEntryLocalServiceUtil.getRepositoryEntries(
119                                    repository.getRepositoryId());
120    
121                    for (RepositoryEntry repositoryEntry : repositoryEntries) {
122                            StagedModelDataHandlerUtil.exportReferenceStagedModel(
123                                    portletDataContext, repository, repositoryEntry,
124                                    PortletDataContext.REFERENCE_TYPE_CHILD);
125                    }
126            }
127    
128            @Override
129            protected void doImportStagedModel(
130                            PortletDataContext portletDataContext, Repository repository)
131                    throws Exception {
132    
133                    long userId = portletDataContext.getUserId(repository.getUserUuid());
134    
135                    ServiceContext serviceContext = portletDataContext.createServiceContext(
136                            repository);
137    
138                    Repository importedRepository = null;
139    
140                    Element repositoryElement =
141                            portletDataContext.getImportDataStagedModelElement(repository);
142    
143                    try {
144                            boolean hidden = GetterUtil.getBoolean(
145                                    repositoryElement.attributeValue("hidden"));
146    
147                            if (portletDataContext.isDataStrategyMirror()) {
148                                    Repository existingRepository =
149                                            fetchStagedModelByUuidAndGroupId(
150                                                    repository.getUuid(),
151                                                    portletDataContext.getScopeGroupId());
152    
153                                    if (existingRepository == null) {
154                                            existingRepository =
155                                                    RepositoryLocalServiceUtil.fetchRepository(
156                                                            portletDataContext.getScopeGroupId(),
157                                                            repository.getName());
158                                    }
159    
160                                    if (existingRepository == null) {
161                                            serviceContext.setUuid(repository.getUuid());
162    
163                                            importedRepository =
164                                                    RepositoryLocalServiceUtil.addRepository(
165                                                            userId, portletDataContext.getScopeGroupId(),
166                                                            repository.getClassNameId(),
167                                                            DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
168                                                            repository.getName(), repository.getDescription(),
169                                                            repository.getPortletId(),
170                                                            repository.getTypeSettingsProperties(), hidden,
171                                                            serviceContext);
172                                    }
173                                    else {
174                                            RepositoryLocalServiceUtil.updateRepository(
175                                                    existingRepository.getRepositoryId(),
176                                                    repository.getName(), repository.getDescription());
177    
178                                            importedRepository = existingRepository;
179                                    }
180                            }
181                            else {
182                                    importedRepository = RepositoryLocalServiceUtil.addRepository(
183                                            userId, portletDataContext.getScopeGroupId(),
184                                            repository.getClassNameId(),
185                                            DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
186                                            repository.getName(), repository.getDescription(),
187                                            repository.getPortletId(),
188                                            repository.getTypeSettingsProperties(), hidden,
189                                            serviceContext);
190                            }
191                    }
192                    catch (Exception e) {
193                            if (_log.isWarnEnabled()) {
194                                    _log.warn(
195                                            "Unable to connect to repository {name=" +
196                                                    repository.getName() + ", typeSettings=" +
197                                                            repository.getTypeSettingsProperties() + "}",
198                                            e);
199                            }
200                    }
201    
202                    portletDataContext.importClassedModel(repository, importedRepository);
203    
204                    StagedModelDataHandlerUtil.importReferenceStagedModels(
205                            portletDataContext, repository, RepositoryEntry.class);
206            }
207    
208            @Override
209            protected void importReferenceStagedModels(
210                    PortletDataContext portletDataContext, Repository stagedModel) {
211            }
212    
213            private static final Log _log = LogFactoryUtil.getLog(
214                    RepositoryStagedModelDataHandler.class);
215    
216    }