001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
018 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
019 import com.liferay.portal.kernel.lar.PortletDataContext;
020 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.repository.model.Folder;
024 import com.liferay.portal.kernel.util.GetterUtil;
025 import com.liferay.portal.kernel.xml.Element;
026 import com.liferay.portal.model.Repository;
027 import com.liferay.portal.model.RepositoryEntry;
028 import com.liferay.portal.repository.liferayrepository.LiferayRepository;
029 import com.liferay.portal.service.RepositoryLocalServiceUtil;
030 import com.liferay.portal.service.ServiceContext;
031 import com.liferay.portal.service.persistence.RepositoryEntryUtil;
032 import com.liferay.portal.service.persistence.RepositoryUtil;
033 import com.liferay.portal.util.PortalUtil;
034 import com.liferay.portlet.documentlibrary.model.DLFolder;
035 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
036 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
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 String[] getClassNames() {
050 return CLASS_NAMES;
051 }
052
053 @Override
054 protected void doExportStagedModel(
055 PortletDataContext portletDataContext, Repository repository)
056 throws Exception {
057
058 Element repositoryElement =
059 portletDataContext.getExportDataStagedModelElement(repository);
060
061 Folder folder = DLAppLocalServiceUtil.getFolder(
062 repository.getDlFolderId());
063
064 if (folder.getModel() instanceof DLFolder) {
065 DLFolder dlFolder = (DLFolder)folder.getModel();
066
067 repositoryElement.addAttribute(
068 "hidden", String.valueOf(dlFolder.isHidden()));
069 }
070
071 portletDataContext.addClassedModel(
072 repositoryElement, ExportImportPathUtil.getModelPath(repository),
073 repository, DLPortletDataHandler.NAMESPACE);
074
075 List<RepositoryEntry> repositoryEntries =
076 RepositoryEntryUtil.findByRepositoryId(
077 repository.getRepositoryId());
078
079 for (RepositoryEntry repositoryEntry : repositoryEntries) {
080 StagedModelDataHandlerUtil.exportStagedModel(
081 portletDataContext, repositoryEntry);
082
083 portletDataContext.addReferenceElement(
084 repositoryElement, repositoryEntry);
085 }
086 }
087
088 @Override
089 protected void doImportStagedModel(
090 PortletDataContext portletDataContext, Repository repository)
091 throws Exception {
092
093 long userId = portletDataContext.getUserId(repository.getUserUuid());
094
095 ServiceContext serviceContext = portletDataContext.createServiceContext(
096 repository, DLPortletDataHandler.NAMESPACE);
097
098 Repository importedRepository = null;
099
100 Element repositoryElement =
101 portletDataContext.getImportDataStagedModelElement(repository);
102
103 try {
104 boolean hidden = GetterUtil.getBoolean(
105 repositoryElement.attributeValue("hidden"));
106
107 if (portletDataContext.isDataStrategyMirror()) {
108 Repository existingRepository = RepositoryUtil.fetchByUUID_G(
109 repository.getUuid(), portletDataContext.getScopeGroupId());
110
111 if (existingRepository == null) {
112 existingRepository =
113 RepositoryLocalServiceUtil.fetchRepository(
114 portletDataContext.getScopeGroupId(),
115 repository.getName());
116 }
117
118 long classNameId = 0;
119
120 if (existingRepository != null) {
121 classNameId = existingRepository.getClassNameId();
122 }
123
124 if ((existingRepository == null) ||
125 (classNameId !=
126 PortalUtil.getClassNameId(LiferayRepository.class))) {
127
128 serviceContext.setUuid(repository.getUuid());
129
130 importedRepository =
131 RepositoryLocalServiceUtil.addRepository(
132 userId, portletDataContext.getScopeGroupId(),
133 repository.getClassNameId(),
134 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
135 repository.getName(), repository.getDescription(),
136 repository.getPortletId(),
137 repository.getTypeSettingsProperties(), hidden,
138 serviceContext);
139 }
140 else {
141 RepositoryLocalServiceUtil.updateRepository(
142 existingRepository.getRepositoryId(),
143 repository.getName(), repository.getDescription());
144
145 importedRepository = existingRepository;
146 }
147 }
148 else {
149 importedRepository = RepositoryLocalServiceUtil.addRepository(
150 userId, portletDataContext.getScopeGroupId(),
151 repository.getClassNameId(),
152 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
153 repository.getName(), repository.getDescription(),
154 repository.getPortletId(),
155 repository.getTypeSettingsProperties(), hidden,
156 serviceContext);
157 }
158 }
159 catch (Exception e) {
160 if (_log.isWarnEnabled()) {
161 _log.warn(
162 "Unable to connect to repository {name=" +
163 repository.getName() + ", typeSettings=" +
164 repository.getTypeSettingsProperties() + "}",
165 e);
166 }
167 }
168
169 portletDataContext.importClassedModel(
170 repository, importedRepository, DLPortletDataHandler.NAMESPACE);
171
172 List<Element> repositoryEntryElements =
173 portletDataContext.getReferencedDataElements(
174 repository, RepositoryEntry.class);
175
176 for (Element repositoryEntryElement : repositoryEntryElements) {
177 StagedModelDataHandlerUtil.importStagedModel(
178 portletDataContext, repositoryEntryElement);
179 }
180 }
181
182 private static Log _log = LogFactoryUtil.getLog(
183 RepositoryStagedModelDataHandler.class);
184
185 }