WebNotificationServiceImpl.java
/*
* Copyright (C) 2003-2013 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.commons.notification.impl.service;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.commons.api.notification.NotificationContext;
import org.exoplatform.commons.api.notification.channel.AbstractChannel;
import org.exoplatform.commons.api.notification.channel.template.AbstractTemplateBuilder;
import org.exoplatform.commons.api.notification.model.ChannelKey;
import org.exoplatform.commons.api.notification.model.MessageInfo;
import org.exoplatform.commons.api.notification.model.NotificationInfo;
import org.exoplatform.commons.api.notification.model.WebNotificationFilter;
import org.exoplatform.commons.api.notification.service.WebNotificationService;
import org.exoplatform.commons.api.notification.service.storage.WebNotificationStorage;
import org.exoplatform.commons.notification.channel.WebChannel;
import org.exoplatform.commons.notification.impl.NotificationContextImpl;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
public class WebNotificationServiceImpl implements WebNotificationService {
/** logger */
private static final Log LOG = ExoLogger.getLogger(WebNotificationServiceImpl.class);
/** storage */
private final WebNotificationStorage storage;
public WebNotificationServiceImpl(WebNotificationStorage webStorage) {
this.storage = webStorage;
}
@Override
public void save(NotificationInfo notification) {
storage.save(notification);
}
@Override
public void markRead(String notificationId) {
storage.markRead(notificationId);
}
@Override
public void markAllRead(String userId) throws Exception {
storage.markAllRead(userId);
}
@Override
public List<String> get(WebNotificationFilter filter, int offset, int limit) {
List<String> result = new ArrayList<String>();
List<NotificationInfo> gotList = getNotificationInfos(filter, offset, limit);
NotificationContext ctx = NotificationContextImpl.cloneInstance();
ctx.append(POPUP_OVER, filter.isOnPopover());
AbstractChannel channel = ctx.getChannelManager().getChannel(ChannelKey.key(WebChannel.ID));
//
for (NotificationInfo notification : gotList) {
AbstractTemplateBuilder builder = channel.getTemplateBuilder(notification.getKey());
MessageInfo msg = null;
try {
msg = builder.buildMessage(ctx.setNotificationInfo(notification));
} catch (Exception e) {
LOG.error("Error while building message for notification with id = " + notification.getId(), e);
}
if (msg != null && msg.getBody() != null && !msg.getBody().isEmpty()) {
result.add(msg.getBody());
}
// if have any exception when template transformation
// ignore to display the notification
if (ctx.isFailed()) {
LOG.warn(ctx.getException().getMessage(), ctx.getException());
}
}
return result;
}
@Override
public List<NotificationInfo> getNotificationInfos(WebNotificationFilter filter, int offset, int limit) {
return storage.get(filter, offset, limit);
}
@Override
public boolean remove(String notificationId) {
return storage.remove(notificationId);
}
@Override
public void hidePopover(String notificationId) {
storage.hidePopover(notificationId);
}
@Override
public void resetNumberOnBadge(String userId) {
storage.resetNumberOnBadge(userId);
}
@Override
public int getNumberOnBadge(String userId) {
if (StringUtils.isNotBlank(userId)) {
try {
return storage.getNumberOnBadge(userId);
} catch (Exception e) {
if (LOG.isDebugEnabled()) {
LOG.error("Exception raising when getNumberOnBadge() ", e);
} else {
LOG.warn("Exception raising when getNumberOnBadge() associated to the userId " + userId);
}
}
return 0;
} else {
LOG.warn("Can't getNumberOnBadge(). The userId is null");
return 0;
}
}
}