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