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.cmis.model;
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.model.FileEntry;
022    import com.liferay.portal.kernel.repository.model.FileVersion;
023    import com.liferay.portal.kernel.util.FileUtil;
024    import com.liferay.portal.kernel.util.GetterUtil;
025    import com.liferay.portal.kernel.util.MimeTypesUtil;
026    import com.liferay.portal.kernel.util.StringPool;
027    import com.liferay.portal.kernel.util.Validator;
028    import com.liferay.portal.model.User;
029    import com.liferay.portal.repository.cmis.CMISRepository;
030    import com.liferay.portal.security.auth.PrincipalThreadLocal;
031    import com.liferay.portal.service.CMISRepositoryLocalServiceUtil;
032    import com.liferay.portal.service.UserLocalServiceUtil;
033    import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
034    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
035    import com.liferay.portlet.documentlibrary.service.DLAppHelperLocalServiceUtil;
036    import com.liferay.portlet.documentlibrary.util.DLUtil;
037    import com.liferay.portlet.expando.model.ExpandoBridge;
038    
039    import java.io.InputStream;
040    import java.io.Serializable;
041    
042    import java.util.Calendar;
043    import java.util.Date;
044    import java.util.HashMap;
045    import java.util.List;
046    import java.util.Map;
047    
048    import org.apache.chemistry.opencmis.client.api.Document;
049    import org.apache.chemistry.opencmis.commons.data.ContentStream;
050    import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
051    
052    /**
053     * @author Alexander Chow
054     */
055    public class CMISFileVersion extends CMISModel implements FileVersion {
056    
057            public CMISFileVersion(
058                    CMISRepository cmisRepository, String uuid, long fileVersionId,
059                    Document document) {
060    
061                    _cmisRepository = cmisRepository;
062                    _uuid = uuid;
063                    _fileVersionId = fileVersionId;
064                    _document = document;
065            }
066    
067            @Override
068            public Map<String, Serializable> getAttributes() {
069                    return new HashMap<String, Serializable>();
070            }
071    
072            @Override
073            public String getChangeLog() {
074                    return _document.getCheckinComment();
075            }
076    
077            @Override
078            public long getCompanyId() {
079                    return _cmisRepository.getCompanyId();
080            }
081    
082            @Override
083            public InputStream getContentStream(boolean incrementCounter) {
084                    ContentStream contentStream = _document.getContentStream();
085    
086                    try {
087                            DLAppHelperLocalServiceUtil.getFileAsStream(
088                                    PrincipalThreadLocal.getUserId(), getFileEntry(),
089                                    incrementCounter);
090                    }
091                    catch (Exception e) {
092                            _log.error(e);
093                    }
094    
095                    return contentStream.getStream();
096            }
097    
098            @Override
099            public Date getCreateDate() {
100                    Calendar creationDate = _document.getCreationDate();
101    
102                    return creationDate.getTime();
103            }
104    
105            @Override
106            public ExpandoBridge getExpandoBridge() {
107                    return null;
108            }
109    
110            @Override
111            public String getExtension() {
112                    return FileUtil.getExtension(getTitle());
113            }
114    
115            @Override
116            public String getExtraSettings() {
117                    return null;
118            }
119    
120            @Override
121            public FileEntry getFileEntry() throws PortalException, SystemException {
122                    Document document = null;
123    
124                    try {
125                            List<Document> allVersions = _document.getAllVersions();
126    
127                            if (allVersions.isEmpty()) {
128                                    document = _document;
129                            }
130                            else {
131                                    document = allVersions.get(0);
132                            }
133                    }
134                    catch (CmisObjectNotFoundException confe) {
135                            throw new NoSuchFileEntryException(confe);
136                    }
137    
138                    return CMISRepositoryLocalServiceUtil.toFileEntry(
139                            getRepositoryId(), document);
140            }
141    
142            @Override
143            public long getFileEntryId() {
144                    try {
145                            return getFileEntry().getFileEntryId();
146                    }
147                    catch (NoSuchFileEntryException nsfee) {
148                    }
149                    catch (Exception e) {
150                            _log.error(e, e);
151                    }
152    
153                    return 0;
154            }
155    
156            @Override
157            public long getFileVersionId() {
158                    return _fileVersionId;
159            }
160    
161            @Override
162            public long getGroupId() {
163                    return _cmisRepository.getGroupId();
164            }
165    
166            @Override
167            public String getIcon() {
168                    return DLUtil.getFileIcon(getExtension());
169            }
170    
171            @Override
172            public String getMimeType() {
173                    String mimeType = _document.getContentStreamMimeType();
174    
175                    if (Validator.isNotNull(mimeType)) {
176                            return mimeType;
177                    }
178    
179                    return MimeTypesUtil.getContentType(getTitle());
180            }
181    
182            @Override
183            public Object getModel() {
184                    return _document;
185            }
186    
187            @Override
188            public Class<?> getModelClass() {
189                    return DLFileVersion.class;
190            }
191    
192            @Override
193            public String getModelClassName() {
194                    return DLFileVersion.class.getName();
195            }
196    
197            @Override
198            public Date getModifiedDate() {
199                    Calendar modificationDate = _document.getLastModificationDate();
200    
201                    return modificationDate.getTime();
202            }
203    
204            @Override
205            public long getPrimaryKey() {
206                    return _fileVersionId;
207            }
208    
209            @Override
210            public Serializable getPrimaryKeyObj() {
211                    return getPrimaryKey();
212            }
213    
214            @Override
215            public long getRepositoryId() {
216                    return _cmisRepository.getRepositoryId();
217            }
218    
219            @Override
220            public long getSize() {
221                    return _document.getContentStreamLength();
222            }
223    
224            @Override
225            public int getStatus() {
226                    return 0;
227            }
228    
229            @Override
230            public long getStatusByUserId() {
231                    return 0;
232            }
233    
234            @Override
235            public String getStatusByUserName() {
236                    return null;
237            }
238    
239            @Override
240            public String getStatusByUserUuid() {
241                    return null;
242            }
243    
244            @Override
245            public Date getStatusDate() {
246                    return getModifiedDate();
247            }
248    
249            @Override
250            public String getTitle() {
251                    return _document.getName();
252            }
253    
254            @Override
255            public long getUserId() {
256                    try {
257                            return UserLocalServiceUtil.getDefaultUserId(getCompanyId());
258                    }
259                    catch (Exception e) {
260                            return 0;
261                    }
262            }
263    
264            @Override
265            public String getUserName() {
266                    return _document.getCreatedBy();
267            }
268    
269            @Override
270            public String getUserUuid() {
271                    try {
272                            User user = UserLocalServiceUtil.getDefaultUser(getCompanyId());
273    
274                            return user.getUserUuid();
275                    }
276                    catch (Exception e) {
277                            return StringPool.BLANK;
278                    }
279            }
280    
281            @Override
282            public String getUuid() {
283                    return _uuid;
284            }
285    
286            @Override
287            public String getVersion() {
288                    return GetterUtil.getString(_document.getVersionLabel());
289            }
290    
291            @Override
292            public boolean isApproved() {
293                    return false;
294            }
295    
296            @Override
297            public boolean isDefaultRepository() {
298                    return false;
299            }
300    
301            @Override
302            public boolean isDraft() {
303                    return false;
304            }
305    
306            @Override
307            public boolean isEscapedModel() {
308                    return false;
309            }
310    
311            @Override
312            public boolean isExpired() {
313                    return false;
314            }
315    
316            @Override
317            public boolean isPending() {
318                    return false;
319            }
320    
321            @Override
322            public void setCompanyId(long companyId) {
323                    _cmisRepository.setCompanyId(companyId);
324            }
325    
326            @Override
327            public void setCreateDate(Date date) {
328            }
329    
330            public void setFileVersionId(long fileVersionId) {
331                    _fileVersionId = fileVersionId;
332            }
333    
334            @Override
335            public void setGroupId(long groupId) {
336                    _cmisRepository.setGroupId(groupId);
337            }
338    
339            @Override
340            public void setModifiedDate(Date date) {
341            }
342    
343            public void setPrimaryKey(long primaryKey) {
344                    setFileVersionId(primaryKey);
345            }
346    
347            @Override
348            public void setPrimaryKeyObj(Serializable primaryKeyObj) {
349                    setPrimaryKey(((Long)primaryKeyObj).longValue());
350            }
351    
352            @Override
353            public void setUserId(long userId) {
354            }
355    
356            @Override
357            public void setUserName(String userName) {
358            }
359    
360            @Override
361            public void setUserUuid(String userUuid) {
362            }
363    
364            @Override
365            public FileVersion toEscapedModel() {
366                    return this;
367            }
368    
369            @Override
370            public FileVersion toUnescapedModel() {
371                    return this;
372            }
373    
374            @Override
375            protected CMISRepository getCmisRepository() {
376                    return _cmisRepository;
377            }
378    
379            private static Log _log = LogFactoryUtil.getLog(CMISFileVersion.class);
380    
381            private CMISRepository _cmisRepository;
382            private Document _document;
383            private long _fileVersionId;
384            private String _uuid;
385    
386    }