com.liferay.portlet.social.service.impl.SocialActivitySettingLocalServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portlet.social.service.impl.SocialActivitySettingLocalServiceImpl.java

Source

/**
 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portlet.social.service.impl;

import com.liferay.portal.kernel.cache.MultiVMPoolUtil;
import com.liferay.portal.kernel.cache.PortalCache;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.model.Group;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.social.model.SocialActivityCounterDefinition;
import com.liferay.portlet.social.model.SocialActivityDefinition;
import com.liferay.portlet.social.model.SocialActivitySetting;
import com.liferay.portlet.social.model.SocialActivitySettingConstants;
import com.liferay.portlet.social.service.base.SocialActivitySettingLocalServiceBaseImpl;
import com.liferay.portlet.social.util.SocialConfigurationUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Zsolt Berentey
 */
public class SocialActivitySettingLocalServiceImpl extends SocialActivitySettingLocalServiceBaseImpl {

    public SocialActivityDefinition getActivityDefinition(long groupId, String className, int activityType)
            throws SystemException {

        String key = encodeKey(groupId, className, activityType);

        SocialActivityDefinition activityDefinition = (SocialActivityDefinition) _activityDefinitions.get(key);

        if (activityDefinition != null) {
            return activityDefinition;
        }

        SocialActivityDefinition defaultActivityDefinition = SocialConfigurationUtil
                .getActivityDefinition(className, activityType);

        if (defaultActivityDefinition == null) {
            return null;
        }

        activityDefinition = getActivityDefinition(groupId, className, activityType, defaultActivityDefinition);

        _activityDefinitions.put(key, activityDefinition);

        return activityDefinition;
    }

    public List<SocialActivityDefinition> getActivityDefinitions(long groupId, String className)
            throws SystemException {

        List<SocialActivityDefinition> activityDefinitions = new ArrayList<SocialActivityDefinition>();

        List<SocialActivityDefinition> defaultActivityDefinitions = SocialConfigurationUtil
                .getActivityDefinitions(className);

        for (SocialActivityDefinition defaultActivityDefinition : defaultActivityDefinitions) {

            SocialActivityDefinition activityDefinition = getActivityDefinition(groupId, className,
                    defaultActivityDefinition.getActivityType());

            activityDefinitions.add(activityDefinition);
        }

        return activityDefinitions;
    }

    public List<SocialActivitySetting> getActivitySettings(long groupId) throws SystemException {

        return socialActivitySettingPersistence.findByG_A(groupId, 0);
    }

    public boolean isEnabled(long groupId, long classNameId) throws SystemException {

        SocialActivitySetting activitySetting = socialActivitySettingPersistence.fetchByG_C_A_N(groupId,
                classNameId, 0, SocialActivitySettingConstants.NAME_ENABLED);

        if (activitySetting == null) {
            return false;
        }

        return GetterUtil.getBoolean(activitySetting.getValue());
    }

    public void updateActivitySetting(long groupId, String className, boolean enabled)
            throws PortalException, SystemException {

        long classNameId = PortalUtil.getClassNameId(className);

        SocialActivitySetting activitySetting = socialActivitySettingPersistence.fetchByG_C_A_N(groupId,
                classNameId, 0, SocialActivitySettingConstants.NAME_ENABLED);

        if (activitySetting == null) {
            Group group = groupLocalService.getGroup(groupId);

            long activitySettingId = counterLocalService.increment();

            activitySetting = socialActivitySettingPersistence.create(activitySettingId);

            activitySetting.setGroupId(groupId);
            activitySetting.setCompanyId(group.getCompanyId());
            activitySetting.setClassNameId(classNameId);
            activitySetting.setName(SocialActivitySettingConstants.NAME_ENABLED);
        }

        activitySetting.setValue(String.valueOf(enabled));

        socialActivitySettingPersistence.update(activitySetting, false);
    }

    public void updateActivitySetting(long groupId, String className, int activityType,
            SocialActivityCounterDefinition activityCounterDefinition) throws PortalException, SystemException {

        long classNameId = PortalUtil.getClassNameId(className);

        SocialActivityDefinition defaultActivityDefinition = SocialConfigurationUtil
                .getActivityDefinition(className, activityType);

        SocialActivityCounterDefinition defaultActivityCounterDefinition = defaultActivityDefinition
                .getActivityCounterDefinition(activityCounterDefinition.getName());

        SocialActivitySetting activitySetting = socialActivitySettingPersistence.fetchByG_C_A_N(groupId,
                classNameId, activityType, activityCounterDefinition.getName());

        if ((defaultActivityCounterDefinition != null)
                && defaultActivityCounterDefinition.equals(activityCounterDefinition)) {

            if (activitySetting != null) {
                socialActivitySettingPersistence.remove(activitySetting);
            }

            return;
        }

        if (activitySetting != null) {
            activitySetting.setValue(toJSON(activityCounterDefinition));
        } else {
            Group group = groupLocalService.getGroup(groupId);

            long activitySettingId = counterLocalService.increment();

            activitySetting = socialActivitySettingPersistence.create(activitySettingId);

            activitySetting.setGroupId(groupId);
            activitySetting.setCompanyId(group.getCompanyId());
            activitySetting.setClassNameId(classNameId);
            activitySetting.setActivityType(activityType);
            activitySetting.setName(activityCounterDefinition.getName());
            activitySetting.setValue(toJSON(activityCounterDefinition));
        }

        socialActivitySettingPersistence.update(activitySetting, false);

        String key = encodeKey(groupId, className, activityType);

        _activityDefinitions.remove(key);
    }

    public void updateActivitySettings(long groupId, String className, int activityType,
            List<SocialActivityCounterDefinition> activityCounterDefinitions)
            throws PortalException, SystemException {

        for (SocialActivityCounterDefinition activityCounterDefinition : activityCounterDefinitions) {

            updateActivitySetting(groupId, className, activityType, activityCounterDefinition);
        }
    }

    protected String encodeKey(long groupId, String className, int activityType) {

        StringBundler sb = new StringBundler(5);

        sb.append(groupId);
        sb.append(StringPool.POUND);
        sb.append(className);
        sb.append(StringPool.POUND);
        sb.append(activityType);

        return sb.toString();
    }

    protected SocialActivityDefinition getActivityDefinition(long groupId, String className, int activityType,
            SocialActivityDefinition defaultActivityDefinition) throws SystemException {

        SocialActivityDefinition activityDefinition = defaultActivityDefinition.clone();

        List<SocialActivitySetting> activitySettings = getActivitySettings(groupId, className,
                defaultActivityDefinition.getActivityType());

        for (SocialActivitySetting activitySetting : activitySettings) {
            String name = activitySetting.getName();

            if (name.equals(SocialActivitySettingConstants.NAME_ENABLED)) {
                activityDefinition.setEnabled(
                        GetterUtil.getBoolean(activitySetting.getValue(), defaultActivityDefinition.isEnabled()));
            } else if (name.equals(SocialActivitySettingConstants.NAME_LOG_ENABLED)) {

                activityDefinition.setLogActivity(GetterUtil.getBoolean(activitySetting.getValue(),
                        defaultActivityDefinition.isLogActivity()));
            } else {
                JSONObject jsonObject = null;

                try {
                    jsonObject = JSONFactoryUtil.createJSONObject(activitySetting.getValue());
                } catch (Exception e) {
                    jsonObject = JSONFactoryUtil.createJSONObject();
                }

                SocialActivityCounterDefinition activityCounterDefinition = activityDefinition
                        .getActivityCounterDefinition(name);

                if (activityCounterDefinition == null) {
                    activityCounterDefinition = new SocialActivityCounterDefinition();

                    activityCounterDefinition.setName(name);

                    activityDefinition.addCounter(activityCounterDefinition);
                }

                activityCounterDefinition.setEnabled(jsonObject.getBoolean("enabled"));
                activityCounterDefinition.setIncrement(jsonObject.getInt("value"));
                activityCounterDefinition.setLimitEnabled(jsonObject.getBoolean("limitEnabled"));
                activityCounterDefinition.setLimitPeriod(jsonObject.getInt("limitPeriod"));
                activityCounterDefinition.setLimitValue(jsonObject.getInt("limitValue"));
                activityCounterDefinition.setOwnerType(jsonObject.getInt("ownerType"));
            }
        }

        return activityDefinition;
    }

    protected List<SocialActivitySetting> getActivitySettings(long groupId, String className, int activityType)
            throws SystemException {

        long classNameId = PortalUtil.getClassNameId(className);

        List<SocialActivitySetting> activitySettings = socialActivitySettingPersistence.findByG_C_A(groupId,
                classNameId, activityType);

        return activitySettings;
    }

    protected String toJSON(SocialActivityCounterDefinition activityCounterDefinition) {

        JSONObject jsonObject = JSONFactoryUtil.createJSONObject();

        jsonObject.put("enabled", activityCounterDefinition.isEnabled());
        jsonObject.put("limitEnabled", activityCounterDefinition.isLimitEnabled());
        jsonObject.put("limitPeriod", activityCounterDefinition.getLimitPeriod());
        jsonObject.put("limitValue", activityCounterDefinition.getLimitValue());
        jsonObject.put("ownerType", activityCounterDefinition.getOwnerType());
        jsonObject.put("value", activityCounterDefinition.getIncrement());

        return jsonObject.toString();
    }

    private static PortalCache _activityDefinitions = MultiVMPoolUtil
            .getCache(SocialActivitySettingLocalServiceImpl.class.getName());

}