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