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 deleteAll() throws PortalException {
159                    dlFolderLocalService.deleteAll(getGroupId());
160            }
161    
162            @Override
163            public void deleteFileEntry(long fileEntryId) throws PortalException {
164                    dlFileEntryLocalService.deleteFileEntry(fileEntryId);
165            }
166    
167            @Override
168            public void deleteFolder(long folderId) throws PortalException {
169                    DLFolder dlFolder = dlFolderLocalService.fetchFolder(folderId);
170    
171                    if (dlFolder != null) {
172                            dlFolderLocalService.deleteFolder(folderId);
173                    }
174            }
175    
176            @Override
177            public FileEntry getFileEntry(long fileEntryId) throws PortalException {
178                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
179                            fileEntryId);
180    
181                    return new LiferayFileEntry(dlFileEntry);
182            }
183    
184            @Override
185            public FileEntry getFileEntry(long folderId, String title)
186                    throws PortalException {
187    
188                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
189                            getGroupId(), toFolderId(folderId), title);
190    
191                    return new LiferayFileEntry(dlFileEntry);
192            }
193    
194            @Override
195            public FileEntry getFileEntryByUuid(String uuid) throws PortalException {
196                    DLFileEntry dlFileEntry =
197                            dlFileEntryLocalService.getFileEntryByUuidAndGroupId(
198                                    uuid, getGroupId());
199    
200                    return new LiferayFileEntry(dlFileEntry);
201            }
202    
203            @Override
204            public FileVersion getFileVersion(long fileVersionId)
205                    throws PortalException {
206    
207                    DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
208                            fileVersionId);
209    
210                    return new LiferayFileVersion(dlFileVersion);
211            }
212    
213            @Override
214            public Folder getFolder(long folderId) throws PortalException {
215                    DLFolder dlFolder = dlFolderLocalService.getFolder(folderId);
216    
217                    return new LiferayFolder(dlFolder);
218            }
219    
220            @Override
221            public Folder getFolder(long parentFolderId, String name)
222                    throws PortalException {
223    
224                    DLFolder dlFolder = dlFolderLocalService.getFolder(
225                            getGroupId(), toFolderId(parentFolderId), name);
226    
227                    return new LiferayFolder(dlFolder);
228            }
229    
230            @Override
231            public List<FileEntry> getRepositoryFileEntries(
232                    long rootFolderId, int start, int end,
233                    OrderByComparator<FileEntry> obc) {
234    
235                    List<DLFileEntry> dlFileEntries =
236                            dlFileEntryLocalService.getGroupFileEntries(
237                                    getGroupId(), 0, rootFolderId, start, end,
238                                    DLFileEntryOrderByComparator.getOrderByComparator(obc));
239    
240                    return RepositoryModelUtil.toFileEntries(dlFileEntries);
241            }
242    
243            @Override
244            public FileEntry moveFileEntry(
245                            long userId, long fileEntryId, long newFolderId,
246                            ServiceContext serviceContext)
247                    throws PortalException {
248    
249                    DLFileEntry dlFileEntry = dlFileEntryLocalService.moveFileEntry(
250                            userId, fileEntryId, toFolderId(newFolderId), serviceContext);
251    
252                    return new LiferayFileEntry(dlFileEntry);
253            }
254    
255            @Override
256            public Folder moveFolder(
257                            long userId, long folderId, long parentFolderId,
258                            ServiceContext serviceContext)
259                    throws PortalException {
260    
261                    DLFolder dlFolder = dlFolderLocalService.moveFolder(
262                            userId, folderId, parentFolderId, serviceContext);
263    
264                    return new LiferayFolder(dlFolder);
265            }
266    
267            @Override
268            public void updateAsset(
269                            long userId, FileEntry fileEntry, FileVersion fileVersion,
270                            long[] assetCategoryIds, String[] assetTagNames,
271                            long[] assetLinkEntryIds)
272                    throws PortalException {
273    
274                    dlAppHelperLocalService.updateAsset(
275                            userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
276                            assetLinkEntryIds);
277            }
278    
279            @Override
280            public FileEntry updateFileEntry(
281                            long userId, long fileEntryId, String sourceFileName,
282                            String mimeType, String title, String description, String changeLog,
283                            boolean majorVersion, File file, ServiceContext serviceContext)
284                    throws PortalException {
285    
286                    long fileEntryTypeId = ParamUtil.getLong(
287                            serviceContext, "fileEntryTypeId", -1L);
288    
289                    Map<String, Fields> fieldsMap = getFieldsMap(
290                            serviceContext, fileEntryTypeId);
291    
292                    long size = 0;
293    
294                    if (file != null) {
295                            size = file.length();
296                    }
297    
298                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
299                            userId, fileEntryId, sourceFileName, mimeType, title, description,
300                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, file, null,
301                            size, serviceContext);
302    
303                    return new LiferayFileEntry(dlFileEntry);
304            }
305    
306            @Override
307            public FileEntry updateFileEntry(
308                            long userId, long fileEntryId, String sourceFileName,
309                            String mimeType, String title, String description, String changeLog,
310                            boolean majorVersion, InputStream is, long size,
311                            ServiceContext serviceContext)
312                    throws PortalException {
313    
314                    long fileEntryTypeId = ParamUtil.getLong(
315                            serviceContext, "fileEntryTypeId", -1L);
316    
317                    Map<String, Fields> fieldsMap = getFieldsMap(
318                            serviceContext, fileEntryTypeId);
319    
320                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
321                            userId, fileEntryId, sourceFileName, mimeType, title, description,
322                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, null, is, size,
323                            serviceContext);
324    
325                    return new LiferayFileEntry(dlFileEntry);
326            }
327    
328            @Override
329            public Folder updateFolder(
330                            long folderId, long parentFolderId, String name, String description,
331                            ServiceContext serviceContext)
332                    throws PortalException {
333    
334                    long defaultFileEntryTypeId = ParamUtil.getLong(
335                            serviceContext, "defaultFileEntryTypeId");
336                    SortedArrayList<Long> fileEntryTypeIds = getLongList(
337                            serviceContext, "dlFileEntryTypesSearchContainerPrimaryKeys");
338                    boolean overrideFileEntryTypes = ParamUtil.getBoolean(
339                            serviceContext, "overrideFileEntryTypes");
340    
341                    DLFolder dlFolder = dlFolderLocalService.updateFolder(
342                            toFolderId(folderId), toFolderId(parentFolderId), name, description,
343                            defaultFileEntryTypeId, fileEntryTypeIds, overrideFileEntryTypes,
344                            serviceContext);
345    
346                    return new LiferayFolder(dlFolder);
347            }
348    
349            public UnicodeProperties updateRepository(
350                    UnicodeProperties typeSettingsProperties) {
351    
352                    return typeSettingsProperties;
353            }
354    
355    }