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