/**
* 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.service.impl;
import com.liferay.content.targeting.DuplicateTrackingActionInstanceException;
import com.liferay.content.targeting.api.model.TrackingAction;
import com.liferay.content.targeting.api.model.TrackingActionsRegistry;
import com.liferay.content.targeting.model.TrackingActionInstance;
import com.liferay.content.targeting.service.base.TrackingActionInstanceLocalServiceBaseImpl;
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.osgi.util.service.ServiceTrackerUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.model.SystemEventConstants;
import com.liferay.portal.model.User;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.UserLocalServiceUtil;
import java.util.Date;
import java.util.List;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
/**
* The implementation of the tracking action instance local service.
*
* <p>
* All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link com.liferay.content.targeting.service.TrackingActionInstanceLocalService} interface.
*
* <p>
* This is a local service. Methods of this service will not have security checks based on the propagated JAAS credentials because this service can only be accessed from within the same VM.
* </p>
*
* @author Brian Wing Shun Chan
* @see com.liferay.content.targeting.service.base.TrackingActionInstanceLocalServiceBaseImpl
* @see com.liferay.content.targeting.service.TrackingActionInstanceLocalServiceUtil
*/
public class TrackingActionInstanceLocalServiceImpl
extends TrackingActionInstanceLocalServiceBaseImpl {
public TrackingActionInstanceLocalServiceImpl() {
Bundle bundle = FrameworkUtil.getBundle(getClass());
_trackingActionsRegistry = ServiceTrackerUtil.getService(
TrackingActionsRegistry.class, bundle.getBundleContext());
}
@Override
public TrackingActionInstance addTrackingActionInstance(
long userId, String trackingActionKey, long campaignId,
String alias, String referrerClassName, long referrerClassPK,
String elementId, String eventType, String typeSettings,
ServiceContext serviceContext)
throws PortalException, SystemException {
validate(0, campaignId, alias);
User user = UserLocalServiceUtil.getUser(userId);
Date now = new Date();
long trackingActionInstanceId = CounterLocalServiceUtil.increment();
TrackingActionInstance trackingActionInstance =
trackingActionInstancePersistence.create(trackingActionInstanceId);
trackingActionInstance.setUuid(serviceContext.getUuid());
trackingActionInstance.setGroupId(serviceContext.getScopeGroupId());
trackingActionInstance.setCompanyId(user.getCompanyId());
trackingActionInstance.setUserId(user.getUserId());
trackingActionInstance.setUserName(user.getFullName());
trackingActionInstance.setCreateDate(serviceContext.getCreateDate(now));
trackingActionInstance.setModifiedDate(
serviceContext.getModifiedDate(now));
trackingActionInstance.setTrackingActionKey(trackingActionKey);
trackingActionInstance.setCampaignId(campaignId);
trackingActionInstance.setAlias(alias);
trackingActionInstance.setReferrerClassName(referrerClassName);
trackingActionInstance.setReferrerClassPK(referrerClassPK);
trackingActionInstance.setElementId(elementId);
trackingActionInstance.setEventType(eventType);
trackingActionInstance.setTypeSettings(typeSettings);
trackingActionInstancePersistence.update(trackingActionInstance);
return trackingActionInstance;
}
@Indexable(type = IndexableType.DELETE)
@Override
public TrackingActionInstance deleteTrackingActionInstance(
long trackingActionInstanceId)
throws PortalException, SystemException {
TrackingActionInstance TrackingActionInstance =
trackingActionInstancePersistence.findByPrimaryKey(
trackingActionInstanceId);
return deleteTrackingActionInstance(TrackingActionInstance);
}
@Indexable(type = IndexableType.DELETE)
@Override
public TrackingActionInstance deleteTrackingActionInstance(
TrackingActionInstance trackingActionInstance)
throws PortalException, SystemException {
trackingActionInstancePersistence.remove(trackingActionInstance);
// System event
systemEventLocalService.addSystemEvent(
0, trackingActionInstance.getGroupId(),
TrackingActionInstance.class.getName(),
trackingActionInstance.getTrackingActionInstanceId(),
trackingActionInstance.getUuid(), null,
SystemEventConstants.TYPE_DELETE, StringPool.BLANK);
// Tracking action data
TrackingAction trackingAction =
_trackingActionsRegistry.getTrackingAction(
trackingActionInstance.getTrackingActionKey());
if (trackingAction != null) {
try {
trackingAction.deleteData(trackingActionInstance);
}
catch (Exception e) {
_log.error(
"Cannot delete custom data for tracking action " +
trackingAction.getName(LocaleUtil.getDefault()),
e);
}
}
return trackingActionInstance;
}
@Override
public TrackingActionInstance fetchTrackingActionInstance(
long campaignId, String alias)
throws SystemException {
return trackingActionInstancePersistence.fetchByC_A(campaignId, alias);
}
@Override
public List<TrackingActionInstance> getTrackingActionInstances(
long campaignId)
throws SystemException {
return trackingActionInstancePersistence.findByCampaignId(campaignId);
}
@Override
public List<TrackingActionInstance> getTrackingActionInstances(
long campaignId, String className, long classPK, String eventType)
throws SystemException {
return trackingActionInstancePersistence.findByC_R_R_E(
campaignId, className, classPK, eventType);
}
@Override
public List<TrackingActionInstance> getTrackingActionInstances(
long campaignId, String elementId, String eventType)
throws SystemException {
return trackingActionInstancePersistence.findByC_E_E(
campaignId, elementId, eventType);
}
@Override
public int getTrackingActionInstancesCount(long campaignId)
throws SystemException {
return trackingActionInstancePersistence.countByCampaignId(campaignId);
}
@Override
public TrackingActionInstance updateTrackingActionInstance(
long trackingActionInstanceId, String alias,
String referrerClassName, long referrerClassPK, String elementId,
String eventType, String typeSettings,
ServiceContext serviceContext)
throws PortalException, SystemException {
Date now = new Date();
TrackingActionInstance trackingActionInstance =
trackingActionInstancePersistence.findByPrimaryKey(
trackingActionInstanceId);
validate(
trackingActionInstanceId, trackingActionInstance.getCampaignId(),
alias);
trackingActionInstance.setModifiedDate(
serviceContext.getModifiedDate(now));
trackingActionInstance.setAlias(alias);
trackingActionInstance.setReferrerClassName(referrerClassName);
trackingActionInstance.setReferrerClassPK(referrerClassPK);
trackingActionInstance.setElementId(elementId);
trackingActionInstance.setEventType(eventType);
trackingActionInstance.setTypeSettings(typeSettings);
trackingActionInstancePersistence.update(trackingActionInstance);
return trackingActionInstance;
}
protected void validate(
long trackingInstanceId, long campaignId, String alias)
throws PortalException, SystemException {
TrackingActionInstance trackingActionInstance =
trackingActionInstancePersistence.fetchByC_A(campaignId, alias);
if ((trackingActionInstance != null) &&
(trackingActionInstance.getTrackingActionInstanceId() !=
trackingInstanceId)) {
throw new DuplicateTrackingActionInstanceException(
"A tracking action instance with the alias " + alias +
" already exists in campaign " + campaignId);
}
}
private static Log _log = LogFactoryUtil.getLog(
TrackingActionInstanceLocalServiceImpl.class);
private TrackingActionsRegistry _trackingActionsRegistry;
}