001
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
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 }