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                    DLFolder dlFolder = dlFolderLocalService.fetchFolder(folderId);
198    
199                    if (dlFolder != null) {
200                            dlFolderLocalService.deleteFolder(folderId);
201                    }
202            }
203    
204            @Override
205            public FileEntry getFileEntry(long fileEntryId)
206                    throws PortalException, SystemException {
207    
208                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
209                            fileEntryId);
210    
211                    return new LiferayFileEntry(dlFileEntry);
212            }
213    
214            @Override
215            public FileEntry getFileEntry(long folderId, String title)
216                    throws PortalException, SystemException {
217    
218                    DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
219                            getGroupId(), toFolderId(folderId), title);
220    
221                    return new LiferayFileEntry(dlFileEntry);
222            }
223    
224            @Override
225            public FileEntry getFileEntryByUuid(String uuid)
226                    throws PortalException, SystemException {
227    
228                    DLFileEntry dlFileEntry =
229                            dlFileEntryLocalService.getFileEntryByUuidAndGroupId(
230                                    uuid, getGroupId());
231    
232                    return new LiferayFileEntry(dlFileEntry);
233            }
234    
235            @Override
236            public FileVersion getFileVersion(long fileVersionId)
237                    throws PortalException, SystemException {
238    
239                    DLFileVersion dlFileVersion = dlFileVersionLocalService.getFileVersion(
240                            fileVersionId);
241    
242                    return new LiferayFileVersion(dlFileVersion);
243            }
244    
245            @Override
246            public Folder getFolder(long folderId)
247                    throws PortalException, SystemException {
248    
249                    DLFolder dlFolder = dlFolderLocalService.getFolder(folderId);
250    
251                    return new LiferayFolder(dlFolder);
252            }
253    
254            @Override
255            public Folder getFolder(long parentFolderId, String title)
256                    throws PortalException, SystemException {
257    
258                    DLFolder dlFolder = dlFolderLocalService.getFolder(
259                            getGroupId(), toFolderId(parentFolderId), title);
260    
261                    return new LiferayFolder(dlFolder);
262            }
263    
264            @Override
265            public FileEntry moveFileEntry(
266                            long userId, long fileEntryId, long newFolderId,
267                            ServiceContext serviceContext)
268                    throws PortalException, SystemException {
269    
270                    DLFileEntry dlFileEntry = dlFileEntryLocalService.moveFileEntry(
271                            userId, fileEntryId, toFolderId(newFolderId), serviceContext);
272    
273                    return new LiferayFileEntry(dlFileEntry);
274            }
275    
276            @Override
277            public Folder moveFolder(
278                            long userId, long folderId, long parentFolderId,
279                            ServiceContext serviceContext)
280                    throws PortalException, SystemException {
281    
282                    DLFolder dlFolder = dlFolderLocalService.moveFolder(
283                            userId, folderId, parentFolderId, serviceContext);
284    
285                    return new LiferayFolder(dlFolder);
286            }
287    
288            @Override
289            public void updateAsset(
290                            long userId, FileEntry fileEntry, FileVersion fileVersion,
291                            long[] assetCategoryIds, String[] assetTagNames,
292                            long[] assetLinkEntryIds)
293                    throws PortalException, SystemException {
294    
295                    dlAppHelperLocalService.updateAsset(
296                            userId, fileEntry, fileVersion, assetCategoryIds, assetTagNames,
297                            assetLinkEntryIds);
298            }
299    
300            @Override
301            public FileEntry updateFileEntry(
302                            long userId, long fileEntryId, String sourceFileName,
303                            String mimeType, String title, String description, String changeLog,
304                            boolean majorVersion, File file, ServiceContext serviceContext)
305                    throws PortalException, SystemException {
306    
307                    long fileEntryTypeId = ParamUtil.getLong(
308                            serviceContext, "fileEntryTypeId", -1L);
309    
310                    Map<String, Fields> fieldsMap = getFieldsMap(
311                            serviceContext, fileEntryTypeId);
312    
313                    long size = 0;
314    
315                    if (file != null) {
316                            size = file.length();
317                    }
318    
319                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
320                            userId, fileEntryId, sourceFileName, mimeType, title, description,
321                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, file, null,
322                            size, serviceContext);
323    
324                    return new LiferayFileEntry(dlFileEntry);
325            }
326    
327            @Override
328            public FileEntry updateFileEntry(
329                            long userId, long fileEntryId, String sourceFileName,
330                            String mimeType, String title, String description, String changeLog,
331                            boolean majorVersion, InputStream is, long size,
332                            ServiceContext serviceContext)
333                    throws PortalException, SystemException {
334    
335                    long fileEntryTypeId = ParamUtil.getLong(
336                            serviceContext, "fileEntryTypeId", -1L);
337    
338                    Map<String, Fields> fieldsMap = getFieldsMap(
339                            serviceContext, fileEntryTypeId);
340    
341                    DLFileEntry dlFileEntry = dlFileEntryLocalService.updateFileEntry(
342                            userId, fileEntryId, sourceFileName, mimeType, title, description,
343                            changeLog, majorVersion, fileEntryTypeId, fieldsMap, null, is, size,
344                            serviceContext);
345    
346                    return new LiferayFileEntry(dlFileEntry);
347            }
348    
349            @Override
350            public Folder updateFolder(
351                            long folderId, long parentFolderId, String title,
352                            String description, ServiceContext serviceContext)
353                    throws PortalException, SystemException {
354    
355                    long defaultFileEntryTypeId = ParamUtil.getLong(
356                            serviceContext, "defaultFileEntryTypeId");
357                    SortedArrayList<Long> fileEntryTypeIds = getLongList(
358                            serviceContext, "dlFileEntryTypesSearchContainerPrimaryKeys");
359                    boolean overrideFileEntryTypes = ParamUtil.getBoolean(
360                            serviceContext, "overrideFileEntryTypes");
361    
362                    DLFolder dlFolder = dlFolderLocalService.updateFolder(
363                            toFolderId(folderId), toFolderId(parentFolderId), title,
364                            description, defaultFileEntryTypeId, fileEntryTypeIds,
365                            overrideFileEntryTypes, serviceContext);
366    
367                    return new LiferayFolder(dlFolder);
368            }
369    
370            public UnicodeProperties updateRepository(
371                    UnicodeProperties typeSettingsProperties) {
372    
373                    return typeSettingsProperties;
374            }
375    
376            @Override
377            protected void initByFileEntryId(long fileEntryId) {
378                    try {
379                            DLFileEntry dlFileEntry = dlFileEntryLocalService.getFileEntry(
380                                    fileEntryId);
381    
382                            initByRepositoryId(dlFileEntry.getRepositoryId());
383                    }
384                    catch (Exception e) {
385                            if (_log.isTraceEnabled()) {
386                                    if (e instanceof NoSuchFileEntryException) {
387                                            _log.trace(e.getMessage());
388                                    }
389                                    else {
390                                            _log.trace(e, e);
391                                    }
392                            }
393                    }
394            }
395    
396            @Override
397            protected void initByFileVersionId(long fileVersionId) {
398                    try {
399                            DLFileVersion dlFileVersion =
400                                    dlFileVersionLocalService.getFileVersion(fileVersionId);
401    
402                            initByRepositoryId(dlFileVersion.getRepositoryId());
403                    }
404                    catch (Exception e) {
405                            if (_log.isTraceEnabled()) {
406                                    if (e instanceof NoSuchFileVersionException) {
407                                            _log.trace(e.getMessage());
408                                    }
409                                    else {
410                                            _log.trace(e, e);
411                                    }
412                            }
413                    }
414            }
415    
416            @Override
417            protected void initByFolderId(long folderId) {
418                    try {
419                            DLFolder dlFolder = dlFolderLocalService.getFolder(folderId);
420    
421                            initByRepositoryId(dlFolder.getRepositoryId());
422                    }
423                    catch (Exception e) {
424                            if (_log.isTraceEnabled()) {
425                                    if (e instanceof NoSuchFolderException) {
426                                            _log.trace(e.getMessage());
427                                    }
428                                    else {
429                                            _log.trace(e, e);
430                                    }
431                            }
432                    }
433            }
434    
435            @Override
436            protected void initByRepositoryId(long repositoryId) {
437                    setGroupId(repositoryId);
438                    setRepositoryId(repositoryId);
439    
440                    try {
441                            Repository repository = repositoryLocalService.getRepository(
442                                    repositoryId);
443    
444                            setDlFolderId(repository.getDlFolderId());
445                            setGroupId(repository.getGroupId());
446                            setRepositoryId(repository.getRepositoryId());
447                    }
448                    catch (Exception e) {
449                    }
450            }
451    
452            private static Log _log = LogFactoryUtil.getLog(
453                    LiferayLocalRepository.class);
454    
455    }