Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.suggest.service.subscription; import fr.paris.lutece.plugins.suggest.business.Category; import fr.paris.lutece.plugins.suggest.business.CategoryHome; import fr.paris.lutece.plugins.suggest.business.Suggest; import fr.paris.lutece.plugins.suggest.business.SuggestHome; import fr.paris.lutece.plugins.suggest.business.SuggestSubmit; import fr.paris.lutece.plugins.suggest.service.SuggestSubmitService; import fr.paris.lutece.plugins.suggest.service.SuggestPlugin; import fr.paris.lutece.plugins.subscribe.business.Subscription; import fr.paris.lutece.plugins.subscribe.business.SubscriptionFilter; import fr.paris.lutece.plugins.subscribe.service.ISubscriptionProviderService; import fr.paris.lutece.plugins.subscribe.service.SubscriptionService; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.plugin.PluginService; import fr.paris.lutece.portal.service.security.LuteceUser; import fr.paris.lutece.portal.service.spring.SpringContextService; import org.apache.commons.lang.StringUtils; import java.util.List; import java.util.Locale; /** * Subscription provider for suggest and suggest submit */ public class SuggestSubscriptionProviderService implements ISubscriptionProviderService { /** * Name of the bean of the SuggestSubscriptionProviderService */ public static final String BEAN_NAME = "suggest.suggestSubscriptionProviderService"; public static final String SUBSCRIPTION_SUGGEST = "suggest"; public static final String SUBSCRIPTION_SUGGEST_CATEGORY = "suggest_category"; public static final String SUBSCRIPTION_SUGGEST_SUBMIT = "suggest_submit"; private static final String SUBSCRIPTION_PROVIDER_NAME = "suggest.suggestSubscriptionProviderService"; private static final String MESSAGE_SUBSCRIBED_SUGGEST = "suggest.message.subscriptions.subscribedSuggest"; private static final String MESSAGE_SUBSCRIBED_SUGGEST_SUBMIT = "suggest.message.subscriptions.subscribedSuggestSubmit"; private static final String MESSAGE_SUBSCRIBED_SUGGEST_CATEGORY = "suggest.message.subscriptions.subscribedCategory"; private static SuggestSubscriptionProviderService _instance; /** * Returns the instance of the singleton * * @return The instance of the singleton */ public static SuggestSubscriptionProviderService getService() { if (_instance == null) { synchronized (SuggestSubscriptionProviderService.class) { _instance = SpringContextService.getBean(BEAN_NAME); } } return _instance; } /** * {@inheritDoc} */ @Override public String getProviderName() { return SUBSCRIPTION_PROVIDER_NAME; } /** * {@inheritDoc} */ @Override public String getSubscriptionHtmlDescription(LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource, Locale locale) { int nId = ((strIdSubscribedResource != null) && StringUtils.isNumeric(strIdSubscribedResource)) ? Integer.parseInt(strIdSubscribedResource) : 0; if (nId > 0) { if (StringUtils.equals(SUBSCRIPTION_SUGGEST, strSubscriptionKey)) { Suggest suggest = SuggestHome.findByPrimaryKey(nId, PluginService.getPlugin(SuggestPlugin.PLUGIN_NAME)); if (suggest != null) { Object[] params = { suggest.getTitle() }; return I18nService.getLocalizedString(MESSAGE_SUBSCRIBED_SUGGEST, params, locale); } } else if (StringUtils.equals(SUBSCRIPTION_SUGGEST_SUBMIT, strSubscriptionKey)) { SuggestSubmit suggestSubmit = SuggestSubmitService.getService().findByPrimaryKey(nId, false, PluginService.getPlugin(SuggestPlugin.PLUGIN_NAME)); if (suggestSubmit != null) { Object[] params = { suggestSubmit.getSuggestSubmitTitle() }; return I18nService.getLocalizedString(MESSAGE_SUBSCRIBED_SUGGEST_SUBMIT, params, locale); } } else if (StringUtils.equals(SUBSCRIPTION_SUGGEST_CATEGORY, strSubscriptionKey)) { Category category = CategoryHome.findByPrimaryKey(nId, PluginService.getPlugin(SuggestPlugin.PLUGIN_NAME)); if (category != null) { Object[] params = { category.getTitle() }; return I18nService.getLocalizedString(MESSAGE_SUBSCRIBED_SUGGEST_CATEGORY, params, locale); } } } return StringUtils.EMPTY; } /** * {@inheritDoc} */ @Override public boolean isSubscriptionRemovable(LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource) { // Subscriptions for suggests or suggest submits are always removable return true; } /** * {@inheritDoc} */ @Override public String getUrlModifySubscription(LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource) { //No subscription modification for suggest nor suggest submits return null; } /** * {@inheritDoc} */ @Override public void notifySubscriptionRemoval(Subscription subscription) { // Do nothing } /** * Remove a subscription of a user to a suggest * @param user The user to remove the subscription of * @param nIdSuggest The id of the suggest */ public void removeSuggestSubscription(LuteceUser user, int nIdSuggest) { removeSuggestSubmitSubscription(user, nIdSuggest, SUBSCRIPTION_SUGGEST); } /** * Remove a subscription of a user to a suggest category * @param user The user to remove the subscription of * @param nIdCategory The id of the suggest category */ public void removeSuggestCategorySubscription(LuteceUser user, int nIdCategory) { removeSuggestSubmitSubscription(user, nIdCategory, SUBSCRIPTION_SUGGEST_CATEGORY); } /** * Remove a subscription of a user to a suggest submit * @param user The user to remove the subscription of * @param nIdSuggestSubmit The id of the suggest submit */ public void removeSuggestSubmitSubscription(LuteceUser user, int nIdSuggestSubmit) { removeSuggestSubmitSubscription(user, nIdSuggestSubmit, SUBSCRIPTION_SUGGEST_SUBMIT); } /** * Remove a subscription to a suggest resource * @param user The user to remove the subscription of * @param nId The id of the subscribed resource * @param strSubscriptionKey The subscription key */ private void removeSuggestSubmitSubscription(LuteceUser user, int nId, String strSubscriptionKey) { SubscriptionFilter filter = new SubscriptionFilter(user.getName(), getProviderName(), strSubscriptionKey, Integer.toString(nId)); List<Subscription> listSubscription = SubscriptionService.getInstance().findByFilter(filter); if ((listSubscription != null) && (listSubscription.size() > 0)) { for (Subscription subscription : listSubscription) { SubscriptionService.getInstance().removeSubscription(subscription, false); } } } /** * Create a new subscription to a suggest * @param user The user to create a subscription of * @param nIdSuggest The id of the suggest to subscribe to */ public void createSuggestSubscription(LuteceUser user, int nIdSuggest) { if (!hasUserSubscribedToResource(user, nIdSuggest, SUBSCRIPTION_SUGGEST)) { createSubscription(user, nIdSuggest, SUBSCRIPTION_SUGGEST); } } /** * Create a new subscription to a suggest * @param user The user to create a subscription of * @param nIdSuggest The id of the suggest to subscribe to */ public void createSuggestCategorySubscription(LuteceUser user, int nIdSuggest) { if (!hasUserSubscribedToResource(user, nIdSuggest, SUBSCRIPTION_SUGGEST_CATEGORY)) { createSubscription(user, nIdSuggest, SUBSCRIPTION_SUGGEST_CATEGORY); } } /** * Create a new subscription to a suggest submit * @param user The user to create a subscription of * @param nIdSuggestSubmit The id of the suggest submit to subscribe to */ public void createSuggestSubmitSubscription(LuteceUser user, int nIdSuggestSubmit) { if (!hasUserSubscribedToResource(user, nIdSuggestSubmit, SUBSCRIPTION_SUGGEST_SUBMIT)) { createSubscription(user, nIdSuggestSubmit, SUBSCRIPTION_SUGGEST_SUBMIT); } } private void createSubscription(LuteceUser user, int nId, String strSubscriptionKey) { Subscription subscription = new Subscription(); subscription.setIdSubscribedResource(Integer.toString(nId)); subscription.setUserId(user.getName()); subscription.setSubscriptionKey(strSubscriptionKey); subscription.setSubscriptionProvider(getProviderName()); SubscriptionService.getInstance().createSubscription(subscription); } /** * Check if a user has subscribed to a suggest category * @param user The user * @param nIdSuggestCategory The id of the suggest category to check the * subscription to * @return True if the user has subscribed to the given suggest category, false * otherwise */ public boolean hasUserSubscribedToSuggestCategory(LuteceUser user, int nIdSuggestCategory) { return hasUserSubscribedToResource(user, nIdSuggestCategory, SUBSCRIPTION_SUGGEST_CATEGORY); } /** * Check if a user has subscribed to a suggest submit * @param user The user * @param nIdSuggestSubmit The id of the suggest submit to check the subscription * to * @return True if the user has subscribed to the given suggest submit, false * otherwise */ public boolean hasUserSubscribedToSuggestSubmit(LuteceUser user, int nIdSuggestSubmit) { return hasUserSubscribedToResource(user, nIdSuggestSubmit, SUBSCRIPTION_SUGGEST_SUBMIT); } /** * Check if a user has subscribed to a suggest * @param user The user * @param nIdSuggest The id of the suggest to check the subscription to * @return True if the user has subscribed to the given suggest, false * otherwise */ public boolean hasUserSubscribedToSuggest(LuteceUser user, int nIdSuggest) { return hasUserSubscribedToResource(user, nIdSuggest, SUBSCRIPTION_SUGGEST); } /** * Check if a user has subscribed to a resource * @param user The user * @param nId The id of the subscribed resource * @param strSubscriptionKey The subscription key * @return True if the user has subscribed to the resource, false otherwise */ private boolean hasUserSubscribedToResource(LuteceUser user, int nId, String strSubscriptionKey) { SubscriptionFilter filter = new SubscriptionFilter(user.getName(), getProviderName(), strSubscriptionKey, Integer.toString(nId)); List<Subscription> listSubscription = SubscriptionService.getInstance().findByFilter(filter); if ((listSubscription != null) && (listSubscription.size() > 0)) { return true; } return false; } @Override public String getSubscriptionHtmlDescriptionBis(LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource, Locale locale, String userSub) { // TODO is there a difference between getSubscriptionHtmlDescription and getSubscriptionHtmlDescriptionBis ? return getSubscriptionHtmlDescriptionBis(user, strSubscriptionKey, strIdSubscribedResource, locale, userSub); } }