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