001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
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 int getFileVersionsCount(int status) throws SystemException {
178                    return DLFileVersionLocalServiceUtil.getFileVersionsCount(
179                            getFileEntryId(), status);
180            }
181    
182            public DLFolder getFolder() {
183                    DLFolder dlFolder = null;
184    
185                    if (getFolderId() > 0) {
186                            try {
187                                    dlFolder = DLFolderLocalServiceUtil.getFolder(getFolderId());
188                            }
189                            catch (Exception e) {
190                                    dlFolder = new DLFolderImpl();
191    
192                                    _log.error(e, e);
193                            }
194                    }
195                    else {
196                            dlFolder = new DLFolderImpl();
197                    }
198    
199                    return dlFolder;
200            }
201    
202            public String getIcon() {
203                    return DLUtil.getFileIcon(getExtension());
204            }
205    
206            public DLFileVersion getLatestFileVersion(boolean trusted)
207                    throws PortalException, SystemException {
208    
209                    if (trusted) {
210                            return DLFileVersionLocalServiceUtil.getLatestFileVersion(
211                                    getFileEntryId(), true);
212                    }
213                    else {
214                            return DLFileVersionServiceUtil.getLatestFileVersion(
215                                    getFileEntryId());
216                    }
217            }
218    
219            public Lock getLock() {
220                    try {
221                            return LockLocalServiceUtil.getLock(
222                                    DLFileEntry.class.getName(), getFileEntryId());
223                    }
224                    catch (Exception e) {
225                    }
226    
227                    return null;
228            }
229    
230            public String getLuceneProperties() {
231                    UnicodeProperties extraSettingsProps = getExtraSettingsProperties();
232    
233                    Iterator<Map.Entry<String, String>> itr =
234                            extraSettingsProps.entrySet().iterator();
235    
236                    StringBundler sb = new StringBundler(
237                            extraSettingsProps.entrySet().size() + 4);
238    
239                    sb.append(FileUtil.stripExtension(getTitle()));
240                    sb.append(StringPool.SPACE);
241                    sb.append(getDescription());
242                    sb.append(StringPool.SPACE);
243    
244                    while (itr.hasNext()) {
245                            Map.Entry<String, String> entry = itr.next();
246    
247                            String value = GetterUtil.getString(entry.getValue());
248    
249                            sb.append(value);
250                    }
251    
252                    return sb.toString();
253            }
254    
255            public boolean hasLock() {
256                    try {
257                            return DLFileEntryServiceUtil.hasFileEntryLock(getFileEntryId());
258                    }
259                    catch (Exception e) {
260                    }
261    
262                    return false;
263            }
264    
265            public boolean isCheckedOut() {
266                    try {
267                            return DLFileEntryServiceUtil.isFileEntryCheckedOut(
268                                    getFileEntryId());
269                    }
270                    catch (Exception e) {
271                    }
272    
273                    return false;
274            }
275    
276            @Override
277            public void setExtraSettings(String extraSettings) {
278                    _extraSettingsProperties = null;
279    
280                    super.setExtraSettings(extraSettings);
281            }
282    
283            public void setExtraSettingsProperties(
284                    UnicodeProperties extraSettingsProperties) {
285    
286                    _extraSettingsProperties = extraSettingsProperties;
287    
288                    super.setExtraSettings(_extraSettingsProperties.toString());
289            }
290    
291            public void setFileVersion(DLFileVersion dlFileVersion) {
292                    _dlFileVersion = dlFileVersion;
293            }
294    
295            private static Log _log = LogFactoryUtil.getLog(DLFileEntryImpl.class);
296    
297            private DLFileVersion _dlFileVersion;
298            private UnicodeProperties _extraSettingsProperties;
299    
300    }