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.BasePortletDataHandler;
024 import com.liferay.portal.kernel.lar.PortletDataContext;
025 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
026 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
027 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
028 import com.liferay.portal.kernel.repository.model.FileEntry;
029 import com.liferay.portal.kernel.repository.model.Folder;
030 import com.liferay.portal.kernel.util.GetterUtil;
031 import com.liferay.portal.kernel.util.MapUtil;
032 import com.liferay.portal.kernel.xml.Element;
033 import com.liferay.portal.model.Group;
034 import com.liferay.portal.service.GroupLocalServiceUtil;
035 import com.liferay.portal.util.PropsValues;
036 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
037 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
038 import com.liferay.portlet.documentlibrary.model.DLFileRank;
039 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
040 import com.liferay.portlet.documentlibrary.model.DLFolder;
041 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
042 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
043 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryActionableDynamicQuery;
044 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryTypeActionableDynamicQuery;
045 import com.liferay.portlet.documentlibrary.service.persistence.DLFileShortcutActionableDynamicQuery;
046 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderActionableDynamicQuery;
047
048 import java.util.List;
049 import java.util.Map;
050
051 import javax.portlet.PortletPreferences;
052
053
059 public class DLPortletDataHandler extends BasePortletDataHandler {
060
061 public static final String NAMESPACE = "document_library";
062
063 public DLPortletDataHandler() {
064 setAlwaysExportable(true);
065 setDataLocalized(true);
066 setDataPortletPreferences("rootFolderId");
067 setExportControls(
068 new PortletDataHandlerBoolean(
069 NAMESPACE, "folders-and-documents", true, true),
070 new PortletDataHandlerBoolean(NAMESPACE, "shortcuts"),
071 new PortletDataHandlerBoolean(NAMESPACE, "previews-and-thumbnails"),
072 new PortletDataHandlerBoolean(NAMESPACE, "ranks"));
073 setExportMetadataControls(
074 new PortletDataHandlerBoolean(
075 NAMESPACE, "folders-and-documents", true,
076 new PortletDataHandlerControl[] {
077 new PortletDataHandlerBoolean(NAMESPACE, "categories"),
078 new PortletDataHandlerBoolean(NAMESPACE, "comments"),
079 new PortletDataHandlerBoolean(NAMESPACE, "ratings"),
080 new PortletDataHandlerBoolean(NAMESPACE, "tags")
081 }));
082 setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
083 }
084
085 @Override
086 protected PortletPreferences doDeleteData(
087 PortletDataContext portletDataContext, String portletId,
088 PortletPreferences portletPreferences)
089 throws Exception {
090
091 if (portletDataContext.addPrimaryKey(
092 DLPortletDataHandler.class, "deleteData")) {
093
094 return portletPreferences;
095 }
096
097 DLAppLocalServiceUtil.deleteAll(portletDataContext.getScopeGroupId());
098
099 return portletPreferences;
100 }
101
102 @Override
103 protected String doExportData(
104 final PortletDataContext portletDataContext, String portletId,
105 PortletPreferences portletPreferences)
106 throws Exception {
107
108 portletDataContext.addPermissions(
109 "com.liferay.portlet.documentlibrary",
110 portletDataContext.getScopeGroupId());
111
112 Element rootElement = addExportDataRootElement(portletDataContext);
113
114 rootElement.addAttribute(
115 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
116
117 long rootFolderId = GetterUtil.getLong(
118 portletPreferences.getValue("rootFolderId", null));
119
120 if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
121 rootElement.addAttribute(
122 "root-folder-id", String.valueOf(rootFolderId));
123 }
124
125 final Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
126 portletDataContext.getCompanyId());
127
128 ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
129 new DLFileEntryTypeActionableDynamicQuery() {
130
131 @Override
132 protected void addCriteria(DynamicQuery dynamicQuery) {
133 portletDataContext.addDateRangeCriteria(
134 dynamicQuery, "modifiedDate");
135
136 Property property = PropertyFactoryUtil.forName("groupId");
137
138 dynamicQuery.add(
139 property.in(
140 new Long[] {
141 portletDataContext.getScopeGroupId(),
142 companyGroup.getGroupId()
143 }));
144 }
145
146 @Override
147 protected void performAction(Object object) throws PortalException {
148 DLFileEntryType fileEntryType = (DLFileEntryType)object;
149
150 if (fileEntryType.isExportable()) {
151 StagedModelDataHandlerUtil.exportStagedModel(
152 portletDataContext, fileEntryType);
153 }
154 }
155
156 };
157
158 fileEntryTypeActionableDynamicQuery.performActions();
159
160 ActionableDynamicQuery folderActionableDynamicQuery =
161 new DLFolderActionableDynamicQuery() {
162
163 @Override
164 protected void addCriteria(DynamicQuery dynamicQuery) {
165 portletDataContext.addDateRangeCriteria(
166 dynamicQuery, "modifiedDate");
167 }
168
169 @Override
170 protected void performAction(Object object)
171 throws PortalException, SystemException {
172
173 DLFolder dlFolder = (DLFolder)object;
174
175 Folder folder = DLAppLocalServiceUtil.getFolder(
176 dlFolder.getFolderId());
177
178 StagedModelDataHandlerUtil.exportStagedModel(
179 portletDataContext, folder);
180 }
181
182 };
183
184 folderActionableDynamicQuery.setGroupId(
185 portletDataContext.getScopeGroupId());
186
187 folderActionableDynamicQuery.performActions();
188
189 ActionableDynamicQuery fileEntryActionableDynamicQuery =
190 new DLFileEntryActionableDynamicQuery() {
191
192 @Override
193 protected void addCriteria(DynamicQuery dynamicQuery) {
194 portletDataContext.addDateRangeCriteria(
195 dynamicQuery, "modifiedDate");
196 }
197
198 @Override
199 protected void performAction(Object object)
200 throws PortalException, SystemException {
201
202 DLFileEntry dlFileEntry = (DLFileEntry)object;
203
204 FileEntry fileEntry =
205 DLAppLocalServiceUtil.getFileEntry(
206 dlFileEntry.getFileEntryId());
207
208 StagedModelDataHandlerUtil.exportStagedModel(
209 portletDataContext, fileEntry);
210 }
211
212 };
213
214 fileEntryActionableDynamicQuery.setGroupId(
215 portletDataContext.getScopeGroupId());
216
217 fileEntryActionableDynamicQuery.performActions();
218
219 if (!portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
220 return getExportDataRootElementString(rootElement);
221 }
222
223 ActionableDynamicQuery fileShortcutActionableDynamicQuery =
224 new DLFileShortcutActionableDynamicQuery() {
225
226 @Override
227 protected void addCriteria(DynamicQuery dynamicQuery) {
228 portletDataContext.addDateRangeCriteria(
229 dynamicQuery, "modifiedDate");
230
231 Property property = PropertyFactoryUtil.forName("active");
232
233 dynamicQuery.add(property.eq(Boolean.TRUE));
234 }
235
236 @Override
237 protected void performAction(Object object) throws PortalException {
238 DLFileShortcut fileShortcut = (DLFileShortcut)object;
239
240 StagedModelDataHandlerUtil.exportStagedModel(
241 portletDataContext, fileShortcut);
242 }
243
244 };
245
246 fileShortcutActionableDynamicQuery.setGroupId(
247 portletDataContext.getScopeGroupId());
248
249 fileShortcutActionableDynamicQuery.performActions();
250
251 return getExportDataRootElementString(rootElement);
252 }
253
254 @Override
255 protected PortletPreferences doImportData(
256 PortletDataContext portletDataContext, String portletId,
257 PortletPreferences portletPreferences, String data)
258 throws Exception {
259
260 portletDataContext.importPermissions(
261 "com.liferay.portlet.documentlibrary",
262 portletDataContext.getSourceGroupId(),
263 portletDataContext.getScopeGroupId());
264
265 Element fileEntryTypesElement =
266 portletDataContext.getImportDataGroupElement(DLFileEntryType.class);
267
268 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();
269
270 for (Element fileEntryTypeElement : fileEntryTypeElements) {
271 StagedModelDataHandlerUtil.importStagedModel(
272 portletDataContext, fileEntryTypeElement);
273 }
274
275 Element foldersElement = portletDataContext.getImportDataGroupElement(
276 Folder.class);
277
278 List<Element> folderElements = foldersElement.elements();
279
280 for (Element folderElement : folderElements) {
281 StagedModelDataHandlerUtil.importStagedModel(
282 portletDataContext, folderElement);
283 }
284
285 Element fileEntriesElement =
286 portletDataContext.getImportDataGroupElement(FileEntry.class);
287
288 List<Element> fileEntryElements = fileEntriesElement.elements();
289
290 for (Element fileEntryElement : fileEntryElements) {
291 StagedModelDataHandlerUtil.importStagedModel(
292 portletDataContext, fileEntryElement);
293 }
294
295 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
296 Element fileShortcutsElement =
297 portletDataContext.getImportDataGroupElement(
298 DLFileShortcut.class);
299
300 List<Element> fileShortcutElements =
301 fileShortcutsElement.elements();
302
303 for (Element fileShortcutElement : fileShortcutElements) {
304 StagedModelDataHandlerUtil.importStagedModel(
305 portletDataContext, fileShortcutElement);
306 }
307 }
308
309 if (portletDataContext.getBooleanParameter(NAMESPACE, "ranks")) {
310 Element fileRanksElement =
311 portletDataContext.getImportDataGroupElement(DLFileRank.class);
312
313 List<Element> fileRankElements = fileRanksElement.elements();
314
315 for (Element fileRankElement : fileRankElements) {
316 StagedModelDataHandlerUtil.importStagedModel(
317 portletDataContext, fileRankElement);
318 }
319 }
320
321 Element rootElement = portletDataContext.getImportDataRootElement();
322
323 long rootFolderId = GetterUtil.getLong(
324 rootElement.attributeValue("root-folder-id"));
325
326 if (rootFolderId > 0) {
327 Map<Long, Long> folderIds =
328 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
329 DLFolder.class);
330
331 rootFolderId = MapUtil.getLong(
332 folderIds, rootFolderId, rootFolderId);
333
334 portletPreferences.setValue(
335 "rootFolderId", String.valueOf(rootFolderId));
336 }
337
338 return portletPreferences;
339 }
340
341 }