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