001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.repository.liferayrepository;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.repository.LocalRepository;
019    import com.liferay.portal.kernel.repository.model.FileEntry;
020    import com.liferay.portal.kernel.repository.model.FileShortcut;
021    import com.liferay.portal.kernel.repository.model.FileVersion;
022    import com.liferay.portal.kernel.repository.model.Folder;
023    import com.liferay.portal.kernel.util.OrderByComparator;
024    import com.liferay.portal.kernel.util.ParamUtil;
025    import com.liferay.portal.kernel.util.SortedArrayList;
026    import com.liferay.portal.kernel.util.UnicodeProperties;
027    import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
028    import com.liferay.portal.repository.liferayrepository.model.LiferayFileShortcut;
029    import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
030    import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
031    import com.liferay.portal.service.RepositoryLocalService;
032    import com.liferay.portal.service.RepositoryService;
033    import com.liferay.portal.service.ResourceLocalService;
034    import com.liferay.portal.service.ServiceContext;
035    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
036    import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
037    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
038    import com.liferay.portlet.documentlibrary.model.DLFolder;
039    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalService;
040    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService;
041    import com.liferay.portlet.documentlibrary.service.DLFileEntryService;
042    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalService;
043    import com.liferay.portlet.documentlibrary.service.DLFileShortcutLocalService;
044    import com.liferay.portlet.documentlibrary.service.DLFileShortcutService;
045    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService;
046    import com.liferay.portlet.documentlibrary.service.DLFileVersionService;
047    import com.liferay.portlet.documentlibrary.service.DLFolderLocalService;
048    import com.liferay.portlet.documentlibrary.service.DLFolderService;
049    import com.liferay.portlet.documentlibrary.util.RepositoryModelUtil;
050    import com.liferay.portlet.documentlibrary.util.comparator.DLFileEntryOrderByComparator;
051    import com.liferay.portlet.dynamicdatamapping.storage.DDMFormValues;
052    
053    import java.io.File;
054    import java.io.InputStream;
055    
056    import java.util.List;
057    import java.util.Map;
058    
059    /**
060     * @author Alexander Chow
061     */
062    public class LiferayLocalRepository
063            extends LiferayRepositoryBase implements LocalRepository {
064    
065            public LiferayLocalRepository(
066                    RepositoryLocalService repositoryLocalService,
067                    RepositoryService repositoryService,
068                    DLAppHelperLocalService dlAppHelperLocalService,
069                    DLFileEntryLocalService dlFileEntryLocalService,
070                    DLFileEntryService dlFileEntryService,
071                    DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
072                    DLFileShortcutLocalService dlFileShortcutLocalService,
073                    DLFileShortcutService dlFileShortcutService,
074                    DLFileVersionLocalService dlFileVersionLocalService,
075                    DLFileVersionService dlFileVersionService,
076                    DLFolderLocalService dlFolderLocalService,
077                    DLFolderService dlFolderService,
078                    ResourceLocalService resourceLocalService, long groupId,
079                    long repositoryId, long dlFolderId) {
080    
081                    super(
082                            repositoryLocalService, repositoryService, dlAppHelperLocalService,
083                            dlFileEntryLocalService, dlFileEntryService,
084                            dlFileEntryTypeLocalService, dlFileShortcutLocalService,
085                            dlFileShortcutService, dlFileVersionLocalService,
086                            dlFileVersionService, dlFolderLocalService, dlFolderService,
087                            resourceLocalService, groupId, repositoryId, dlFolderId);
088            }
089    
090            @Override
091            public FileEntry addFileEntry(
092                            long userId, long folderId, String sourceFileName, String mimeType,
093                            String title, String description, String changeLog, File file,
094                            ServiceContext serviceContext)
095                    throws PortalException {
096    
097                    long fileEntryTypeId = ParamUtil.getLong(
098                            serviceContext, "fileEntryTypeId",
099                            getDefaultFileEntryTypeId(serviceContext, folderId));
100    
101                    Map<String, DDMFormValues> ddmFormValuesMap = getDDMFormValuesMap(
102                            serviceContext, fileEntryTypeId);
103    
104                    long size = 0;
105    
106                    if (file != null) {
107                            size = file.length();
108                    }
109    
110                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
111                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
112                            sourceFileName, mimeType, title, description, changeLog,
113                            fileEntryTypeId, ddmFormValuesMap, file, null, size,
114                            serviceContext);
115    
116                    addFileEntryResources(dlFileEntry, serviceContext);
117    
118                    return new LiferayFileEntry(dlFileEntry);
119            }
120    
121            @Override
122            public FileEntry addFileEntry(
123                            long userId, long folderId, String sourceFileName, String mimeType,
124                            String title, String description, String changeLog, InputStream is,
125                            long size, ServiceContext serviceContext)
126                    throws PortalException {
127    
128                    long fileEntryTypeId = ParamUtil.getLong(
129                            serviceContext, "fileEntryTypeId",
130                            getDefaultFileEntryTypeId(serviceContext, folderId));
131    
132                    Map<String, DDMFormValues> ddmFormValuesMap = getDDMFormValuesMap(
133                            serviceContext, fileEntryTypeId);
134    
135                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
136                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
137                            sourceFileName, mimeType, title, description, changeLog,
138                            fileEntryTypeId, ddmFormValuesMap, null, is, size, serviceContext);
139    
140                    addFileEntryResources(dlFileEntry, serviceContext);
141    
142                    return new LiferayFileEntry(dlFileEntry);
143            }
144    
145            @Override
146            public FileShortcut addFileShortcut(
147                            long userId, long folderId, long toFileEntryId,
148                            ServiceContext serviceContext)
149                    throws PortalException {
150    
151                    DLFileShortcut dlFileShortcut =
152                            dlFileShortcutLocalService.addFileShortcut(
153                                    userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
154                                    toFileEntryId, serviceContext);
155    
156                    return new LiferayFileShortcut(dlFileShortcut);
157            }
158    
159            @Override
160            public Folder addFolder(
161                            long userId, long parentFolderId, String name, String description,
162                            ServiceContext serviceContext)
163                    throws PortalException {
164    
165                    boolean mountPoint = ParamUtil.getBoolean(serviceContext, "mountPoint");
166    
167                    DLFolder dlFolder = dlFolderLocalService.addFolder(
168                            userId, getGroupId(), getRepositoryId(), mountPoint,
169                            toFolderId(parentFolderId), name, description, false,
170                            serviceContext);
171    
172                    return new LiferayFolder(dlFolder);
173            }
174    
175            @Override
176            public void checkInFileEntry(
177                            long userId, long fileEntryId, boolean major, String changeLog,
178                            ServiceContext serviceContext)
179                    throws PortalException {
180    
181                    dlFileEntryLocalService.checkInFileEntry(
182                            userId, fileEntryId, major, changeLog, serviceContext);
183            }
184    
185            @Override
186            public void checkInFileEntry(
187                            long userId, long fileEntryId, String lockUuid,
188                            ServiceContext serviceContext)
189                    throws PortalException {
190    
191                    dlFileEntryLocalService.checkInFileEntry(
192                            userId, fileEntryId, lockUuid, serviceContext);
193            }
194    
195            @Override
196            public FileEntry copyFileEntry(
197                            long userId, long groupId, long fileEntryId, long destFolderId,
198                            ServiceContext serviceContext)
199                    throws PortalException {
200    
201                    DLFileEntry dlFileEntry = dlFileEntryLocalService.copyFileEntry(
202                            userId, groupId, getRepositoryId(), fileEntryId,
203                            toFolderId(destFolderId), serviceContext);
204    
205                    return new LiferayFileEntry(dlFileEntry);
206            }
207    
208            @Override
209            public void deleteAll() throws PortalException {
210                    dlFolderLocalService.deleteAllByRepository(getRepositoryId());
211            }
212    
213            @Override
214            public void deleteFileEntry(long fileEntryId) throws PortalException {
215                    dlFileEntryLocalService.deleteFileEntry(fileEntryId);
216            }
217    
218            @Override
219            public void deleteFileShortcut(long fileShortcutId) throws PortalException {
220                    dlFileShortcutLocalService.deleteFileShortcut(fileShortcutId);
221            }
222    
223            @Override
224            public void deleteFileShortcuts(long toFileEntryId) throws PortalException {
225                    dlFileShortcutLocalService.deleteFileShortcuts(toFileEntryId);
226            }
227    
228            @Override
229            public void deleteFolder(long folderId) throws PortalException {
230                    DLFolder dlFolder = dlFolderLocalService.fetchFolder(folderId);
231    
232                    if (dlFolder != null) {
233                            dlFolderLocalService.deleteFolder(folderId);
234                    }
235            }
236    
237            @Override
238            public List<FileEntry> getFileEntries(
239                    long folderId, int status, int start, int end,
240                    OrderByComparator<FileEntry> obc) {
241    
242                    List<DLFileEntry> dlFileEntries =
243                            dlFileEntryLocalService.getFileEntries(
244                                    getGroupId(), toFolderId(folderId), status, start, end,
245                                    DLFileEntryOrderByComparator.getOrderByComparator(obc));
246    
247                    return RepositoryModelUtil.toFileEntries(dlFileEntries);
248            }
249    
250            @Override
251            public List<FileEntry> getFileEntries(
252                    long folderId, int start, int end, OrderByComparator<FileEntry> obc) {
253    
254                    List<DLFileEntry> dlFileEntries =
255                            dlFileEntryLocalService.getFileEntries(
256                                    getGroupId(), toFolderId(folderId), start, end,
257                                    DLFileEntryOrderByComparator.getOrderByComparator(obc));
258    
259                    return RepositoryModelUtil.toFileEntries(dlFileEntries);
260            }
261    
262            @Override
263            public int getFileEntriesCount(long folderId) {
264                    return dlFileEntryLocalService.getFileEntriesCount(
265                            getGroupId(), toFolderId(folderId));
266            }
267    
268            @Override
269            public int getFileEntriesCount(long folderId, int status) {
270                    return dlFileEntryLocalService.getFileEntriesCount(
271                            getGroupId(), toFolderId(folderId), status);
272            }
273    
274            @Override
275            public FileEntry getFileEntry(long fileEntryId) throws PortalException {
276                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
277                            fileEntryId);
278    
279                    return new LiferayFileEntry(dlFileEntry);
280            }
281    
282            @Override
283            public FileEntry getFileEntry(long folderId, String title)
284                    throws PortalException {
285    
286                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
287                            getGroupId(), toFolderId(folderId), title);
288    
289                    return new LiferayFileEntry(dlFileEntry);
290            }
291    
292            @Override
293            public FileEntry getFileEntryByUuid(String uuid) throws PortalException {
294                    DLFileEntry dlFileEntry =
295                            dlFileEntryLocalService.getFileEntryByUuidAndGroupId(
296                                    uuid, getGroupId());
297    
298                    return new LiferayFileEntry(dlFileEntry);
299            }
300    
301            @Override
302            public FileShortcut getFileShortcut(long fileShortcutId)
303                    throws PortalException {
304    
305                    DLFileShortcut dlFileShortcut =
306                            dlFileShortcutLocalService.getDLFileShortcut(fileShortcutId);
307    
308                    return new LiferayFileShortcut(dlFileShortcut);
309            }
310    
311            @Override
312            public FileVersion getFileVersion(long fileVersionId)
313                    throws PortalException {
314    
315                    DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
316                            fileVersionId);
317    
318                    return new LiferayFileVersion(dlFileVersion);
319            }
320    
321            @Override
322            public Folder getFolder(long folderId) throws PortalException {
323                    DLFolder dlFolder = dlFolderLocalService.getFolder(
324                            toFolderId(folderId));
325    
326                    return new LiferayFolder(dlFolder);
327            }
328    
329            @Override
330            public Folder getFolder(long parentFolderId, String name)
331                    throws PortalException {
332    
333                    DLFolder dlFolder = dlFolderLocalService.getFolder(
334                            getGroupId(), toFolderId(parentFolderId), name);
335    
336                    return new LiferayFolder(dlFolder);
337            }
338    
339            @Override
340            public List<FileEntry> getRepositoryFileEntries(
341                    long userId, long rootFolderId, int start, int end,
342                    OrderByComparator<FileEntry> obc) {
343    
344                    List<DLFileEntry> dlFileEntries =
345                            dlFileEntryLocalService.getGroupFileEntries(
346                                    getGroupId(), 0, getRepositoryId(), toFolderId(rootFolderId),
347                                    start, end,
348                                    DLFileEntryOrderByComparator.getOrderByComparator(obc));
349    
350                    return RepositoryModelUtil.toFileEntries(dlFileEntries);
351            }
352    
353            @Override
354            public FileEntry moveFileEntry(
355                            long userId, long fileEntryId, long newFolderId,
356                            ServiceContext serviceContext)
357                    throws PortalException {
358    
359                    DLFileEntry dlFileEntry = dlFileEntryLocalService.moveFileEntry(
360                            userId, fileEntryId, toFolderId(newFolderId), serviceContext);
361    
362                    return new LiferayFileEntry(dlFileEntry);
363            }
364    
365            @Override
366            public Folder moveFolder(
367                            long userId, long folderId, long parentFolderId,
368                            ServiceContext serviceContext)
369                    throws PortalException {
370    
371                    DLFolder dlFolder = dlFolderLocalService.moveFolder(
372                            userId, toFolderId(folderId), toFolderId(parentFolderId),
373                            serviceContext);
374    
375                    return new LiferayFolder(dlFolder);
376            }
377    
378            @Override
379            public void revertFileEntry(
380                            long userId, long fileEntryId, String version,
381                            ServiceContext serviceContext)
382                    throws PortalException {
383    
384                    dlFileEntryLocalService.revertFileEntry(
385                            userId, fileEntryId, version, serviceContext);
386            }
387    
388            /**
389             * @deprecated As of 7.0.0
390             */
391            @Deprecated
392            @Override
393            public void updateAsset(
394                            long userId, FileEntry fileEntry, FileVersion fileVersion,
395                            long[] assetCategoryIds, String[] assetTagNames,
396                            long[] assetLinkEntryIds)
397                    throws PortalException {
398    
399                    dlAppHelperLocalService.updateAsset(
400                            userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
401                            assetLinkEntryIds);
402            }
403    
404            @Override
405            public FileEntry updateFileEntry(
406                            long userId, long fileEntryId, String sourceFileName,
407                            String mimeType, String title, String description, String changeLog,
408                            boolean majorVersion, File file, ServiceContext serviceContext)
409                    throws PortalException {
410    
411                    long fileEntryTypeId = ParamUtil.getLong(
412                            serviceContext, "fileEntryTypeId", -1L);
413    
414                    Map<String, DDMFormValues> ddmFormValuesMap = getDDMFormValuesMap(
415                            serviceContext, fileEntryTypeId);
416    
417                    long size = 0;
418    
419                    if (file != null) {
420                            size = file.length();
421                    }
422    
423                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
424                            userId, fileEntryId, sourceFileName, mimeType, title, description,
425                            changeLog, majorVersion, fileEntryTypeId, ddmFormValuesMap, file,
426                            null, size, serviceContext);
427    
428                    return new LiferayFileEntry(dlFileEntry);
429            }
430    
431            @Override
432            public FileEntry updateFileEntry(
433                            long userId, long fileEntryId, String sourceFileName,
434                            String mimeType, String title, String description, String changeLog,
435                            boolean majorVersion, InputStream is, long size,
436                            ServiceContext serviceContext)
437                    throws PortalException {
438    
439                    long fileEntryTypeId = ParamUtil.getLong(
440                            serviceContext, "fileEntryTypeId", -1L);
441    
442                    Map<String, DDMFormValues> ddmFormValuesMap = getDDMFormValuesMap(
443                            serviceContext, fileEntryTypeId);
444    
445                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
446                            userId, fileEntryId, sourceFileName, mimeType, title, description,
447                            changeLog, majorVersion, fileEntryTypeId, ddmFormValuesMap, null,
448                            is, size, serviceContext);
449    
450                    return new LiferayFileEntry(dlFileEntry);
451            }
452    
453            @Override
454            public FileShortcut updateFileShortcut(
455                            long userId, long fileShortcutId, long folderId, long toFileEntryId,
456                            ServiceContext serviceContext)
457                    throws PortalException {
458    
459                    DLFileShortcut dlFileShortcut =
460                            dlFileShortcutLocalService.updateFileShortcut(
461                                    userId, fileShortcutId, getRepositoryId(), toFolderId(folderId),
462                                    toFileEntryId, serviceContext);
463    
464                    return new LiferayFileShortcut(dlFileShortcut);
465            }
466    
467            @Override
468            public void updateFileShortcuts(
469                    long oldToFileEntryId, long newToFileEntryId) {
470    
471                    dlFileShortcutLocalService.updateFileShortcuts(
472                            oldToFileEntryId, newToFileEntryId);
473            }
474    
475            @Override
476            public Folder updateFolder(
477                            long folderId, long parentFolderId, String name, String description,
478                            ServiceContext serviceContext)
479                    throws PortalException {
480    
481                    long defaultFileEntryTypeId = ParamUtil.getLong(
482                            serviceContext, "defaultFileEntryTypeId");
483                    SortedArrayList<Long> fileEntryTypeIds = getLongList(
484                            serviceContext, "dlFileEntryTypesSearchContainerPrimaryKeys");
485                    int restrictionType = ParamUtil.getInteger(
486                            serviceContext, "restrictionType");
487    
488                    DLFolder dlFolder = dlFolderLocalService.updateFolder(
489                            toFolderId(folderId), toFolderId(parentFolderId), name, description,
490                            defaultFileEntryTypeId, fileEntryTypeIds, restrictionType,
491                            serviceContext);
492    
493                    return new LiferayFolder(dlFolder);
494            }
495    
496            public UnicodeProperties updateRepository(
497                    UnicodeProperties typeSettingsProperties) {
498    
499                    return typeSettingsProperties;
500            }
501    
502    }