001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.lar.PortletDataContext;
024 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
025 import com.liferay.portal.kernel.repository.model.FileEntry;
026 import com.liferay.portal.kernel.repository.model.Folder;
027 import com.liferay.portal.kernel.util.GetterUtil;
028 import com.liferay.portal.kernel.util.MapUtil;
029 import com.liferay.portal.kernel.util.StringPool;
030 import com.liferay.portal.kernel.xml.Element;
031 import com.liferay.portal.model.RepositoryEntry;
032 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
033 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
034 import com.liferay.portlet.documentlibrary.model.DLFileRank;
035 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
036 import com.liferay.portlet.documentlibrary.model.DLFolder;
037 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
038 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
039 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
040 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryActionableDynamicQuery;
041 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderActionableDynamicQuery;
042
043 import java.util.ArrayList;
044 import java.util.List;
045 import java.util.Map;
046
047 import javax.portlet.PortletPreferences;
048
049
052 public class DLDisplayPortletDataHandler extends DLPortletDataHandler {
053
054 public DLDisplayPortletDataHandler() {
055 setAlwaysExportable(false);
056 }
057
058 @Override
059 protected PortletPreferences doDeleteData(
060 PortletDataContext portletDataContext, String portletId,
061 PortletPreferences portletPreferences)
062 throws Exception {
063
064 if (portletPreferences == null) {
065 return portletPreferences;
066 }
067
068 portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
069 portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
070 portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
071 portletPreferences.setValue("folderColumns", StringPool.BLANK);
072 portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
073 portletPreferences.setValue("rootFolderId", StringPool.BLANK);
074 portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
075 portletPreferences.setValue("showSubfolders", StringPool.BLANK);
076
077 return portletPreferences;
078 }
079
080 @Override
081 protected String doExportData(
082 final PortletDataContext portletDataContext, String portletId,
083 PortletPreferences portletPreferences)
084 throws Exception {
085
086 portletDataContext.addPermissions(
087 "com.liferay.portlet.documentlibrary",
088 portletDataContext.getScopeGroupId());
089
090 Element rootElement = addExportDataRootElement(portletDataContext);
091
092 rootElement.addAttribute(
093 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
094
095 long rootFolderId = GetterUtil.getLong(
096 portletPreferences.getValue("rootFolderId", null));
097
098 if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
099 ActionableDynamicQuery folderActionableDynamicQuery =
100 new DLFolderActionableDynamicQuery() {
101
102 @Override
103 protected void addCriteria(DynamicQuery dynamicQuery) {
104 portletDataContext.addDateRangeCriteria(
105 dynamicQuery, "modifiedDate");
106 }
107
108 @Override
109 protected void performAction(Object object)
110 throws PortalException, SystemException {
111
112 DLFolder dlFolder = (DLFolder)object;
113
114 Folder folder = DLAppLocalServiceUtil.getFolder(
115 dlFolder.getFolderId());
116
117 StagedModelDataHandlerUtil.exportStagedModel(
118 portletDataContext, folder);
119 }
120
121 };
122
123 folderActionableDynamicQuery.setGroupId(
124 portletDataContext.getScopeGroupId());
125
126 folderActionableDynamicQuery.performActions();
127
128 ActionableDynamicQuery fileEntryActionableDynamicQuery =
129 new DLFileEntryActionableDynamicQuery() {
130
131 @Override
132 protected void addCriteria(DynamicQuery dynamicQuery) {
133 portletDataContext.addDateRangeCriteria(
134 dynamicQuery, "modifiedDate");
135 }
136
137 @Override
138 protected void performAction(Object object)
139 throws PortalException, SystemException {
140
141 DLFileEntry dlFileEntry = (DLFileEntry)object;
142
143 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
144 dlFileEntry.getFileEntryId());
145
146 StagedModelDataHandlerUtil.exportStagedModel(
147 portletDataContext, fileEntry);
148 }
149
150 };
151
152 fileEntryActionableDynamicQuery.setGroupId(
153 portletDataContext.getScopeGroupId());
154
155 fileEntryActionableDynamicQuery.performActions();
156
157 return getExportDataRootElementString(rootElement);
158 }
159
160 Folder rootFolder = DLAppLocalServiceUtil.getFolder(rootFolderId);
161
162 rootElement.addAttribute(
163 "root-folder-id", String.valueOf(rootFolder.getFolderId()));
164 rootElement.addAttribute(
165 "default-repository",
166 String.valueOf(rootFolder.isDefaultRepository()));
167
168 final List<Long> folderIds = new ArrayList<Long>();
169
170 DLFolderLocalServiceUtil.getSubfolderIds(
171 folderIds, portletDataContext.getScopeGroupId(), rootFolderId);
172
173 folderIds.add(rootFolderId);
174
175 for (long folderId : folderIds) {
176 Folder folder = DLAppLocalServiceUtil.getFolder(folderId);
177
178 StagedModelDataHandlerUtil.exportStagedModel(
179 portletDataContext, folder);
180 }
181
182 ActionableDynamicQuery fileEntryActionableDynamicQuery =
183 new DLFileEntryActionableDynamicQuery() {
184
185 @Override
186 protected void addCriteria(DynamicQuery dynamicQuery) {
187 portletDataContext.addDateRangeCriteria(
188 dynamicQuery, "modifiedDate");
189
190 Property property = PropertyFactoryUtil.forName("folderId");
191
192 Long[] folderIdsArray = folderIds.toArray(
193 new Long[folderIds.size()]);
194
195 dynamicQuery.add(property.in(folderIdsArray));
196 }
197
198 @Override
199 protected void performAction(Object object)
200 throws PortalException, SystemException {
201
202 DLFileEntry dlFileEntry = (DLFileEntry)object;
203
204 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
205 dlFileEntry.getFileEntryId());
206
207 StagedModelDataHandlerUtil.exportStagedModel(
208 portletDataContext, fileEntry);
209 }
210
211 };
212
213 fileEntryActionableDynamicQuery.setGroupId(
214 portletDataContext.getScopeGroupId());
215
216 fileEntryActionableDynamicQuery.performActions();
217
218 return getExportDataRootElementString(rootElement);
219 }
220
221 @Override
222 protected PortletPreferences doImportData(
223 PortletDataContext portletDataContext, String portletId,
224 PortletPreferences portletPreferences, String data)
225 throws Exception {
226
227 portletDataContext.importPermissions(
228 "com.liferay.portlet.documentlibrary",
229 portletDataContext.getSourceGroupId(),
230 portletDataContext.getScopeGroupId());
231
232 Element fileEntryTypesElement =
233 portletDataContext.getImportDataGroupElement(DLFileEntryType.class);
234
235 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();
236
237 for (Element fileEntryTypeElement : fileEntryTypeElements) {
238 StagedModelDataHandlerUtil.importStagedModel(
239 portletDataContext, fileEntryTypeElement);
240 }
241
242 Element foldersElement = portletDataContext.getImportDataGroupElement(
243 DLFolder.class);
244
245 List<Element> folderElements = foldersElement.elements();
246
247 for (Element folderElement : folderElements) {
248 StagedModelDataHandlerUtil.importStagedModel(
249 portletDataContext, folderElement);
250 }
251
252 Element fileEntriesElement =
253 portletDataContext.getImportDataGroupElement(DLFileEntry.class);
254
255 List<Element> fileEntryElements = fileEntriesElement.elements();
256
257 for (Element fileEntryElement : fileEntryElements) {
258 StagedModelDataHandlerUtil.importStagedModel(
259 portletDataContext, fileEntryElement);
260 }
261
262 if (portletDataContext.getBooleanParameter(
263 DLPortletDataHandler.NAMESPACE, "shortcuts")) {
264
265 Element fileShortcutsElement =
266 portletDataContext.getImportDataGroupElement(
267 DLFileShortcut.class);
268
269 List<Element> fileShortcutElements =
270 fileShortcutsElement.elements();
271
272 for (Element fileShortcutElement : fileShortcutElements) {
273 StagedModelDataHandlerUtil.importStagedModel(
274 portletDataContext, fileShortcutElement);
275 }
276 }
277
278 if (portletDataContext.getBooleanParameter(
279 DLPortletDataHandler.NAMESPACE, "ranks")) {
280
281 Element fileRanksElement =
282 portletDataContext.getImportDataGroupElement(DLFileRank.class);
283
284 List<Element> fileRankElements = fileRanksElement.elements();
285
286 for (Element fileRankElement : fileRankElements) {
287 StagedModelDataHandlerUtil.importStagedModel(
288 portletDataContext, fileRankElement);
289 }
290 }
291
292 Element rootElement = portletDataContext.getImportDataRootElement();
293
294 long rootFolderId = GetterUtil.getLong(
295 rootElement.attributeValue("root-folder-id"));
296 boolean defaultRepository = GetterUtil.getBoolean(
297 rootElement.attributeValue("default-repository"), true);
298
299 if (rootFolderId > 0) {
300 Map<Long, Long> folderIds = null;
301
302 if (defaultRepository) {
303 folderIds =
304 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
305 DLFolder.class);
306 }
307 else {
308 folderIds =
309 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
310 RepositoryEntry.class);
311 }
312
313 rootFolderId = MapUtil.getLong(
314 folderIds, rootFolderId, rootFolderId);
315
316 portletPreferences.setValue(
317 "rootFolderId", String.valueOf(rootFolderId));
318 }
319
320 return portletPreferences;
321 }
322
323 }