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