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.portlet.journal.model.impl;
016    
017    import com.liferay.portal.LocaleException;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.exception.SystemException;
020    import com.liferay.portal.kernel.lar.StagedModelType;
021    import com.liferay.portal.kernel.templateparser.TransformerListener;
022    import com.liferay.portal.kernel.util.LocaleThreadLocal;
023    import com.liferay.portal.kernel.util.LocaleUtil;
024    import com.liferay.portal.kernel.util.LocalizationUtil;
025    import com.liferay.portal.kernel.util.SetUtil;
026    import com.liferay.portal.kernel.util.StringBundler;
027    import com.liferay.portal.kernel.util.StringPool;
028    import com.liferay.portal.kernel.util.Validator;
029    import com.liferay.portal.kernel.workflow.WorkflowConstants;
030    import com.liferay.portal.model.Image;
031    import com.liferay.portal.service.ImageLocalServiceUtil;
032    import com.liferay.portal.theme.ThemeDisplay;
033    import com.liferay.portal.webserver.WebServerServletTokenUtil;
034    import com.liferay.portlet.journal.NoSuchFolderException;
035    import com.liferay.portlet.journal.model.JournalArticle;
036    import com.liferay.portlet.journal.model.JournalArticleResource;
037    import com.liferay.portlet.journal.model.JournalFolder;
038    import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
039    import com.liferay.portlet.journal.service.JournalArticleResourceLocalServiceUtil;
040    import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
041    import com.liferay.portlet.journal.util.LocaleTransformerListener;
042    
043    import java.util.Locale;
044    import java.util.Map;
045    import java.util.Set;
046    
047    /**
048     * @author Brian Wing Shun Chan
049     * @author Wesley Gong
050     */
051    public class JournalArticleImpl extends JournalArticleBaseImpl {
052    
053            public static String getContentByLocale(
054                    String content, boolean templateDriven, String languageId) {
055    
056                    TransformerListener transformerListener =
057                            new LocaleTransformerListener();
058    
059                    return transformerListener.onXml(content, languageId, null);
060            }
061    
062            public JournalArticleImpl() {
063            }
064    
065            @Override
066            public String buildTreePath() throws PortalException, SystemException {
067                    StringBundler sb = new StringBundler();
068    
069                    buildTreePath(sb, getFolder());
070    
071                    return sb.toString();
072            }
073    
074            @Override
075            public String getArticleImageURL(ThemeDisplay themeDisplay) {
076                    if (!isSmallImage()) {
077                            return null;
078                    }
079    
080                    if (Validator.isNotNull(getSmallImageURL())) {
081                            return getSmallImageURL();
082                    }
083    
084                    return
085                            themeDisplay.getPathImage() + "/journal/article?img_id=" +
086                                    getSmallImageId() + "&t=" +
087                                            WebServerServletTokenUtil.getToken(getSmallImageId());
088            }
089    
090            @Override
091            public JournalArticleResource getArticleResource()
092                    throws PortalException, SystemException {
093    
094                    return JournalArticleResourceLocalServiceUtil.getArticleResource(
095                            getResourcePrimKey());
096            }
097    
098            @Override
099            public String getArticleResourceUuid()
100                    throws PortalException, SystemException {
101    
102                    JournalArticleResource articleResource = getArticleResource();
103    
104                    return articleResource.getUuid();
105            }
106    
107            @Override
108            public String[] getAvailableLanguageIds() {
109                    Set<String> availableLanguageIds = SetUtil.fromArray(
110                            super.getAvailableLanguageIds());
111    
112                    String[] contentAvailableLanguageIds =
113                            LocalizationUtil.getAvailableLanguageIds(getContent());
114    
115                    for (String availableLanguageId : contentAvailableLanguageIds) {
116                            availableLanguageIds.add(availableLanguageId);
117                    }
118    
119                    return availableLanguageIds.toArray(
120                            new String[availableLanguageIds.size()]);
121            }
122    
123            /**
124             * @deprecated As of 6.2.0, replaced by {@link #getAvailableLanguageIds}
125             */
126            @Override
127            public String[] getAvailableLocales() {
128                    return getAvailableLanguageIds();
129            }
130    
131            @Override
132            public String getContentByLocale(String languageId) {
133                    return getContentByLocale(getContent(), isTemplateDriven(), languageId);
134            }
135    
136            @Override
137            public String getDefaultLanguageId() {
138                    String defaultLanguageId = super.getDefaultLanguageId();
139    
140                    if (isTemplateDriven() && Validator.isNull(defaultLanguageId)) {
141                            defaultLanguageId = LocaleUtil.toLanguageId(
142                                    LocaleUtil.getSiteDefault());
143                    }
144    
145                    return defaultLanguageId;
146            }
147    
148            /**
149             * @deprecated As of 6.2.0, replaced by {@link #getDefaultLanguageId}
150             */
151            @Override
152            public String getDefaultLocale() {
153                    return getDefaultLanguageId();
154            }
155    
156            @Override
157            public JournalFolder getFolder() throws PortalException, SystemException {
158                    if (getFolderId() <= 0) {
159                            return new JournalFolderImpl();
160                    }
161    
162                    return JournalFolderLocalServiceUtil.getFolder(getFolderId());
163            }
164    
165            @Override
166            public String getSmallImageType() throws PortalException, SystemException {
167                    if ((_smallImageType == null) && isSmallImage()) {
168                            Image smallImage = ImageLocalServiceUtil.getImage(
169                                    getSmallImageId());
170    
171                            _smallImageType = smallImage.getType();
172                    }
173    
174                    return _smallImageType;
175            }
176    
177            @Override
178            public StagedModelType getStagedModelType() {
179                    return new StagedModelType(JournalArticle.class);
180            }
181    
182            @Override
183            public Map<Locale, String> getTitleMap() {
184                    Locale defaultLocale = LocaleThreadLocal.getDefaultLocale();
185    
186                    try {
187                            Locale articleDefaultLocale = LocaleUtil.fromLanguageId(
188                                    getDefaultLanguageId());
189    
190                            LocaleThreadLocal.setDefaultLocale(articleDefaultLocale);
191    
192                            return super.getTitleMap();
193                    }
194                    finally {
195                            LocaleThreadLocal.setDefaultLocale(defaultLocale);
196                    }
197            }
198    
199            @Override
200            public JournalFolder getTrashContainer()
201                    throws PortalException, SystemException {
202    
203                    JournalFolder folder = null;
204    
205                    try {
206                            folder = getFolder();
207                    }
208                    catch (NoSuchFolderException nsfe) {
209                            return null;
210                    }
211    
212                    if (folder.isInTrash()) {
213                            return folder;
214                    }
215    
216                    return folder.getTrashContainer();
217            }
218    
219            @Override
220            public boolean hasApprovedVersion() throws SystemException {
221                    JournalArticle article =
222                            JournalArticleLocalServiceUtil.fetchLatestArticle(
223                                    getGroupId(), getArticleId(),
224                                    WorkflowConstants.STATUS_APPROVED);
225    
226                    if (article == null) {
227                            return false;
228                    }
229    
230                    return true;
231            }
232    
233            @Override
234            public boolean isInTrashContainer() {
235                    try {
236                            if (getTrashContainer() != null) {
237                                    return true;
238                            }
239                    }
240                    catch (Exception e) {
241                    }
242    
243                    return false;
244            }
245    
246            @Override
247            public boolean isTemplateDriven() {
248                    if (Validator.isNull(getStructureId())) {
249                            return false;
250                    }
251                    else {
252                            return true;
253                    }
254            }
255    
256            /**
257             * @param  defaultImportLocale the default imported locale
258             * @throws LocaleException if a locale exception occurred
259             */
260            @Override
261            public void prepareLocalizedFieldsForImport(Locale defaultImportLocale)
262                    throws LocaleException {
263            }
264    
265            @Override
266            public void setSmallImageType(String smallImageType) {
267                    _smallImageType = smallImageType;
268            }
269    
270            protected void buildTreePath(StringBundler sb, JournalFolder folder)
271                    throws PortalException, SystemException {
272    
273                    if (folder == null) {
274                            sb.append(StringPool.SLASH);
275                    }
276                    else {
277                            buildTreePath(sb, folder.getParentFolder());
278    
279                            sb.append(folder.getFolderId());
280                            sb.append(StringPool.SLASH);
281                    }
282            }
283    
284            private String _smallImageType;
285    
286    }