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