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.FileVersion;
021    import com.liferay.portal.kernel.repository.model.Folder;
022    import com.liferay.portal.kernel.util.OrderByComparator;
023    import com.liferay.portal.kernel.util.ParamUtil;
024    import com.liferay.portal.kernel.util.SortedArrayList;
025    import com.liferay.portal.kernel.util.UnicodeProperties;
026    import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
027    import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
028    import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
029    import com.liferay.portal.service.RepositoryLocalService;
030    import com.liferay.portal.service.RepositoryService;
031    import com.liferay.portal.service.ResourceLocalService;
032    import com.liferay.portal.service.ServiceContext;
033    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
034    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
035    import com.liferay.portlet.documentlibrary.model.DLFolder;
036    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalService;
037    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService;
038    import com.liferay.portlet.documentlibrary.service.DLFileEntryService;
039    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalService;
040    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService;
041    import com.liferay.portlet.documentlibrary.service.DLFileVersionService;
042    import com.liferay.portlet.documentlibrary.service.DLFolderLocalService;
043    import com.liferay.portlet.documentlibrary.service.DLFolderService;
044    import com.liferay.portlet.documentlibrary.util.RepositoryModelUtil;
045    import com.liferay.portlet.documentlibrary.util.comparator.DLFileEntryOrderByComparator;
046    import com.liferay.portlet.dynamicdatamapping.storage.Fields;
047    
048    import java.io.File;
049    import java.io.InputStream;
050    
051    import java.util.List;
052    import java.util.Map;
053    
054    /**
055     * @author Alexander Chow
056     */
057    public class LiferayLocalRepository
058            extends LiferayRepositoryBase implements LocalRepository {
059    
060            public LiferayLocalRepository(
061                    RepositoryLocalService repositoryLocalService,
062                    RepositoryService repositoryService,
063                    DLAppHelperLocalService dlAppHelperLocalService,
064                    DLFileEntryLocalService dlFileEntryLocalService,
065                    DLFileEntryService dlFileEntryService,
066                    DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
067                    DLFileVersionLocalService dlFileVersionLocalService,
068                    DLFileVersionService dlFileVersionService,
069                    DLFolderLocalService dlFolderLocalService,
070                    DLFolderService dlFolderService,
071                    ResourceLocalService resourceLocalService, long groupId,
072                    long repositoryId, long dlFolderId) {
073    
074                    super(
075                            repositoryLocalService, repositoryService, dlAppHelperLocalService,
076                            dlFileEntryLocalService, dlFileEntryService,
077                            dlFileEntryTypeLocalService, dlFileVersionLocalService,
078                            dlFileVersionService, dlFolderLocalService, dlFolderService,
079                            resourceLocalService, groupId, repositoryId, dlFolderId);
080            }
081    
082            @Override
083            public FileEntry addFileEntry(
084                            long userId, long folderId, String sourceFileName, String mimeType,
085                            String title, String description, String changeLog, File file,
086                            ServiceContext serviceContext)
087                    throws PortalException {
088    
089                    long fileEntryTypeId = ParamUtil.getLong(
090                            serviceContext, "fileEntryTypeId",
091                            getDefaultFileEntryTypeId(serviceContext, folderId));
092    
093                    Map<String, Fields> fieldsMap = getFieldsMap(
094                            serviceContext, fileEntryTypeId);
095    
096                    long size = 0;
097    
098                    if (file != null) {
099                            size = file.length();
100                    }
101    
102                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
103                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
104                            sourceFileName, mimeType, title, description, changeLog,
105                            fileEntryTypeId, fieldsMap, file, null, size, serviceContext);
106    
107                    addFileEntryResources(dlFileEntry, serviceContext);
108    
109                    return new LiferayFileEntry(dlFileEntry);
110            }
111    
112            @Override
113            public FileEntry addFileEntry(
114                            long userId, long folderId, String sourceFileName, String mimeType,
115                            String title, String description, String changeLog, InputStream is,
116                            long size, ServiceContext serviceContext)
117                    throws PortalException {
118    
119                    long fileEntryTypeId = ParamUtil.getLong(
120                            serviceContext, "fileEntryTypeId",
121                            getDefaultFileEntryTypeId(serviceContext, folderId));
122    
123                    Map<String, Fields> fieldsMap = getFieldsMap(
124                            serviceContext, fileEntryTypeId);
125    
126                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
127                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
128                            sourceFileName, mimeType, title, description, changeLog,
129                            fileEntryTypeId, fieldsMap, null, is, size, serviceContext);
130    
131                    addFileEntryResources(dlFileEntry, serviceContext);
132    
133                    return new LiferayFileEntry(dlFileEntry);
134            }
135    
136            @Override
137            public Folder addFolder(
138                            long userId, long parentFolderId, String name, String description,
139                            ServiceContext serviceContext)
140                    throws PortalException {
141    
142                    boolean mountPoint = ParamUtil.getBoolean(serviceContext, "mountPoint");
143    
144                    DLFolder dlFolder = dlFolderLocalService.addFolder(
145                            userId, getGroupId(), getRepositoryId(), mountPoint,
146                            toFolderId(parentFolderId), name, description, false,
147                            serviceContext);
148    
149                    return new LiferayFolder(dlFolder);
150            }
151    
152            public void addRepository(
153                    long groupId, String name, String description, String portletKey,
154                    UnicodeProperties typeSettingsProperties) {
155            }
156    
157            @Override
158            public void checkInFileEntry(
159                    long userId, long fileEntryId, boolean major, String changeLog,
160                    ServiceContext serviceContext) {
161    
162                    throw new UnsupportedOperationException();
163            }
164    
165            @Override
166            public void checkInFileEntry(
167                    long userId, long fileEntryId, String lockUuid,
168                    ServiceContext serviceContext) {
169    
170                    throw new UnsupportedOperationException();
171            }
172    
173            @Override
174            public FileEntry copyFileEntry(
175                    long userId, long groupId, long fileEntryId, long destFolderId,
176                    ServiceContext serviceContext) {
177    
178                    throw new UnsupportedOperationException();
179            }
180    
181            @Override
182            public void deleteAll() throws PortalException {
183                    dlFolderLocalService.deleteAllByRepository(getRepositoryId());
184            }
185    
186            @Override
187            public void deleteFileEntry(long fileEntryId) throws PortalException {
188                    dlFileEntryLocalService.deleteFileEntry(fileEntryId);
189            }
190    
191            @Override
192            public void deleteFolder(long folderId) throws PortalException {
193                    DLFolder dlFolder = dlFolderLocalService.fetchFolder(folderId);
194    
195                    if (dlFolder != null) {
196                            dlFolderLocalService.deleteFolder(folderId);
197                    }
198            }
199    
200            @Override
201            public FileEntry getFileEntry(long fileEntryId) throws PortalException {
202                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
203                            fileEntryId);
204    
205                    return new LiferayFileEntry(dlFileEntry);
206            }
207    
208            @Override
209            public FileEntry getFileEntry(long folderId, String title)
210                    throws PortalException {
211    
212                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
213                            getGroupId(), toFolderId(folderId), title);
214    
215                    return new LiferayFileEntry(dlFileEntry);
216            }
217    
218            @Override
219            public FileEntry getFileEntryByUuid(String uuid) throws PortalException {
220                    DLFileEntry dlFileEntry =
221                            dlFileEntryLocalService.getFileEntryByUuidAndGroupId(
222                                    uuid, getGroupId());
223    
224                    return new LiferayFileEntry(dlFileEntry);
225            }
226    
227            @Override
228            public FileVersion getFileVersion(long fileVersionId)
229                    throws PortalException {
230    
231                    DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
232                            fileVersionId);
233    
234                    return new LiferayFileVersion(dlFileVersion);
235            }
236    
237            @Override
238            public Folder getFolder(long folderId) throws PortalException {
239                    DLFolder dlFolder = dlFolderLocalService.getFolder(
240                            toFolderId(folderId));
241    
242                    return new LiferayFolder(dlFolder);
243            }
244    
245            @Override
246            public Folder getFolder(long parentFolderId, String name)
247                    throws PortalException {
248    
249                    DLFolder dlFolder = dlFolderLocalService.getFolder(
250                            getGroupId(), toFolderId(parentFolderId), name);
251    
252                    return new LiferayFolder(dlFolder);
253            }
254    
255            @Override
256            public List<FileEntry> getRepositoryFileEntries(
257                    long userId, long rootFolderId, int start, int end,
258                    OrderByComparator<FileEntry> obc) {
259    
260                    List<DLFileEntry> dlFileEntries =
261                            dlFileEntryLocalService.getGroupFileEntries(
262                                    getGroupId(), 0, getRepositoryId(), toFolderId(rootFolderId),
263                                    start, end,
264                                    DLFileEntryOrderByComparator.getOrderByComparator(obc));
265    
266                    return RepositoryModelUtil.toFileEntries(dlFileEntries);
267            }
268    
269            @Override
270            public FileEntry moveFileEntry(
271                            long userId, long fileEntryId, long newFolderId,
272                            ServiceContext serviceContext)
273                    throws PortalException {
274    
275                    DLFileEntry dlFileEntry = dlFileEntryLocalService.moveFileEntry(
276                            userId, fileEntryId, toFolderId(newFolderId), serviceContext);
277    
278                    return new LiferayFileEntry(dlFileEntry);
279            }
280    
281            @Override
282            public Folder moveFolder(
283                            long userId, long folderId, long parentFolderId,
284                            ServiceContext serviceContext)
285                    throws PortalException {
286    
287                    DLFolder dlFolder = dlFolderLocalService.moveFolder(
288                            userId, toFolderId(folderId), toFolderId(parentFolderId),
289                            serviceContext);
290    
291                    return new LiferayFolder(dlFolder);
292            }
293    
294            @Override
295            public void revertFileEntry(
296                    long userId, long fileEntryId, String version,
297                    ServiceContext serviceContext) {
298    
299                    throw new UnsupportedOperationException();
300            }
301    
302            @Override
303            public void updateAsset(
304                            long userId, FileEntry fileEntry, FileVersion fileVersion,
305                            long[] assetCategoryIds, String[] assetTagNames,
306                            long[] assetLinkEntryIds)
307                    throws PortalException {
308    
309                    dlAppHelperLocalService.updateAsset(
310                            userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
311                            assetLinkEntryIds);
312            }
313    
314            @Override
315            public FileEntry updateFileEntry(
316                            long userId, long fileEntryId, String sourceFileName,
317                            String mimeType, String title, String description, String changeLog,
318                            boolean majorVersion, File file, ServiceContext serviceContext)
319                    throws PortalException {
320    
321                    long fileEntryTypeId = ParamUtil.getLong(
322                            serviceContext, "fileEntryTypeId", -1L);
323    
324                    Map<String, Fields> fieldsMap = getFieldsMap(
325                            serviceContext, fileEntryTypeId);
326    
327                    long size = 0;
328    
329                    if (file != null) {
330                            size = file.length();
331                    }
332    
333                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
334                            userId, fileEntryId, sourceFileName, mimeType, title, description,
335                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, file, null,
336                            size, serviceContext);
337    
338                    return new LiferayFileEntry(dlFileEntry);
339            }
340    
341            @Override
342            public FileEntry updateFileEntry(
343                            long userId, long fileEntryId, String sourceFileName,
344                            String mimeType, String title, String description, String changeLog,
345                            boolean majorVersion, InputStream is, long size,
346                            ServiceContext serviceContext)
347                    throws PortalException {
348    
349                    long fileEntryTypeId = ParamUtil.getLong(
350                            serviceContext, "fileEntryTypeId", -1L);
351    
352                    Map<String, Fields> fieldsMap = getFieldsMap(
353                            serviceContext, fileEntryTypeId);
354    
355                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
356                            userId, fileEntryId, sourceFileName, mimeType, title, description,
357                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, null, is, size,
358                            serviceContext);
359    
360                    return new LiferayFileEntry(dlFileEntry);
361            }
362    
363            @Override
364            public Folder updateFolder(
365                            long folderId, long parentFolderId, String name, String description,
366                            ServiceContext serviceContext)
367                    throws PortalException {
368    
369                    long defaultFileEntryTypeId = ParamUtil.getLong(
370                            serviceContext, "defaultFileEntryTypeId");
371                    SortedArrayList<Long> fileEntryTypeIds = getLongList(
372                            serviceContext, "dlFileEntryTypesSearchContainerPrimaryKeys");
373                    int restrictionType = ParamUtil.getInteger(
374                            serviceContext, "restrictionType");
375    
376                    DLFolder dlFolder = dlFolderLocalService.updateFolder(
377                            toFolderId(folderId), toFolderId(parentFolderId), name, description,
378                            defaultFileEntryTypeId, fileEntryTypeIds, restrictionType,
379                            serviceContext);
380    
381                    return new LiferayFolder(dlFolder);
382            }
383    
384            public UnicodeProperties updateRepository(
385                    UnicodeProperties typeSettingsProperties) {
386    
387                    return typeSettingsProperties;
388            }
389    
390    }