/**
* 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.portal.kernel.notifications;
import aQute.bnd.annotation.ProviderType;
import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil;
import com.liferay.asset.kernel.model.AssetRenderer;
import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.model.UserNotificationEvent;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.UserNotificationEventLocalServiceUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
/**
* @author Brian Wing Shun Chan
* @author Sergio González
*/
@ProviderType
public abstract class BaseModelUserNotificationHandler
extends BaseUserNotificationHandler {
protected AssetRenderer<?> getAssetRenderer(JSONObject jsonObject) {
String className = jsonObject.getString("className");
long classPK = jsonObject.getLong("classPK");
return getAssetRenderer(className, classPK);
}
protected AssetRenderer<?> getAssetRenderer(
String className, long classPK) {
AssetRendererFactory<?> assetRendererFactory =
AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
className);
if (assetRendererFactory == null) {
return null;
}
AssetRenderer<?> assetRenderer = null;
try {
assetRenderer = assetRendererFactory.getAssetRenderer(classPK);
}
catch (Exception e) {
}
return assetRenderer;
}
@Override
protected String getBody(
UserNotificationEvent userNotificationEvent,
ServiceContext serviceContext)
throws Exception {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
userNotificationEvent.getPayload());
AssetRenderer<?> assetRenderer = getAssetRenderer(jsonObject);
if (assetRenderer == null) {
UserNotificationEventLocalServiceUtil.deleteUserNotificationEvent(
userNotificationEvent.getUserNotificationEventId());
return null;
}
return StringUtil.replace(
getBodyTemplate(), new String[] {"[$BODY$]", "[$TITLE$]"},
new String[] {
HtmlUtil.escape(
StringUtil.shorten(getBodyContent(jsonObject), 70)),
getTitle(jsonObject, assetRenderer, serviceContext)
});
}
protected String getBodyContent(JSONObject jsonObject) {
return jsonObject.getString("entryTitle");
}
protected String getFormattedMessage(
JSONObject jsonObject, ServiceContext serviceContext, String message,
String typeName) {
return LanguageUtil.format(
serviceContext.getLocale(), message,
new String[] {
HtmlUtil.escape(
PortalUtil.getUserName(
jsonObject.getLong("userId"), StringPool.BLANK)),
StringUtil.toLowerCase(HtmlUtil.escape(typeName))
},
false);
}
@Override
protected String getLink(
UserNotificationEvent userNotificationEvent,
ServiceContext serviceContext)
throws Exception {
JSONObject jsonObject = JSONFactoryUtil.createJSONObject(
userNotificationEvent.getPayload());
String entryURL = jsonObject.getString("entryURL");
String entryURLDomain = HttpUtil.getDomain(entryURL);
String portalURL = serviceContext.getPortalURL();
String portalURLDomain = HttpUtil.getDomain(portalURL);
if (!entryURLDomain.equals(portalURLDomain)) {
entryURL = StringUtil.replaceFirst(
entryURL, entryURLDomain, portalURLDomain);
}
return entryURL;
}
protected String getTitle(
JSONObject jsonObject, AssetRenderer<?> assetRenderer,
ServiceContext serviceContext) {
String message = StringPool.BLANK;
AssetRendererFactory<?> assetRendererFactory =
AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
assetRenderer.getClassName());
String typeName = assetRendererFactory.getTypeName(
serviceContext.getLocale());
int notificationType = jsonObject.getInt("notificationType");
if (notificationType ==
UserNotificationDefinition.NOTIFICATION_TYPE_ADD_ENTRY) {
message = "x-added-a-new-x";
}
else if (notificationType ==
UserNotificationDefinition.NOTIFICATION_TYPE_UPDATE_ENTRY) {
message = "x-updated-a-x";
}
return getFormattedMessage(
jsonObject, serviceContext, message, typeName);
}
}