001    /**
002     * Copyright (c) 2000-2012 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.portlet.documentlibrary.model.impl;
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.util.FileUtil;
022    import com.liferay.portal.kernel.util.GetterUtil;
023    import com.liferay.portal.kernel.util.StringBundler;
024    import com.liferay.portal.kernel.util.StringPool;
025    import com.liferay.portal.kernel.util.UnicodeProperties;
026    import com.liferay.portal.model.Lock;
027    import com.liferay.portal.service.LockLocalServiceUtil;
028    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
029    import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
030    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
031    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
032    import com.liferay.portlet.documentlibrary.model.DLFolder;
033    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
034    import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
035    import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil;
036    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
037    import com.liferay.portlet.documentlibrary.service.DLFileVersionLocalServiceUtil;
038    import com.liferay.portlet.documentlibrary.service.DLFileVersionServiceUtil;
039    import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
040    import com.liferay.portlet.documentlibrary.util.DLUtil;
041    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
042    import com.liferay.portlet.dynamicdatamapping.storage.Fields;
043    import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
044    import com.liferay.portlet.expando.model.ExpandoBridge;
045    
046    import java.io.IOException;
047    import java.io.InputStream;
048    
049    import java.util.HashMap;
050    import java.util.Iterator;
051    import java.util.List;
052    import java.util.Map;
053    
054    /**
055     * @author Brian Wing Shun Chan
056     * @author Alexander Chow
057     */
058    public class DLFileEntryImpl extends DLFileEntryBaseImpl {
059    
060            public DLFileEntryImpl() {
061            }
062    
063            public InputStream getContentStream()
064                    throws PortalException, SystemException {
065    
066                    return getContentStream(getVersion());
067            }
068    
069            public InputStream getContentStream(String version)
070                    throws PortalException, SystemException {
071    
072                    return DLFileEntryServiceUtil.getFileAsStream(
073                            getFileEntryId(), version);
074            }
075    
076            public long getDataRepositoryId() {
077                    return DLFolderConstants.getDataRepositoryId(
078                            getGroupId(), getFolderId());
079            }
080    
081            @Override
082            public ExpandoBridge getExpandoBridge() {
083                    try {
084                            DLFileVersion dlFileVersion = getFileVersion();
085    
086                            return dlFileVersion.getExpandoBridge();
087                    }
088                    catch (Exception e) {
089                            _log.error(e, e);
090                    }
091    
092                    return null;
093            }
094    
095            @Override
096            public String getExtraSettings() {
097                    if (_extraSettingsProperties == null) {
098                            return super.getExtraSettings();
099                    }
100                    else {
101                            return _extraSettingsProperties.toString();
102                    }
103            }
104    
105            public UnicodeProperties getExtraSettingsProperties() {
106                    if (_extraSettingsProperties == null) {
107                            _extraSettingsProperties = new UnicodeProperties(true);
108    
109                            try {
110                                    _extraSettingsProperties.load(super.getExtraSettings());
111                            }
112                            catch (IOException ioe) {
113                                    _log.error(ioe, ioe);
114                            }
115                    }
116    
117                    return _extraSettingsProperties;
118            }
119    
120            public Map<String, Fields> getFieldsMap(long fileVersionId)
121                    throws PortalException, SystemException {
122    
123                    Map<String, Fields> fieldsMap = new HashMap<String, Fields>();
124    
125                    DLFileVersion dlFileVersion =
126                            DLFileVersionLocalServiceUtil.getFileVersion(fileVersionId);
127    
128                    long fileEntryTypeId = dlFileVersion.getFileEntryTypeId();
129    
130                    if (fileEntryTypeId <= 0) {
131                            return fieldsMap;
132                    }
133    
134                    DLFileEntryType dlFileEntryType =
135                            DLFileEntryTypeLocalServiceUtil.getFileEntryType(fileEntryTypeId);
136    
137                    List<DDMStructure> ddmStructures = dlFileEntryType.getDDMStructures();
138    
139                    for (DDMStructure ddmStructure : ddmStructures) {
140                            DLFileEntryMetadata dlFileEntryMetadata =
141                                    DLFileEntryMetadataLocalServiceUtil.getFileEntryMetadata(
142                                            ddmStructure.getStructureId(), fileVersionId);
143    
144                            Fields fields = StorageEngineUtil.getFields(
145                                    dlFileEntryMetadata.getDDMStorageId());
146    
147                            fieldsMap.put(ddmStructure.getStructureKey(), fields);
148                    }
149    
150                    return fieldsMap;
151            }
152    
153            public DLFileVersion getFileVersion()
154                    throws PortalException, SystemException {
155    
156                    if (_dlFileVersion == null) {
157                            _dlFileVersion = getFileVersion(getVersion());
158                    }
159    
160                    return _dlFileVersion;
161            }
162    
163            public DLFileVersion getFileVersion(String version)
164                    throws PortalException, SystemException {
165    
166                    return DLFileVersionLocalServiceUtil.getFileVersion(
167                            getFileEntryId(), version);
168            }
169    
170            public List<DLFileVersion> getFileVersions(int status)
171                    throws SystemException {
172    
173                    return DLFileVersionLocalServiceUtil.getFileVersions(
174                            getFileEntryId(), status);
175            }
176    
177            public DLFolder getFolder() {
178                    DLFolder dlFolder = null;
179    
180                    if (getFolderId() > 0) {
181                            try {
182                                    dlFolder = DLFolderLocalServiceUtil.getFolder(getFolderId());
183                            }
184                            catch (Exception e) {
185                                    dlFolder = new DLFolderImpl();
186    
187                                    _log.error(e, e);
188                            }
189                    }
190                    else {
191                            dlFolder = new DLFolderImpl();
192                    }
193    
194                    return dlFolder;
195            }
196    
197            public String getIcon() {
198                    return DLUtil.getFileIcon(getExtension());
199            }
200    
201            public DLFileVersion getLatestFileVersion(boolean trusted)
202                    throws PortalException, SystemException {
203    
204                    if (trusted) {
205                            return DLFileVersionLocalServiceUtil.getLatestFileVersion(
206                                    getFileEntryId(), true);
207                    }
208                    else {
209                            return DLFileVersionServiceUtil.getLatestFileVersion(
210                                    getFileEntryId());
211                    }
212            }
213    
214            public Lock getLock() {
215                    try {
216                            return LockLocalServiceUtil.getLock(
217                                    DLFileEntry.class.getName(), getFileEntryId());
218                    }
219                    catch (Exception e) {
220                    }
221    
222                    return null;
223            }
224    
225            public String getLuceneProperties() {
226                    UnicodeProperties extraSettingsProps = getExtraSettingsProperties();
227    
228                    Iterator<Map.Entry<String, String>> itr =
229                            extraSettingsProps.entrySet().iterator();
230    
231                    StringBundler sb = new StringBundler(
232                            extraSettingsProps.entrySet().size() + 4);
233    
234                    sb.append(FileUtil.stripExtension(getTitle()));
235                    sb.append(StringPool.SPACE);
236                    sb.append(getDescription());
237                    sb.append(StringPool.SPACE);
238    
239                    while (itr.hasNext()) {
240                            Map.Entry<String, String> entry = itr.next();
241    
242                            String value = GetterUtil.getString(entry.getValue());
243    
244                            sb.append(value);
245                    }
246    
247                    return sb.toString();
248            }
249    
250            public boolean hasLock() {
251                    try {
252                            return DLFileEntryServiceUtil.hasFileEntryLock(getFileEntryId());
253                    }
254                    catch (Exception e) {
255                    }
256    
257                    return false;
258            }
259    
260            public boolean isCheckedOut() {
261                    try {
262                            return DLFileEntryServiceUtil.isFileEntryCheckedOut(
263                                    getFileEntryId());
264                    }
265                    catch (Exception e) {
266                    }
267    
268                    return false;
269            }
270    
271            @Override
272            public void setExtraSettings(String extraSettings) {
273                    _extraSettingsProperties = null;
274    
275                    super.setExtraSettings(extraSettings);
276            }
277    
278            public void setExtraSettingsProperties(
279                    UnicodeProperties extraSettingsProperties) {
280    
281                    _extraSettingsProperties = extraSettingsProperties;
282    
283                    super.setExtraSettings(_extraSettingsProperties.toString());
284            }
285    
286            public void setFileVersion(DLFileVersion dlFileVersion) {
287                    _dlFileVersion = dlFileVersion;
288            }
289    
290            private static Log _log = LogFactoryUtil.getLog(DLFileEntryImpl.class);
291    
292            private DLFileVersion _dlFileVersion;
293            private UnicodeProperties _extraSettingsProperties;
294    
295    }