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.model;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.lock.Lock;
020    import com.liferay.portal.kernel.log.Log;
021    import com.liferay.portal.kernel.log.LogFactoryUtil;
022    import com.liferay.portal.kernel.repository.Repository;
023    import com.liferay.portal.kernel.repository.RepositoryProviderUtil;
024    import com.liferay.portal.kernel.repository.capabilities.Capability;
025    import com.liferay.portal.kernel.repository.model.FileEntry;
026    import com.liferay.portal.kernel.repository.model.FileShortcut;
027    import com.liferay.portal.kernel.repository.model.FileVersion;
028    import com.liferay.portal.kernel.repository.model.Folder;
029    import com.liferay.portal.kernel.repository.model.RepositoryModelOperation;
030    import com.liferay.portal.kernel.util.ContentTypes;
031    import com.liferay.portal.kernel.util.StringPool;
032    import com.liferay.portal.kernel.util.Validator;
033    import com.liferay.portal.security.auth.PrincipalThreadLocal;
034    import com.liferay.portal.security.permission.PermissionChecker;
035    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
036    import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
037    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
038    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalServiceUtil;
039    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
040    import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
041    import com.liferay.portlet.documentlibrary.util.RepositoryModelUtil;
042    import com.liferay.portlet.expando.model.ExpandoBridge;
043    import com.liferay.portlet.exportimport.lar.StagedModelType;
044    
045    import java.io.InputStream;
046    import java.io.Serializable;
047    
048    import java.util.Date;
049    import java.util.List;
050    import java.util.Map;
051    
052    /**
053     * @author Alexander Chow
054     */
055    public class LiferayFileEntry extends LiferayModel implements FileEntry {
056    
057            public LiferayFileEntry(DLFileEntry dlFileEntry) {
058                    this(dlFileEntry, dlFileEntry.isEscapedModel());
059            }
060    
061            public LiferayFileEntry(DLFileEntry fileEntry, boolean escapedModel) {
062                    _dlFileEntry = fileEntry;
063                    _escapedModel = escapedModel;
064            }
065    
066            @Override
067            public Object clone() {
068                    return new LiferayFileEntry(_dlFileEntry);
069            }
070    
071            @Override
072            public boolean containsPermission(
073                            PermissionChecker permissionChecker, String actionId)
074                    throws PortalException {
075    
076                    return DLFileEntryPermission.contains(
077                            permissionChecker, _dlFileEntry, actionId);
078            }
079    
080            @Override
081            public boolean equals(Object obj) {
082                    if (this == obj) {
083                            return true;
084                    }
085    
086                    if (!(obj instanceof LiferayFileEntry)) {
087                            return false;
088                    }
089    
090                    LiferayFileEntry liferayFileEntry = (LiferayFileEntry)obj;
091    
092                    if (Validator.equals(_dlFileEntry, liferayFileEntry._dlFileEntry)) {
093                            return true;
094                    }
095    
096                    return false;
097            }
098    
099            @Override
100            public void execute(RepositoryModelOperation repositoryModelOperation)
101                    throws PortalException {
102    
103                    repositoryModelOperation.execute(this);
104            }
105    
106            @Override
107            public Map<String, Serializable> getAttributes() {
108                    ExpandoBridge expandoBridge = getExpandoBridge();
109    
110                    return expandoBridge.getAttributes();
111            }
112    
113            public FileVersion getCachedFileVersion() {
114                    if (_dlFileVersion == null) {
115                            return null;
116                    }
117    
118                    return new LiferayFileVersion(_dlFileVersion);
119            }
120    
121            @Override
122            public long getCompanyId() {
123                    return _dlFileEntry.getCompanyId();
124            }
125    
126            @Override
127            public InputStream getContentStream() throws PortalException {
128                    InputStream inputStream = _dlFileEntry.getContentStream();
129    
130                    try {
131                            DLAppHelperLocalServiceUtil.getFileAsStream(
132                                    PrincipalThreadLocal.getUserId(), this, true);
133                    }
134                    catch (Exception e) {
135                            _log.error(e);
136                    }
137    
138                    return inputStream;
139            }
140    
141            @Override
142            public InputStream getContentStream(String version) throws PortalException {
143                    InputStream inputStream = _dlFileEntry.getContentStream(version);
144    
145                    try {
146                            DLAppHelperLocalServiceUtil.getFileAsStream(
147                                    PrincipalThreadLocal.getUserId(), this, true);
148                    }
149                    catch (Exception e) {
150                            _log.error(e);
151                    }
152    
153                    return inputStream;
154            }
155    
156            @Override
157            public Date getCreateDate() {
158                    return _dlFileEntry.getCreateDate();
159            }
160    
161            @Override
162            public String getDescription() {
163                    return _dlFileEntry.getDescription();
164            }
165    
166            public DLFileEntry getDLFileEntry() {
167                    return _dlFileEntry;
168            }
169    
170            @Override
171            public ExpandoBridge getExpandoBridge() {
172                    return _dlFileEntry.getExpandoBridge();
173            }
174    
175            @Override
176            public String getExtension() {
177                    return _dlFileEntry.getExtension();
178            }
179    
180            @Override
181            public long getFileEntryId() {
182                    return _dlFileEntry.getFileEntryId();
183            }
184    
185            @Override
186            public String getFileName() {
187                    return _dlFileEntry.getFileName();
188            }
189    
190            @Override
191            public List<FileShortcut> getFileShortcuts() {
192                    return RepositoryModelUtil.toFileShortcuts(
193                            _dlFileEntry.getFileShortcuts());
194            }
195    
196            @Override
197            public FileVersion getFileVersion() throws PortalException {
198                    DLFileVersion dlFileVersion = _dlFileVersion;
199    
200                    if (dlFileVersion == null) {
201                            dlFileVersion = _dlFileEntry.getFileVersion();
202                    }
203    
204                    return new LiferayFileVersion(dlFileVersion);
205            }
206    
207            @Override
208            public FileVersion getFileVersion(String version) throws PortalException {
209                    return new LiferayFileVersion(_dlFileEntry.getFileVersion(version));
210            }
211    
212            @Override
213            public List<FileVersion> getFileVersions(int status) {
214                    return RepositoryModelUtil.toFileVersions(
215                            _dlFileEntry.getFileVersions(status));
216            }
217    
218            @Override
219            public Folder getFolder() {
220                    Folder folder = null;
221    
222                    try {
223                            folder = new LiferayFolder(_dlFileEntry.getFolder());
224                    }
225                    catch (Exception e) {
226                            return null;
227                    }
228    
229                    return folder;
230            }
231    
232            @Override
233            public long getFolderId() {
234                    return _dlFileEntry.getFolderId();
235            }
236    
237            @Override
238            public long getGroupId() {
239                    return _dlFileEntry.getGroupId();
240            }
241    
242            @Override
243            public String getIcon() {
244                    return _dlFileEntry.getIcon();
245            }
246    
247            @Override
248            public String getIconCssClass() {
249                    return _dlFileEntry.getIconCssClass();
250            }
251    
252            @Override
253            public FileVersion getLatestFileVersion() throws PortalException {
254                    return getLatestFileVersion(false);
255            }
256    
257            @Override
258            public FileVersion getLatestFileVersion(boolean trusted)
259                    throws PortalException {
260    
261                    return new LiferayFileVersion(
262                            _dlFileEntry.getLatestFileVersion(trusted));
263            }
264    
265            @Override
266            public Lock getLock() {
267                    return _dlFileEntry.getLock();
268            }
269    
270            @Override
271            public String getMimeType() {
272                    return _dlFileEntry.getMimeType();
273            }
274    
275            @Override
276            public String getMimeType(String version) {
277                    try {
278                            DLFileVersion dlFileVersion =
279                                    DLFileVersionLocalServiceUtil.getFileVersion(
280                                            _dlFileEntry.getFileEntryId(), version);
281    
282                            return dlFileVersion.getMimeType();
283                    }
284                    catch (Exception e) {
285                    }
286    
287                    return ContentTypes.APPLICATION_OCTET_STREAM;
288            }
289    
290            @Override
291            public Object getModel() {
292                    return _dlFileEntry;
293            }
294    
295            @Override
296            public Class<?> getModelClass() {
297                    return LiferayFileEntry.class;
298            }
299    
300            @Override
301            public String getModelClassName() {
302                    return LiferayFileEntry.class.getName();
303            }
304    
305            @Override
306            public Date getModifiedDate() {
307                    return _dlFileEntry.getModifiedDate();
308            }
309    
310            @Override
311            public long getPrimaryKey() {
312                    return _dlFileEntry.getPrimaryKey();
313            }
314    
315            @Override
316            public Serializable getPrimaryKeyObj() {
317                    return getPrimaryKey();
318            }
319    
320            @Override
321            public int getReadCount() {
322                    return _dlFileEntry.getReadCount();
323            }
324    
325            @Override
326            public <T extends Capability> T getRepositoryCapability(
327                    Class<T> capabilityClass) {
328    
329                    Repository repository = getRepository();
330    
331                    return repository.getCapability(capabilityClass);
332            }
333    
334            @Override
335            public long getRepositoryId() {
336                    return _dlFileEntry.getRepositoryId();
337            }
338    
339            @Override
340            public long getSize() {
341                    return _dlFileEntry.getSize();
342            }
343    
344            @Override
345            public StagedModelType getStagedModelType() {
346                    return new StagedModelType(DLFileEntryConstants.getClassName());
347            }
348    
349            @Override
350            public String getTitle() {
351                    return _dlFileEntry.getTitle();
352            }
353    
354            @Override
355            public long getUserId() {
356                    return _dlFileEntry.getUserId();
357            }
358    
359            @Override
360            public String getUserName() {
361                    return _dlFileEntry.getUserName();
362            }
363    
364            @Override
365            public String getUserUuid() {
366                    return _dlFileEntry.getUserUuid();
367            }
368    
369            @Override
370            public String getUuid() {
371                    return _dlFileEntry.getUuid();
372            }
373    
374            @Override
375            public String getVersion() {
376                    return _dlFileEntry.getVersion();
377            }
378    
379            /**
380             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserId()}
381             */
382            @Deprecated
383            @Override
384            public long getVersionUserId() {
385                    long versionUserId = 0;
386    
387                    try {
388                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
389    
390                            versionUserId = dlFileVersion.getUserId();
391                    }
392                    catch (Exception e) {
393                            _log.error(e, e);
394                    }
395    
396                    return versionUserId;
397            }
398    
399            /**
400             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserName()}
401             */
402            @Deprecated
403            @Override
404            public String getVersionUserName() {
405                    String versionUserName = StringPool.BLANK;
406    
407                    try {
408                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
409    
410                            versionUserName = dlFileVersion.getUserName();
411                    }
412                    catch (Exception e) {
413                            _log.error(e, e);
414                    }
415    
416                    return versionUserName;
417            }
418    
419            /**
420             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserUuid()}
421             */
422            @Deprecated
423            @Override
424            public String getVersionUserUuid() {
425                    String versionUserUuid = StringPool.BLANK;
426    
427                    try {
428                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
429    
430                            versionUserUuid = dlFileVersion.getUserUuid();
431                    }
432                    catch (Exception e) {
433                            _log.error(e, e);
434                    }
435    
436                    return versionUserUuid;
437            }
438    
439            @Override
440            public int hashCode() {
441                    return _dlFileEntry.hashCode();
442            }
443    
444            @Override
445            public boolean hasLock() {
446                    return _dlFileEntry.hasLock();
447            }
448    
449            @Override
450            public boolean isCheckedOut() {
451                    return _dlFileEntry.isCheckedOut();
452            }
453    
454            @Override
455            public boolean isDefaultRepository() {
456                    if (_dlFileEntry.getGroupId() == _dlFileEntry.getRepositoryId()) {
457                            return true;
458                    }
459                    else {
460                            return false;
461                    }
462            }
463    
464            @Override
465            public boolean isEscapedModel() {
466                    return _escapedModel;
467            }
468    
469            @Override
470            public boolean isInTrash() {
471                    return _dlFileEntry.isInTrash();
472            }
473    
474            @Override
475            public boolean isInTrashContainer() {
476                    try {
477                            return _dlFileEntry.isInTrashContainer();
478                    }
479                    catch (Exception e) {
480                            return false;
481                    }
482            }
483    
484            @Override
485            public boolean isManualCheckInRequired() {
486                    return _dlFileEntry.isManualCheckInRequired();
487            }
488    
489            @Override
490            public <T extends Capability> boolean isRepositoryCapabilityProvided(
491                    Class<T> capabilityClass) {
492    
493                    Repository repository = getRepository();
494    
495                    return repository.isCapabilityProvided(capabilityClass);
496            }
497    
498            @Override
499            public boolean isSupportsLocking() {
500                    return true;
501            }
502    
503            @Override
504            public boolean isSupportsMetadata() {
505                    return true;
506            }
507    
508            @Override
509            public boolean isSupportsSocial() {
510                    return true;
511            }
512    
513            public void setCachedFileVersion(FileVersion fileVersion) {
514                    _dlFileVersion = (DLFileVersion)fileVersion.getModel();
515            }
516    
517            @Override
518            public void setCompanyId(long companyId) {
519                    _dlFileEntry.setCompanyId(companyId);
520            }
521    
522            @Override
523            public void setCreateDate(Date date) {
524                    _dlFileEntry.setCreateDate(date);
525            }
526    
527            @Override
528            public void setGroupId(long groupId) {
529                    _dlFileEntry.setGroupId(groupId);
530            }
531    
532            @Override
533            public void setModifiedDate(Date date) {
534                    _dlFileEntry.setModifiedDate(date);
535            }
536    
537            public void setPrimaryKey(long primaryKey) {
538                    _dlFileEntry.setPrimaryKey(primaryKey);
539            }
540    
541            @Override
542            public void setPrimaryKeyObj(Serializable primaryKeyObj) {
543                    setPrimaryKey(((Long)primaryKeyObj).longValue());
544            }
545    
546            @Override
547            public void setUserId(long userId) {
548                    _dlFileEntry.setUserId(userId);
549            }
550    
551            @Override
552            public void setUserName(String userName) {
553                    _dlFileEntry.setUserName(userName);
554            }
555    
556            @Override
557            public void setUserUuid(String userUuid) {
558                    _dlFileEntry.setUserUuid(userUuid);
559            }
560    
561            @Override
562            public void setUuid(String uuid) {
563                    _dlFileEntry.setUuid(uuid);
564            }
565    
566            @Override
567            public FileEntry toEscapedModel() {
568                    if (isEscapedModel()) {
569                            return this;
570                    }
571                    else {
572                            return new LiferayFileEntry(_dlFileEntry.toEscapedModel(), true);
573                    }
574            }
575    
576            @Override
577            public String toString() {
578                    return _dlFileEntry.toString();
579            }
580    
581            @Override
582            public FileEntry toUnescapedModel() {
583                    if (isEscapedModel()) {
584                            return new LiferayFileEntry(_dlFileEntry.toUnescapedModel(), true);
585                    }
586                    else {
587                            return this;
588                    }
589            }
590    
591            protected Repository getRepository() {
592                    try {
593                            return RepositoryProviderUtil.getRepository(getRepositoryId());
594                    }
595                    catch (PortalException pe) {
596                            throw new SystemException(
597                                    "Unable to get repository for file entry " + getFileEntryId(),
598                                    pe);
599                    }
600            }
601    
602            private static final Log _log = LogFactoryUtil.getLog(
603                    LiferayFileEntry.class);
604    
605            private final DLFileEntry _dlFileEntry;
606            private DLFileVersion _dlFileVersion;
607            private final boolean _escapedModel;
608    
609    }