001    /**
002     * Copyright (c) 2000-2013 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.exception.SystemException;
019    import com.liferay.portal.kernel.log.Log;
020    import com.liferay.portal.kernel.log.LogFactoryUtil;
021    import com.liferay.portal.kernel.repository.LocalRepository;
022    import com.liferay.portal.kernel.repository.model.FileEntry;
023    import com.liferay.portal.kernel.repository.model.FileVersion;
024    import com.liferay.portal.kernel.repository.model.Folder;
025    import com.liferay.portal.kernel.util.ParamUtil;
026    import com.liferay.portal.kernel.util.SortedArrayList;
027    import com.liferay.portal.kernel.util.UnicodeProperties;
028    import com.liferay.portal.model.Repository;
029    import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
030    import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
031    import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
032    import com.liferay.portal.security.auth.PrincipalException;
033    import com.liferay.portal.service.RepositoryLocalService;
034    import com.liferay.portal.service.RepositoryService;
035    import com.liferay.portal.service.ResourceLocalService;
036    import com.liferay.portal.service.ServiceContext;
037    import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
038    import com.liferay.portlet.documentlibrary.NoSuchFileVersionException;
039    import com.liferay.portlet.documentlibrary.NoSuchFolderException;
040    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
041    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
042    import com.liferay.portlet.documentlibrary.model.DLFolder;
043    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalService;
044    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService;
045    import com.liferay.portlet.documentlibrary.service.DLFileEntryService;
046    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalService;
047    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalService;
048    import com.liferay.portlet.documentlibrary.service.DLFileVersionService;
049    import com.liferay.portlet.documentlibrary.service.DLFolderLocalService;
050    import com.liferay.portlet.documentlibrary.service.DLFolderService;
051    import com.liferay.portlet.dynamicdatamapping.storage.Fields;
052    
053    import java.io.File;
054    import java.io.InputStream;
055    
056    import java.util.Map;
057    
058    /**
059     * @author Alexander Chow
060     */
061    public class LiferayLocalRepository
062            extends LiferayRepositoryBase implements LocalRepository {
063    
064            public LiferayLocalRepository(
065                    RepositoryLocalService repositoryLocalService,
066                    RepositoryService repositoryService,
067                    DLAppHelperLocalService dlAppHelperLocalService,
068                    DLFileEntryLocalService dlFileEntryLocalService,
069                    DLFileEntryService dlFileEntryService,
070                    DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
071                    DLFileVersionLocalService dlFileVersionLocalService,
072                    DLFileVersionService dlFileVersionService,
073                    DLFolderLocalService dlFolderLocalService,
074                    DLFolderService dlFolderService,
075                    ResourceLocalService resourceLocalService, long repositoryId) {
076    
077                    super(
078                            repositoryLocalService, repositoryService, dlAppHelperLocalService,
079                            dlFileEntryLocalService, dlFileEntryService,
080                            dlFileEntryTypeLocalService, dlFileVersionLocalService,
081                            dlFileVersionService, dlFolderLocalService, dlFolderService,
082                            resourceLocalService, repositoryId);
083            }
084    
085            public LiferayLocalRepository(
086                            RepositoryLocalService repositoryLocalService,
087                            RepositoryService repositoryService,
088                            DLAppHelperLocalService dlAppHelperLocalService,
089                            DLFileEntryLocalService dlFileEntryLocalService,
090                            DLFileEntryService dlFileEntryService,
091                            DLFileEntryTypeLocalService dlFileEntryTypeLocalService,
092                            DLFileVersionLocalService dlFileVersionLocalService,
093                            DLFileVersionService dlFileVersionService,
094                            DLFolderLocalService dlFolderLocalService,
095                            DLFolderService dlFolderService,
096                            ResourceLocalService resourceLocalService, long folderId,
097                            long fileEntryId, long fileVersionId)
098                    throws PrincipalException {
099    
100                    super(
101                            repositoryLocalService, repositoryService, dlAppHelperLocalService,
102                            dlFileEntryLocalService, dlFileEntryService,
103                            dlFileEntryTypeLocalService, dlFileVersionLocalService,
104                            dlFileVersionService, dlFolderLocalService, dlFolderService,
105                            resourceLocalService, folderId, fileEntryId, fileVersionId);
106            }
107    
108            @Override
109            public FileEntry addFileEntry(
110                            long userId, long folderId, String sourceFileName, String mimeType,
111                            String title, String description, String changeLog, File file,
112                            ServiceContext serviceContext)
113                    throws PortalException, SystemException {
114    
115                    long fileEntryTypeId = ParamUtil.getLong(
116                            serviceContext, "fileEntryTypeId",
117                            getDefaultFileEntryTypeId(serviceContext, folderId));
118    
119                    Map<String, Fields> fieldsMap = getFieldsMap(
120                            serviceContext, fileEntryTypeId);
121    
122                    long size = 0;
123    
124                    if (file != null) {
125                            size = file.length();
126                    }
127    
128                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
129                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
130                            sourceFileName, mimeType, title, description, changeLog,
131                            fileEntryTypeId, fieldsMap, file, null, size, serviceContext);
132    
133                    addFileEntryResources(dlFileEntry, serviceContext);
134    
135                    return new LiferayFileEntry(dlFileEntry);
136            }
137    
138            @Override
139            public FileEntry addFileEntry(
140                            long userId, long folderId, String sourceFileName, String mimeType,
141                            String title, String description, String changeLog, InputStream is,
142                            long size, ServiceContext serviceContext)
143                    throws PortalException, SystemException {
144    
145                    long fileEntryTypeId = ParamUtil.getLong(
146                            serviceContext, "fileEntryTypeId",
147                            getDefaultFileEntryTypeId(serviceContext, folderId));
148    
149                    Map<String, Fields> fieldsMap = getFieldsMap(
150                            serviceContext, fileEntryTypeId);
151    
152                    DLFileEntry dlFileEntry = dlFileEntryLocalService.addFileEntry(
153                            userId, getGroupId(), getRepositoryId(), toFolderId(folderId),
154                            sourceFileName, mimeType, title, description, changeLog,
155                            fileEntryTypeId, fieldsMap, null, is, size, serviceContext);
156    
157                    addFileEntryResources(dlFileEntry, serviceContext);
158    
159                    return new LiferayFileEntry(dlFileEntry);
160            }
161    
162            @Override
163            public Folder addFolder(
164                            long userId, long parentFolderId, String title, String description,
165                            ServiceContext serviceContext)
166                    throws PortalException, SystemException {
167    
168                    boolean mountPoint = ParamUtil.getBoolean(serviceContext, "mountPoint");
169    
170                    DLFolder dlFolder = dlFolderLocalService.addFolder(
171                            userId, getGroupId(), getRepositoryId(), mountPoint,
172                            toFolderId(parentFolderId), title, description, false,
173                            serviceContext);
174    
175                    return new LiferayFolder(dlFolder);
176            }
177    
178            public void addRepository(
179                    long groupId, String name, String description, String portletKey,
180                    UnicodeProperties typeSettingsProperties) {
181            }
182    
183            @Override
184            public void deleteAll() throws PortalException, SystemException {
185                    dlFolderLocalService.deleteAllByRepository(getRepositoryId());
186            }
187    
188            @Override
189            public void deleteFileEntry(long fileEntryId)
190                    throws PortalException, SystemException {
191    
192                    dlFileEntryLocalService.deleteFileEntry(fileEntryId);
193            }
194    
195            @Override
196            public void deleteFolder(long folderId)
197                    throws PortalException, SystemException {
198    
199                    DLFolder dlFolder = dlFolderLocalService.fetchFolder(folderId);
200    
201                    if (dlFolder != null) {
202                            dlFolderLocalService.deleteFolder(folderId);
203                    }
204            }
205    
206            @Override
207            public FileEntry getFileEntry(long fileEntryId)
208                    throws PortalException, SystemException {
209    
210                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
211                            fileEntryId);
212    
213                    return new LiferayFileEntry(dlFileEntry);
214            }
215    
216            @Override
217            public FileEntry getFileEntry(long folderId, String title)
218                    throws PortalException, SystemException {
219    
220                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
221                            getGroupId(), toFolderId(folderId), title);
222    
223                    return new LiferayFileEntry(dlFileEntry);
224            }
225    
226            @Override
227            public FileEntry getFileEntryByUuid(String uuid)
228                    throws PortalException, SystemException {
229    
230                    DLFileEntry dlFileEntry =
231                            dlFileEntryLocalService.getFileEntryByUuidAndGroupId(
232                                    uuid, getGroupId());
233    
234                    return new LiferayFileEntry(dlFileEntry);
235            }
236    
237            @Override
238            public FileVersion getFileVersion(long fileVersionId)
239                    throws PortalException, SystemException {
240    
241                    DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
242                            fileVersionId);
243    
244                    return new LiferayFileVersion(dlFileVersion);
245            }
246    
247            @Override
248            public Folder getFolder(long folderId)
249                    throws PortalException, SystemException {
250    
251                    DLFolder dlFolder = dlFolderLocalService.getFolder(folderId);
252    
253                    return new LiferayFolder(dlFolder);
254            }
255    
256            @Override
257            public Folder getFolder(long parentFolderId, String title)
258                    throws PortalException, SystemException {
259    
260                    DLFolder dlFolder = dlFolderLocalService.getFolder(
261                            getGroupId(), toFolderId(parentFolderId), title);
262    
263                    return new LiferayFolder(dlFolder);
264            }
265    
266            @Override
267            public FileEntry moveFileEntry(
268                            long userId, long fileEntryId, long newFolderId,
269                            ServiceContext serviceContext)
270                    throws PortalException, SystemException {
271    
272                    DLFileEntry dlFileEntry = dlFileEntryLocalService.moveFileEntry(
273                            userId, fileEntryId, toFolderId(newFolderId), serviceContext);
274    
275                    return new LiferayFileEntry(dlFileEntry);
276            }
277    
278            @Override
279            public Folder moveFolder(
280                            long userId, long folderId, long parentFolderId,
281                            ServiceContext serviceContext)
282                    throws PortalException, SystemException {
283    
284                    DLFolder dlFolder = dlFolderLocalService.moveFolder(
285                            userId, folderId, parentFolderId, serviceContext);
286    
287                    return new LiferayFolder(dlFolder);
288            }
289    
290            @Override
291            public void updateAsset(
292                            long userId, FileEntry fileEntry, FileVersion fileVersion,
293                            long[] assetCategoryIds, String[] assetTagNames,
294                            long[] assetLinkEntryIds)
295                    throws PortalException, SystemException {
296    
297                    dlAppHelperLocalService.updateAsset(
298                            userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
299                            assetLinkEntryIds);
300            }
301    
302            @Override
303            public FileEntry updateFileEntry(
304                            long userId, long fileEntryId, String sourceFileName,
305                            String mimeType, String title, String description, String changeLog,
306                            boolean majorVersion, File file, ServiceContext serviceContext)
307                    throws PortalException, SystemException {
308    
309                    long fileEntryTypeId = ParamUtil.getLong(
310                            serviceContext, "fileEntryTypeId", -1L);
311    
312                    Map<String, Fields> fieldsMap = getFieldsMap(
313                            serviceContext, fileEntryTypeId);
314    
315                    long size = 0;
316    
317                    if (file != null) {
318                            size = file.length();
319                    }
320    
321                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
322                            userId, fileEntryId, sourceFileName, mimeType, title, description,
323                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, file, null,
324                            size, serviceContext);
325    
326                    return new LiferayFileEntry(dlFileEntry);
327            }
328    
329            @Override
330            public FileEntry updateFileEntry(
331                            long userId, long fileEntryId, String sourceFileName,
332                            String mimeType, String title, String description, String changeLog,
333                            boolean majorVersion, InputStream is, long size,
334                            ServiceContext serviceContext)
335                    throws PortalException, SystemException {
336    
337                    long fileEntryTypeId = ParamUtil.getLong(
338                            serviceContext, "fileEntryTypeId", -1L);
339    
340                    Map<String, Fields> fieldsMap = getFieldsMap(
341                            serviceContext, fileEntryTypeId);
342    
343                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
344                            userId, fileEntryId, sourceFileName, mimeType, title, description,
345                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, null, is, size,
346                            serviceContext);
347    
348                    return new LiferayFileEntry(dlFileEntry);
349            }
350    
351            @Override
352            public Folder updateFolder(
353                            long folderId, long parentFolderId, String title,
354                            String description, ServiceContext serviceContext)
355                    throws PortalException, SystemException {
356    
357                    long defaultFileEntryTypeId = ParamUtil.getLong(
358                            serviceContext, "defaultFileEntryTypeId");
359                    SortedArrayList<Long> fileEntryTypeIds = getLongList(
360                            serviceContext, "dlFileEntryTypesSearchContainerPrimaryKeys");
361                    boolean overrideFileEntryTypes = ParamUtil.getBoolean(
362                            serviceContext, "overrideFileEntryTypes");
363    
364                    DLFolder dlFolder = dlFolderLocalService.updateFolder(
365                            toFolderId(folderId), toFolderId(parentFolderId), title,
366                            description, defaultFileEntryTypeId, fileEntryTypeIds,
367                            overrideFileEntryTypes, serviceContext);
368    
369                    return new LiferayFolder(dlFolder);
370            }
371    
372            public UnicodeProperties updateRepository(
373                    UnicodeProperties typeSettingsProperties) {
374    
375                    return typeSettingsProperties;
376            }
377    
378            @Override
379            protected void initByFileEntryId(long fileEntryId)
380                    throws PrincipalException {
381    
382                    try {
383                            DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
384                                    fileEntryId);
385    
386                            initByRepositoryId(dlFileEntry.getRepositoryId());
387                    }
388                    catch (PrincipalException pe) {
389                            throw pe;
390                    }
391                    catch (Exception e) {
392                            if (_log.isTraceEnabled()) {
393                                    if (e instanceof NoSuchFileEntryException) {
394                                            _log.trace(e.getMessage());
395                                    }
396                                    else {
397                                            _log.trace(e, e);
398                                    }
399                            }
400                    }
401            }
402    
403            @Override
404            protected void initByFileVersionId(long fileVersionId)
405                    throws PrincipalException {
406    
407                    try {
408                            DLFileVersion dlFileVersion =
409                                    dlFileVersionLocalService.getFileVersion(fileVersionId);
410    
411                            initByRepositoryId(dlFileVersion.getRepositoryId());
412                    }
413                    catch (PrincipalException pe) {
414                            throw pe;
415                    }
416                    catch (Exception e) {
417                            if (_log.isTraceEnabled()) {
418                                    if (e instanceof NoSuchFileVersionException) {
419                                            _log.trace(e.getMessage());
420                                    }
421                                    else {
422                                            _log.trace(e, e);
423                                    }
424                            }
425                    }
426            }
427    
428            @Override
429            protected void initByFolderId(long folderId) throws PrincipalException {
430                    try {
431                            DLFolder dlFolder = dlFolderLocalService.getFolder(folderId);
432    
433                            initByRepositoryId(dlFolder.getRepositoryId());
434                    }
435                    catch (PrincipalException pe) {
436                            throw pe;
437                    }
438                    catch (Exception e) {
439                            if (_log.isTraceEnabled()) {
440                                    if (e instanceof NoSuchFolderException) {
441                                            _log.trace(e.getMessage());
442                                    }
443                                    else {
444                                            _log.trace(e, e);
445                                    }
446                            }
447                    }
448            }
449    
450            @Override
451            protected void initByRepositoryId(long repositoryId) {
452                    setGroupId(repositoryId);
453                    setRepositoryId(repositoryId);
454    
455                    try {
456                            Repository repository = repositoryLocalService.getRepository(
457                                    repositoryId);
458    
459                            setDlFolderId(repository.getDlFolderId());
460                            setGroupId(repository.getGroupId());
461                            setRepositoryId(repository.getRepositoryId());
462                    }
463                    catch (Exception e) {
464                    }
465            }
466    
467            private static Log _log = LogFactoryUtil.getLog(
468                    LiferayLocalRepository.class);
469    
470    }