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.document.library.kernel.model.DLFileEntry;
018    import com.liferay.document.library.kernel.model.DLFileEntryConstants;
019    import com.liferay.document.library.kernel.model.DLFileVersion;
020    import com.liferay.document.library.kernel.service.DLAppHelperLocalServiceUtil;
021    import com.liferay.document.library.kernel.service.DLFileVersionLocalServiceUtil;
022    import com.liferay.expando.kernel.model.ExpandoBridge;
023    import com.liferay.exportimport.kernel.lar.StagedModelType;
024    import com.liferay.portal.kernel.exception.PortalException;
025    import com.liferay.portal.kernel.exception.SystemException;
026    import com.liferay.portal.kernel.lock.Lock;
027    import com.liferay.portal.kernel.log.Log;
028    import com.liferay.portal.kernel.log.LogFactoryUtil;
029    import com.liferay.portal.kernel.repository.Repository;
030    import com.liferay.portal.kernel.repository.RepositoryProviderUtil;
031    import com.liferay.portal.kernel.repository.capabilities.Capability;
032    import com.liferay.portal.kernel.repository.model.FileEntry;
033    import com.liferay.portal.kernel.repository.model.FileShortcut;
034    import com.liferay.portal.kernel.repository.model.FileVersion;
035    import com.liferay.portal.kernel.repository.model.Folder;
036    import com.liferay.portal.kernel.repository.model.RepositoryModelOperation;
037    import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal;
038    import com.liferay.portal.kernel.security.permission.PermissionChecker;
039    import com.liferay.portal.kernel.util.ContentTypes;
040    import com.liferay.portal.kernel.util.StringPool;
041    import com.liferay.portal.kernel.util.Validator;
042    import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
043    import com.liferay.portlet.documentlibrary.util.RepositoryModelUtil;
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 int getFileVersionsCount(int status) {
220                    return _dlFileEntry.getFileVersionsCount(status);
221            }
222    
223            @Override
224            public Folder getFolder() {
225                    Folder folder = null;
226    
227                    try {
228                            folder = new LiferayFolder(_dlFileEntry.getFolder());
229                    }
230                    catch (Exception e) {
231                            return null;
232                    }
233    
234                    return folder;
235            }
236    
237            @Override
238            public long getFolderId() {
239                    return _dlFileEntry.getFolderId();
240            }
241    
242            @Override
243            public long getGroupId() {
244                    return _dlFileEntry.getGroupId();
245            }
246    
247            @Override
248            public String getIcon() {
249                    return _dlFileEntry.getIcon();
250            }
251    
252            @Override
253            public String getIconCssClass() {
254                    return _dlFileEntry.getIconCssClass();
255            }
256    
257            @Override
258            public Date getLastPublishDate() {
259                    return _dlFileEntry.getLastPublishDate();
260            }
261    
262            @Override
263            public FileVersion getLatestFileVersion() throws PortalException {
264                    return getLatestFileVersion(false);
265            }
266    
267            @Override
268            public FileVersion getLatestFileVersion(boolean trusted)
269                    throws PortalException {
270    
271                    return new LiferayFileVersion(
272                            _dlFileEntry.getLatestFileVersion(trusted));
273            }
274    
275            @Override
276            public Lock getLock() {
277                    return _dlFileEntry.getLock();
278            }
279    
280            @Override
281            public String getMimeType() {
282                    return _dlFileEntry.getMimeType();
283            }
284    
285            @Override
286            public String getMimeType(String version) {
287                    try {
288                            DLFileVersion dlFileVersion =
289                                    DLFileVersionLocalServiceUtil.getFileVersion(
290                                            _dlFileEntry.getFileEntryId(), version);
291    
292                            return dlFileVersion.getMimeType();
293                    }
294                    catch (Exception e) {
295                    }
296    
297                    return ContentTypes.APPLICATION_OCTET_STREAM;
298            }
299    
300            @Override
301            public Object getModel() {
302                    return _dlFileEntry;
303            }
304    
305            @Override
306            public Class<?> getModelClass() {
307                    return LiferayFileEntry.class;
308            }
309    
310            @Override
311            public String getModelClassName() {
312                    return LiferayFileEntry.class.getName();
313            }
314    
315            @Override
316            public Date getModifiedDate() {
317                    return _dlFileEntry.getModifiedDate();
318            }
319    
320            @Override
321            public long getPrimaryKey() {
322                    return _dlFileEntry.getPrimaryKey();
323            }
324    
325            @Override
326            public Serializable getPrimaryKeyObj() {
327                    return getPrimaryKey();
328            }
329    
330            @Override
331            public int getReadCount() {
332                    return _dlFileEntry.getReadCount();
333            }
334    
335            @Override
336            public <T extends Capability> T getRepositoryCapability(
337                    Class<T> capabilityClass) {
338    
339                    Repository repository = getRepository();
340    
341                    return repository.getCapability(capabilityClass);
342            }
343    
344            @Override
345            public long getRepositoryId() {
346                    return _dlFileEntry.getRepositoryId();
347            }
348    
349            @Override
350            public long getSize() {
351                    return _dlFileEntry.getSize();
352            }
353    
354            @Override
355            public StagedModelType getStagedModelType() {
356                    return new StagedModelType(DLFileEntryConstants.getClassName());
357            }
358    
359            @Override
360            public String getTitle() {
361                    return _dlFileEntry.getTitle();
362            }
363    
364            @Override
365            public long getUserId() {
366                    return _dlFileEntry.getUserId();
367            }
368    
369            @Override
370            public String getUserName() {
371                    return _dlFileEntry.getUserName();
372            }
373    
374            @Override
375            public String getUserUuid() {
376                    return _dlFileEntry.getUserUuid();
377            }
378    
379            @Override
380            public String getUuid() {
381                    return _dlFileEntry.getUuid();
382            }
383    
384            @Override
385            public String getVersion() {
386                    return _dlFileEntry.getVersion();
387            }
388    
389            /**
390             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserId()}
391             */
392            @Deprecated
393            @Override
394            public long getVersionUserId() {
395                    long versionUserId = 0;
396    
397                    try {
398                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
399    
400                            versionUserId = dlFileVersion.getUserId();
401                    }
402                    catch (Exception e) {
403                            _log.error(e, e);
404                    }
405    
406                    return versionUserId;
407            }
408    
409            /**
410             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserName()}
411             */
412            @Deprecated
413            @Override
414            public String getVersionUserName() {
415                    String versionUserName = StringPool.BLANK;
416    
417                    try {
418                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
419    
420                            versionUserName = dlFileVersion.getUserName();
421                    }
422                    catch (Exception e) {
423                            _log.error(e, e);
424                    }
425    
426                    return versionUserName;
427            }
428    
429            /**
430             * @deprecated As of 6.2.0, replaced by {@link DLFileVersion#getUserUuid()}
431             */
432            @Deprecated
433            @Override
434            public String getVersionUserUuid() {
435                    String versionUserUuid = StringPool.BLANK;
436    
437                    try {
438                            DLFileVersion dlFileVersion = _dlFileEntry.getFileVersion();
439    
440                            versionUserUuid = dlFileVersion.getUserUuid();
441                    }
442                    catch (Exception e) {
443                            _log.error(e, e);
444                    }
445    
446                    return versionUserUuid;
447            }
448    
449            @Override
450            public int hashCode() {
451                    return _dlFileEntry.hashCode();
452            }
453    
454            @Override
455            public boolean hasLock() {
456                    return _dlFileEntry.hasLock();
457            }
458    
459            @Override
460            public boolean isCheckedOut() {
461                    return _dlFileEntry.isCheckedOut();
462            }
463    
464            @Override
465            public boolean isDefaultRepository() {
466                    if (_dlFileEntry.getGroupId() == _dlFileEntry.getRepositoryId()) {
467                            return true;
468                    }
469                    else {
470                            return false;
471                    }
472            }
473    
474            @Override
475            public boolean isEscapedModel() {
476                    return _escapedModel;
477            }
478    
479            @Override
480            public boolean isInTrash() {
481                    return _dlFileEntry.isInTrash();
482            }
483    
484            @Override
485            public boolean isInTrashContainer() {
486                    try {
487                            return _dlFileEntry.isInTrashContainer();
488                    }
489                    catch (Exception e) {
490                            return false;
491                    }
492            }
493    
494            @Override
495            public boolean isManualCheckInRequired() {
496                    return _dlFileEntry.isManualCheckInRequired();
497            }
498    
499            @Override
500            public <T extends Capability> boolean isRepositoryCapabilityProvided(
501                    Class<T> capabilityClass) {
502    
503                    Repository repository = getRepository();
504    
505                    return repository.isCapabilityProvided(capabilityClass);
506            }
507    
508            @Override
509            public boolean isSupportsLocking() {
510                    return true;
511            }
512    
513            @Override
514            public boolean isSupportsMetadata() {
515                    return true;
516            }
517    
518            @Override
519            public boolean isSupportsSocial() {
520                    return true;
521            }
522    
523            public void setCachedFileVersion(FileVersion fileVersion) {
524                    _dlFileVersion = (DLFileVersion)fileVersion.getModel();
525            }
526    
527            @Override
528            public void setCompanyId(long companyId) {
529                    _dlFileEntry.setCompanyId(companyId);
530            }
531    
532            @Override
533            public void setCreateDate(Date createDate) {
534                    _dlFileEntry.setCreateDate(createDate);
535            }
536    
537            @Override
538            public void setGroupId(long groupId) {
539                    _dlFileEntry.setGroupId(groupId);
540            }
541    
542            @Override
543            public void setLastPublishDate(Date lastPublishDate) {
544                    _dlFileEntry.setLastPublishDate(lastPublishDate);
545            }
546    
547            @Override
548            public void setModifiedDate(Date modifiedDate) {
549                    _dlFileEntry.setModifiedDate(modifiedDate);
550            }
551    
552            public void setPrimaryKey(long primaryKey) {
553                    _dlFileEntry.setPrimaryKey(primaryKey);
554            }
555    
556            @Override
557            public void setPrimaryKeyObj(Serializable primaryKeyObj) {
558                    setPrimaryKey(((Long)primaryKeyObj).longValue());
559            }
560    
561            @Override
562            public void setUserId(long userId) {
563                    _dlFileEntry.setUserId(userId);
564            }
565    
566            @Override
567            public void setUserName(String userName) {
568                    _dlFileEntry.setUserName(userName);
569            }
570    
571            @Override
572            public void setUserUuid(String userUuid) {
573                    _dlFileEntry.setUserUuid(userUuid);
574            }
575    
576            @Override
577            public void setUuid(String uuid) {
578                    _dlFileEntry.setUuid(uuid);
579            }
580    
581            @Override
582            public FileEntry toEscapedModel() {
583                    if (isEscapedModel()) {
584                            return this;
585                    }
586                    else {
587                            return new LiferayFileEntry(_dlFileEntry.toEscapedModel(), true);
588                    }
589            }
590    
591            @Override
592            public String toString() {
593                    return _dlFileEntry.toString();
594            }
595    
596            @Override
597            public FileEntry toUnescapedModel() {
598                    if (isEscapedModel()) {
599                            return new LiferayFileEntry(_dlFileEntry.toUnescapedModel(), true);
600                    }
601                    else {
602                            return this;
603                    }
604            }
605    
606            protected Repository getRepository() {
607                    try {
608                            return RepositoryProviderUtil.getRepository(getRepositoryId());
609                    }
610                    catch (PortalException pe) {
611                            throw new SystemException(
612                                    "Unable to get repository for file entry " + getFileEntryId(),
613                                    pe);
614                    }
615            }
616    
617            private static final Log _log = LogFactoryUtil.getLog(
618                    LiferayFileEntry.class);
619    
620            private final DLFileEntry _dlFileEntry;
621            private DLFileVersion _dlFileVersion;
622            private final boolean _escapedModel;
623    
624    }