001
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
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
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
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
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 }