com.liferay.content.targeting.tools.CTDataFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.content.targeting.tools.CTDataFactory.java

Source

/**
 * Copyright (c) 2000-present 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.content.targeting.tools;

import com.liferay.content.targeting.model.CampaignModel;
import com.liferay.content.targeting.model.RuleInstance;
import com.liferay.content.targeting.model.RuleInstanceModel;
import com.liferay.content.targeting.model.UserSegment;
import com.liferay.content.targeting.model.UserSegmentModel;
import com.liferay.content.targeting.model.impl.CampaignModelImpl;
import com.liferay.content.targeting.model.impl.RuleInstanceModelImpl;
import com.liferay.content.targeting.model.impl.UserSegmentModelImpl;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.portlet.PortletClassLoaderUtil;
import com.liferay.portal.kernel.security.RandomUtil;
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.CompanyModel;
import com.liferay.portal.model.LayoutModel;
import com.liferay.portal.model.PortletConstants;
import com.liferay.portal.model.PortletPreferencesModel;
import com.liferay.portal.model.ResourcePermissionModel;
import com.liferay.portal.model.UserModel;
import com.liferay.portal.tools.samplesqlbuilder.DataFactory;
import com.liferay.portal.tools.samplesqlbuilder.SequentialUUID;
import com.liferay.portlet.PortletPreferencesFactory;
import com.liferay.portlet.PortletPreferencesFactoryImpl;
import com.liferay.portlet.PortletPreferencesImpl;
import com.liferay.portlet.asset.model.AssetCategoryModel;
import com.liferay.portlet.asset.model.AssetEntryModel;
import com.liferay.portlet.asset.model.AssetVocabularyModel;
import com.liferay.portlet.journal.model.JournalArticleModel;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.portlet.PortletPreferences;

/**
 * @author Eudaldo Alonso
 */
public class CTDataFactory extends DataFactory {

    public CTDataFactory(Properties properties) throws Exception {
        super(properties);

        _maxCampaignContentDisplayPageCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.campaign.content.display.page.count"));

        _maxCampaignContentDisplayPortletCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.campaign.content.display.portlet.count"));

        _maxCampaignContentDisplayQueryRuleCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.campaign.content.display.query.rule.count"));

        _maxCampaignCount = GetterUtil.getInteger(properties.getProperty("sample.sql.max.campaign.count"));

        _maxUserSegmentContentDisplayPageCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.user.segment.content.display.page.count"));

        _maxUserSegmentContentDisplayPortletCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.user.segment.content.display.portlet.count"));

        _maxUserSegmentContentDisplayQueryRuleCount = GetterUtil.getInteger(
                properties.getProperty("sample.sql.max.user.segment.content.display.query.rule." + "count"));

        _maxUserSegmentContentListPageCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.user.segment.content.list.page.count"));

        _maxUserSegmentContentListPortletCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.user.segment.content.list.portlet.count"));

        _maxUserSegmentCount = GetterUtil.getInteger(properties.getProperty("sample.sql.max.user.segment.count"));

        _maxUserSegmentRuleInstanceCount = GetterUtil
                .getInteger(properties.getProperty("sample.sql.max.user.segment.rule.instance.count"));
    }

    public List<AssetEntryModel> getAssetEntryModels() {
        return _assetEntryModels;
    }

    public long getCampaignUserSegmentId(int index) {
        if (index >= _userSegmentModels.size()) {
            return -1;
        }

        UserSegmentModel userSegmentModel = _userSegmentModels.get(index);

        return userSegmentModel.getUserSegmentId();
    }

    public int getMaxCampaignContentDisplayPageCount() {
        return _maxCampaignContentDisplayPageCount;
    }

    public int getMaxCampaignContentDisplayPortletCount() {
        return _maxCampaignContentDisplayPortletCount;
    }

    public int getMaxUserSegmentContentDisplayPageCount() {
        return _maxUserSegmentContentDisplayPageCount;
    }

    public int getMaxUserSegmentContentDisplayPortletCount() {
        return _maxUserSegmentContentDisplayPortletCount;
    }

    public int getMaxUserSegmentContentListPageCount() {
        return _maxUserSegmentContentListPageCount;
    }

    public int getMaxUserSegmentContentListPortletCount() {
        return _maxUserSegmentContentListPortletCount;
    }

    public String getPortletLayoutColumn(String portletIdPrefix, int count) {
        StringBundler sb = new StringBundler(3 * count);

        for (int i = 1; i <= count; i++) {
            sb.append(portletIdPrefix);
            sb.append(i);
            sb.append(StringPool.COMMA);
        }

        return sb.toString();
    }

    @Override
    public AssetEntryModel newAssetEntryModel(JournalArticleModel journalArticleModel) {

        AssetEntryModel assetEntryModel = super.newAssetEntryModel(journalArticleModel);

        _assetEntryModels.add(assetEntryModel);

        return assetEntryModel;
    }

    public PortletPreferencesModel newCampaignContentDisplayPortletPreferenceModels(long groupId, long plid,
            String portletId) throws Exception {

        PortletPreferences jxPortletPreferences = new PortletPreferencesImpl();

        jxPortletPreferences.setValue("assetEntryIdDefault", String.valueOf(getAssetEntryId()));
        jxPortletPreferences.setValue("contentDefaultValue", "true");
        jxPortletPreferences.setValue("showAssetTitle", "false");
        jxPortletPreferences.setValue("contentDefaultValue", "false");
        jxPortletPreferences.setValue("enableSocialBookmarks", "false");
        jxPortletPreferences.setValue("displayStyleGroupId", String.valueOf(groupId));
        jxPortletPreferences.setValue("displayStyle", "full-content");

        List<String> queryRuleIndexes = new ArrayList<String>(_maxCampaignContentDisplayQueryRuleCount);

        if (!_campaignModels.isEmpty()) {
            for (int i = 0; i < _maxCampaignContentDisplayQueryRuleCount; i++) {
                jxPortletPreferences.setValue("assetEntryId" + i, String.valueOf(getAssetEntryId()));

                int pos = RandomUtil.nextInt(_campaignModels.size());

                CampaignModel campaignModel = _campaignModels.get(pos);

                jxPortletPreferences.setValue("campaignId" + i, String.valueOf(campaignModel.getCampaignId()));

                queryRuleIndexes.add(String.valueOf(i));
            }
        }

        jxPortletPreferences.setValues("queryLogicIndexes",
                queryRuleIndexes.toArray(new String[queryRuleIndexes.size()]));

        return newPortletPreferencesModel(plid, portletId, _portletPreferencesFactory.toXML(jxPortletPreferences));
    }

    public List<CampaignModel> newCampaignModels(long groupId) throws Exception {

        _campaignModels = new ArrayList<CampaignModel>(_maxCampaignCount);

        for (int i = 0; i < _maxCampaignCount; i++) {
            _campaignModels.add(newCampaignModel(groupId, i));
        }

        return _campaignModels;
    }

    @Override
    public List<LayoutModel> newPublicLayoutModels(long groupId) {
        List<LayoutModel> layoutModels = super.newPublicLayoutModels(groupId);

        _visitedLayoutModel = newLayoutModel(groupId, "visited-page", StringPool.BLANK, StringPool.BLANK);

        layoutModels.add(_visitedLayoutModel);

        return layoutModels;
    }

    public List<ResourcePermissionModel> newResourcePermissionModels(CampaignModel campaignModel) {

        return newResourcePermissionModels(RuleInstance.class.getName(),
                String.valueOf(campaignModel.getCampaignId()), getUserId());
    }

    public List<ResourcePermissionModel> newResourcePermissionModels(RuleInstanceModel ruleInstanceModel) {

        return newResourcePermissionModels(RuleInstance.class.getName(),
                String.valueOf(ruleInstanceModel.getRuleInstanceId()), getUserId());
    }

    public List<ResourcePermissionModel> newResourcePermissionModels(UserSegmentModel userSegmentModel) {

        return newResourcePermissionModels(UserSegment.class.getName(),
                String.valueOf(userSegmentModel.getUserSegmentId()), getUserId());
    }

    public List<RuleInstanceModel> newRuleInstanceModels(long groupId, long userSegmentId) throws Exception {

        List<RuleInstanceModel> ruleInstanceModels = new ArrayList<RuleInstanceModel>(
                _maxUserSegmentRuleInstanceCount);

        for (int i = 0; i < _maxUserSegmentRuleInstanceCount; i++) {
            ruleInstanceModels.add(newRuleInstanceModel(groupId, userSegmentId));
        }

        return ruleInstanceModels;
    }

    public AssetCategoryModel newUserSegmentAssetCategoryModel(long groupId, long assetVocabularyId,
            UserSegmentModel userSegmentModel) {

        AssetCategoryModel assetCategoryModel = newAssetCategoryModel(groupId, _lastRightCategoryId,
                userSegmentModel.getName("en_US"), assetVocabularyId);

        _lastRightCategoryId += 2;

        return assetCategoryModel;
    }

    public AssetVocabularyModel newUserSegmentAssetVocabularyModel(long groupId) {

        return newAssetVocabularyModel(groupId, getUserId(), getUserName(), "User Segment");
    }

    public PortletPreferencesModel newUserSegmentContentDisplayPortletPreferenceModels(long groupId, long plid,
            String portletId) throws Exception {

        PortletPreferences jxPortletPreferences = new PortletPreferencesImpl();

        jxPortletPreferences.setValue("assetEntryIdDefault", String.valueOf(getAssetEntryId()));
        jxPortletPreferences.setValue("contentDefaultValue", "true");
        jxPortletPreferences.setValue("showAssetTitle", "false");
        jxPortletPreferences.setValue("contentDefaultValue", "false");
        jxPortletPreferences.setValue("enableSocialBookmarks", "false");
        jxPortletPreferences.setValue("displayStyleGroupId", String.valueOf(groupId));
        jxPortletPreferences.setValue("displayStyle", "full-content");

        List<String> queryRuleIndexes = new ArrayList<String>(_maxUserSegmentContentDisplayQueryRuleCount);

        if (!_userSegmentModels.isEmpty()) {
            for (int i = 0; i < _maxUserSegmentContentDisplayQueryRuleCount; i++) {

                int pos = RandomUtil.nextInt(_userSegmentModels.size());

                UserSegmentModel userSegmentModel = _userSegmentModels.get(pos);

                jxPortletPreferences.setValue("assetEntryId" + i, String.valueOf(getAssetEntryId()));
                jxPortletPreferences.setValue("queryContains" + i, "true");
                jxPortletPreferences.setValue("queryAndOperator" + i, "false");
                jxPortletPreferences.setValue("userSegmentAssetCategoryIds" + i,
                        String.valueOf(userSegmentModel.getAssetCategoryId()));

                queryRuleIndexes.add(String.valueOf(i));
            }
        }

        jxPortletPreferences.setValues("queryLogicIndexes",
                queryRuleIndexes.toArray(new String[queryRuleIndexes.size()]));

        return newPortletPreferencesModel(plid, portletId, _portletPreferencesFactory.toXML(jxPortletPreferences));
    }

    public PortletPreferencesModel newUserSegmentContentListPortletPreferenceModels(long plid, String portletId)
            throws Exception {

        return newPortletPreferencesModel(plid, portletId, PortletConstants.DEFAULT_PREFERENCES);
    }

    public List<UserSegmentModel> newUserSegmentModels(long groupId) throws Exception {

        initRuleInstanceModels(groupId);

        _userSegmentModels = new ArrayList<UserSegmentModel>(_maxUserSegmentCount);

        for (int i = 0; i < _maxUserSegmentCount; i++) {
            _userSegmentModels.add(newUserSegmentModel(groupId, i));
        }

        return _userSegmentModels;
    }

    public void setAssetCategoryToUserSegment(long assetCategoryId, int index) {
        UserSegmentModel userSegmentModel = _userSegmentModels.get(index);

        userSegmentModel.setAssetCategoryId(assetCategoryId);
    }

    protected long getAssetEntryId() {
        if (_assetEntryModels.isEmpty()) {
            return -1;
        }

        int pos = RandomUtil.nextInt(_assetEntryModels.size());

        AssetEntryModel assetEntryModel = _assetEntryModels.get(pos);

        return assetEntryModel.getEntryId();
    }

    protected long getCompanyId() {
        CompanyModel companyModel = getCompanyModel();

        return companyModel.getCompanyId();
    }

    protected long getUserId() {
        UserModel userModel = getSampleUserModel();

        return userModel.getUserId();
    }

    protected String getUserName() {
        UserModel userModel = getSampleUserModel();

        return userModel.getFirstName();
    }

    protected void initRuleInstanceModels(long groupId) {

        // Age Rule

        JSONObject jsonObj = JSONFactoryUtil.createJSONObject();

        jsonObj.put("youngerThan", 100);
        jsonObj.put("olderThan", 30);

        _ruleInstanceModels.add(newRuleInstanceModel("AgeRule", jsonObj.toString()));

        // Browser Rule

        _ruleInstanceModels.add(newRuleInstanceModel("BrowserRule", "Firefox"));

        // Gender Rule

        _ruleInstanceModels.add(newRuleInstanceModel("GenderRule", "male"));

        // Page Visited Rule

        _ruleInstanceModels
                .add(newRuleInstanceModel("PageVisitedRule", String.valueOf(_visitedLayoutModel.getPlid())));

        // Site Member Rule

        _ruleInstanceModels.add(newRuleInstanceModel("SiteMemberRule", String.valueOf(groupId)));

        // User Logged Rule

        _ruleInstanceModels.add(newRuleInstanceModel("UserLogged", StringPool.BLANK));
    }

    protected CampaignModel newCampaignModel(long groupId, int index) {
        setClassLoader();

        CampaignModel campaignModel = new CampaignModelImpl();

        campaignModel.setUuid(SequentialUUID.generate());
        campaignModel.setCampaignId(getCounterNext());
        campaignModel.setGroupId(groupId);
        campaignModel.setCompanyId(getCompanyId());
        campaignModel.setUserId(getUserId());
        campaignModel.setUserName(getUserName());

        campaignModel.setCreateDate(new Date());
        campaignModel.setModifiedDate(new Date());

        StringBundler sb = new StringBundler(5);

        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root ");
        sb.append("available-locales=\"en_US\" default-locale=\"en_US\">");
        sb.append("<Name language-id=\"en_US\">Campaign ");
        sb.append(index);
        sb.append("</Name></root>");

        campaignModel.setName(sb.toString());

        sb = new StringBundler(5);

        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root ");
        sb.append("available-locales=\"en_US\" default-locale=\"en_US\">");
        sb.append("<Description language-id=\"en_US\">Campaign ");
        sb.append(index);
        sb.append("</Description></root>");

        campaignModel.setDescription(sb.toString());

        Calendar startDate = Calendar.getInstance();
        Calendar endDate = Calendar.getInstance();

        startDate.add(Calendar.YEAR, -1);
        endDate.add(Calendar.YEAR, 1);

        campaignModel.setStartDate(startDate.getTime());
        campaignModel.setEndDate(endDate.getTime());

        campaignModel.setPriority(RandomUtil.nextInt(5));
        campaignModel.setActive(true);

        return campaignModel;
    }

    protected RuleInstanceModel newRuleInstanceModel(long groupId, long userSegmentId) {

        int pos = RandomUtil.nextInt(_ruleInstanceModels.size());

        RuleInstanceModel ruleInstanceModel = (RuleInstanceModel) _ruleInstanceModels.get(pos).clone();

        ruleInstanceModel.setUuid(SequentialUUID.generate());
        ruleInstanceModel.setRuleInstanceId(getCounterNext());
        ruleInstanceModel.setGroupId(groupId);
        ruleInstanceModel.setUserSegmentId(userSegmentId);

        return ruleInstanceModel;
    }

    protected RuleInstanceModel newRuleInstanceModel(String ruleKey, String typeSettings) {

        setClassLoader();

        RuleInstanceModel ruleInstanceModel = new RuleInstanceModelImpl();

        ruleInstanceModel.setCompanyId(getCompanyId());
        ruleInstanceModel.setUserId(getUserId());
        ruleInstanceModel.setUserName(getUserName());
        ruleInstanceModel.setCreateDate(new Date());
        ruleInstanceModel.setModifiedDate(new Date());
        ruleInstanceModel.setRuleKey(ruleKey);
        ruleInstanceModel.setTypeSettings(typeSettings);

        return ruleInstanceModel;
    }

    protected UserSegmentModel newUserSegmentModel(long groupId, int index) {
        setClassLoader();

        UserSegmentModel userSegmentModel = new UserSegmentModelImpl();

        userSegmentModel.setUuid(SequentialUUID.generate());
        userSegmentModel.setUserSegmentId(getCounterNext());
        userSegmentModel.setGroupId(groupId);
        userSegmentModel.setCompanyId(getCompanyId());
        userSegmentModel.setUserId(getUserId());
        userSegmentModel.setUserName(getUserName());

        userSegmentModel.setCreateDate(new Date());
        userSegmentModel.setModifiedDate(new Date());

        StringBundler sb = new StringBundler(5);

        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root ");
        sb.append("available-locales=\"en_US\" default-locale=\"en_US\">");
        sb.append("<Name language-id=\"en_US\">User Segment ");
        sb.append(index);
        sb.append("</Name></root>");

        userSegmentModel.setName(sb.toString());

        sb = new StringBundler(5);

        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root ");
        sb.append("available-locales=\"en_US\" default-locale=\"en_US\">");
        sb.append("<Description language-id=\"en_US\">User Segment ");
        sb.append(index);
        sb.append("</Description></root>");

        userSegmentModel.setDescription(sb.toString());

        return userSegmentModel;
    }

    protected void setClassLoader() {
        Thread currentThread = Thread.currentThread();

        PortletClassLoaderUtil.setClassLoader(currentThread.getContextClassLoader());
    }

    private static PortletPreferencesFactory _portletPreferencesFactory = new PortletPreferencesFactoryImpl();

    private List<AssetEntryModel> _assetEntryModels = new ArrayList<AssetEntryModel>();
    private List<CampaignModel> _campaignModels = new ArrayList<CampaignModel>();
    private long _lastRightCategoryId = 2;
    private int _maxCampaignContentDisplayPageCount;
    private int _maxCampaignContentDisplayPortletCount;
    private int _maxCampaignContentDisplayQueryRuleCount;
    private int _maxCampaignCount;
    private int _maxUserSegmentContentDisplayPageCount;
    private int _maxUserSegmentContentDisplayPortletCount;
    private int _maxUserSegmentContentDisplayQueryRuleCount;
    private int _maxUserSegmentContentListPageCount;
    private int _maxUserSegmentContentListPortletCount;
    private int _maxUserSegmentCount;
    private int _maxUserSegmentRuleInstanceCount;
    private List<RuleInstanceModel> _ruleInstanceModels = new ArrayList<RuleInstanceModel>();
    private List<UserSegmentModel> _userSegmentModels = new ArrayList<UserSegmentModel>();
    private LayoutModel _visitedLayoutModel;

}