001    /**
002     * Copyright (c) 2000-present 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.messageboards;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.settings.FallbackKeys;
019    import com.liferay.portal.kernel.settings.GroupServiceSettingsLocator;
020    import com.liferay.portal.kernel.settings.LocalizedValuesMap;
021    import com.liferay.portal.kernel.settings.ParameterMapSettings;
022    import com.liferay.portal.kernel.settings.Settings;
023    import com.liferay.portal.kernel.settings.SettingsFactoryUtil;
024    import com.liferay.portal.kernel.settings.TypedSettings;
025    import com.liferay.portal.kernel.util.LocalizationUtil;
026    import com.liferay.portal.kernel.util.PropsKeys;
027    import com.liferay.portal.kernel.util.RSSUtil;
028    import com.liferay.portal.util.PortalUtil;
029    import com.liferay.portlet.messageboards.constants.MBConstants;
030    import com.liferay.portlet.messageboards.util.MBUtil;
031    
032    import java.util.Map;
033    
034    /**
035     * @author Jorge Ferrer
036     */
037    @Settings.Config(settingsIds = MBConstants.SERVICE_NAME)
038    public class MBGroupServiceSettings {
039    
040            public static final String[] ALL_KEYS = {};
041    
042            public static MBGroupServiceSettings getInstance(long groupId)
043                    throws PortalException {
044    
045                    Settings settings = SettingsFactoryUtil.getSettings(
046                            new GroupServiceSettingsLocator(groupId, MBConstants.SERVICE_NAME));
047    
048                    return new MBGroupServiceSettings(settings);
049            }
050    
051            public static MBGroupServiceSettings getInstance(
052                            long groupId, Map<String, String[]> parameterMap)
053                    throws PortalException {
054    
055                    Settings settings = SettingsFactoryUtil.getSettings(
056                            new GroupServiceSettingsLocator(groupId, MBConstants.SERVICE_NAME));
057    
058                    ParameterMapSettings parameterMapSettings = new ParameterMapSettings(
059                            parameterMap, settings);
060    
061                    return new MBGroupServiceSettings(parameterMapSettings);
062            }
063    
064            public MBGroupServiceSettings(Settings settings) {
065                    _typedSettings = new TypedSettings(settings);
066            }
067    
068            public String getEmailFromAddress() {
069                    return _typedSettings.getValue("emailFromAddress");
070            }
071    
072            public String getEmailFromName() {
073                    return _typedSettings.getValue("emailFromName");
074            }
075    
076            public LocalizedValuesMap getEmailMessageAddedBody() {
077                    return _typedSettings.getLocalizedValuesMap("emailMessageAddedBody");
078            }
079    
080            public String getEmailMessageAddedBodyXml() {
081                    return LocalizationUtil.getXml(
082                            getEmailMessageAddedBody(), "emailMessageAddedBody");
083            }
084    
085            public LocalizedValuesMap getEmailMessageAddedSubject() {
086                    return _typedSettings.getLocalizedValuesMap("emailMessageAddedSubject");
087            }
088    
089            public String getEmailMessageAddedSubjectXml() {
090                    return LocalizationUtil.getXml(
091                            getEmailMessageAddedSubject(), "emailMessageAddedSubject");
092            }
093    
094            public LocalizedValuesMap getEmailMessageUpdatedBody() {
095                    return _typedSettings.getLocalizedValuesMap("emailMessageUpdatedBody");
096            }
097    
098            public String getEmailMessageUpdatedBodyXml() {
099                    return LocalizationUtil.getXml(
100                            getEmailMessageUpdatedBody(), "emailMessageUpdatedBody");
101            }
102    
103            public LocalizedValuesMap getEmailMessageUpdatedSubject() {
104                    return _typedSettings.getLocalizedValuesMap(
105                            "emailMessageUpdatedSubject");
106            }
107    
108            public String getEmailMessageUpdatedSubjectXml() {
109                    return LocalizationUtil.getXml(
110                            getEmailMessageUpdatedSubject(), "emailMessageUpdatedSubject");
111            }
112    
113            public String getMessageFormat() {
114                    String messageFormat = _typedSettings.getValue("messageFormat");
115    
116                    if (MBUtil.isValidMessageFormat(messageFormat)) {
117                            return messageFormat;
118                    }
119    
120                    return "html";
121            }
122    
123            public String[] getPriorities(String currentLanguageId) {
124                    return LocalizationUtil.getSettingsValues(
125                            _typedSettings.getWrappedSettings(), "priorities",
126                            currentLanguageId);
127            }
128    
129            public String[] getRanks(String languageId) {
130                    return LocalizationUtil.getSettingsValues(
131                            _typedSettings.getWrappedSettings(), "ranks", languageId);
132            }
133    
134            public String getRecentPostsDateOffset() {
135                    return _typedSettings.getValue("recentPostsDateOffset");
136            }
137    
138            @Settings.Property(name = "rssDelta")
139            public int getRSSDelta() {
140                    return _typedSettings.getIntegerValue("rssDelta");
141            }
142    
143            @Settings.Property(name = "rssDisplayStyle")
144            public String getRSSDisplayStyle() {
145                    return _typedSettings.getValue(
146                            "rssDisplayStyle", RSSUtil.DISPLAY_STYLE_FULL_CONTENT);
147            }
148    
149            @Settings.Property(name = "rssFeedType")
150            public String getRSSFeedType() {
151                    return _typedSettings.getValue(
152                            "rssFeedType", RSSUtil.getFeedType(RSSUtil.ATOM, 1.0));
153            }
154    
155            public boolean isAllowAnonymousPosting() {
156                    return _typedSettings.getBooleanValue("allowAnonymousPosting");
157            }
158    
159            public boolean isEmailHtmlFormat() {
160                    return _typedSettings.getBooleanValue("emailHtmlFormat");
161            }
162    
163            public boolean isEmailMessageAddedEnabled() {
164                    return _typedSettings.getBooleanValue("emailMessageAddedEnabled");
165            }
166    
167            public boolean isEmailMessageUpdatedEnabled() {
168                    return _typedSettings.getBooleanValue("emailMessageUpdatedEnabled");
169            }
170    
171            public boolean isEnableFlags() {
172                    return _typedSettings.getBooleanValue("enableFlags");
173            }
174    
175            public boolean isEnableRatings() {
176                    return _typedSettings.getBooleanValue("enableRatings");
177            }
178    
179            @Settings.Property(name = "enableRss")
180            public boolean isEnableRSS() {
181                    if (!PortalUtil.isRSSFeedsEnabled()) {
182                            return false;
183                    }
184    
185                    return _typedSettings.getBooleanValue("enableRss");
186            }
187    
188            public boolean isSubscribeByDefault() {
189                    return _typedSettings.getBooleanValue("subscribeByDefault");
190            }
191    
192            public boolean isThreadAsQuestionByDefault() {
193                    return _typedSettings.getBooleanValue("threadAsQuestionByDefault");
194            }
195    
196            private static FallbackKeys _getFallbackKeys() {
197                    FallbackKeys fallbackKeys = new FallbackKeys();
198    
199                    fallbackKeys.add(
200                            "allowAnonymousPosting",
201                            PropsKeys.MESSAGE_BOARDS_ANONYMOUS_POSTING_ENABLED);
202                    fallbackKeys.add(
203                            "emailFromAddress", PropsKeys.MESSAGE_BOARDS_EMAIL_FROM_ADDRESS,
204                            PropsKeys.ADMIN_EMAIL_FROM_ADDRESS);
205                    fallbackKeys.add(
206                            "emailFromName", PropsKeys.MESSAGE_BOARDS_EMAIL_FROM_NAME,
207                            PropsKeys.ADMIN_EMAIL_FROM_NAME);
208                    fallbackKeys.add(
209                            "emailHtmlFormat", PropsKeys.MESSAGE_BOARDS_EMAIL_HTML_FORMAT);
210                    fallbackKeys.add(
211                            "emailMessageAddedBody",
212                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_BODY);
213                    fallbackKeys.add(
214                            "emailMessageAddedEnabled",
215                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_ENABLED);
216                    fallbackKeys.add(
217                            "emailMessageAddedSubject",
218                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_ADDED_SUBJECT);
219                    fallbackKeys.add(
220                            "emailMessageUpdatedBody",
221                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_BODY);
222                    fallbackKeys.add(
223                            "emailMessageUpdatedEnabled",
224                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_ENABLED);
225                    fallbackKeys.add(
226                            "emailMessageUpdatedSubject",
227                            PropsKeys.MESSAGE_BOARDS_EMAIL_MESSAGE_UPDATED_SUBJECT);
228                    fallbackKeys.add("enableFlags", PropsKeys.MESSAGE_BOARDS_FLAGS_ENABLED);
229                    fallbackKeys.add(
230                            "enableRatings", PropsKeys.MESSAGE_BOARDS_RATINGS_ENABLED);
231                    fallbackKeys.add("enableRss", PropsKeys.MESSAGE_BOARDS_RSS_ENABLED);
232                    fallbackKeys.add(
233                            "messageFormat", PropsKeys.MESSAGE_BOARDS_MESSAGE_FORMATS_DEFAULT);
234                    fallbackKeys.add(
235                            "priorities", PropsKeys.MESSAGE_BOARDS_THREAD_PRIORITIES);
236                    fallbackKeys.add("ranks", PropsKeys.MESSAGE_BOARDS_USER_RANKS);
237                    fallbackKeys.add(
238                            "recentPostsDateOffset",
239                            PropsKeys.MESSAGE_BOARDS_RECENT_POSTS_DATE_OFFSET);
240                    fallbackKeys.add(
241                            "rssDelta", PropsKeys.SEARCH_CONTAINER_PAGE_DEFAULT_DELTA);
242                    fallbackKeys.add(
243                            "rssDisplayStyle", PropsKeys.RSS_FEED_DISPLAY_STYLE_DEFAULT);
244                    fallbackKeys.add("rssFeedType", PropsKeys.RSS_FEED_TYPE_DEFAULT);
245                    fallbackKeys.add(
246                            "subscribeByDefault",
247                            PropsKeys.MESSAGE_BOARDS_SUBSCRIBE_BY_DEFAULT);
248                    fallbackKeys.add(
249                            "threadAsQuestionByDefault",
250                            PropsKeys.MESSAGE_BOARDS_THREAD_AS_QUESTION_BY_DEFAULT);
251    
252                    return fallbackKeys;
253            }
254    
255            static {
256                    SettingsFactoryUtil.registerSettingsMetadata(
257                            MBGroupServiceSettings.class, null, _getFallbackKeys());
258            }
259    
260            private final TypedSettings _typedSettings;
261    
262    }