/** * 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; }