/* * Copyright (c) 2010 Lockheed Martin Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.eurekastreams.web.client.ui.common.notification.rendering; import java.util.HashMap; import java.util.Map; import org.eurekastreams.commons.formatting.DateFormatter; import org.eurekastreams.server.domain.ApplicationAlertNotification; import org.eurekastreams.server.domain.NotificationType; import org.eurekastreams.web.client.ui.pages.master.StaticResourceBundle; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.Widget; /** * Creates the widgets for a notification. */ @SuppressWarnings("serial") public class NotificationsRenderer { /** Date formatter. */ private final DateFormatter dateFormatter = new DateFormatter(); /** Renderers for the message text. (Static to not waste time re-creating these.) */ private static Map<NotificationType, NotificationMessageRenderer> messageRenderers = // \n new HashMap<NotificationType, NotificationMessageRenderer>() { { put(NotificationType.POST_TO_PERSONAL_STREAM, new PostToPersonalStreamMessageRenderer()); put(NotificationType.COMMENT_TO_PERSONAL_STREAM, new CommentToPersonalStreamMessageRenderer()); put(NotificationType.COMMENT_TO_PERSONAL_POST, new CommentToPersonalPostMessageRenderer()); put(NotificationType.COMMENT_TO_COMMENTED_POST, new CommentToCommentedPostMessageRenderer()); put(NotificationType.FOLLOW_PERSON, new FollowPersonMessageRenderer()); put(NotificationType.POST_TO_GROUP_STREAM, new PostToGroupStreamMessageRenderer()); put(NotificationType.POST_TO_JOINED_GROUP, new PostToGroupStreamMessageRenderer()); put(NotificationType.COMMENT_TO_GROUP_STREAM, new CommentToGroupStreamMessageRenderer()); put(NotificationType.COMMENT_TO_SAVED_POST, new CommentToSavedPostMessageRenderer()); put(NotificationType.FOLLOW_GROUP, new FollowGroupMessageRenderer()); put(NotificationType.FLAG_PERSONAL_ACTIVITY, new FlagActivityMessageRenderer()); put(NotificationType.FLAG_GROUP_ACTIVITY, new FlagActivityMessageRenderer()); put(NotificationType.REQUEST_NEW_GROUP, new RequestNewGroupMessageRenderer()); put(NotificationType.REQUEST_GROUP_ACCESS, new RequestGroupAccessMessageRenderer()); put(NotificationType.REQUEST_GROUP_ACCESS_APPROVED, new RequestGroupAccessApprovedMessageRenderer()); put(NotificationType.REQUEST_GROUP_ACCESS_DENIED, new RequestGroupAccessDeniedMessageRenderer()); put(NotificationType.LIKE_ACTIVITY, new LikeActivityMessageRenderer()); } }; /** * Creates the widgets for a notification. * * @param notif * Notification. * @return Widget to display. */ public Widget render(final ApplicationAlertNotification notif) { // build the main panel Panel main = new FlowPanel(); main.addStyleName(StaticResourceBundle.INSTANCE.coreCss().notifEntry()); if (!notif.isRead()) { main.addStyleName(StaticResourceBundle.INSTANCE.coreCss().notifEntryUnread()); } // -- icon side -- Widget icon = new Label(); icon.addStyleName(StaticResourceBundle.INSTANCE.coreCss().icon()); main.add(icon); // -- text side -- Panel textPanel = new FlowPanel(); textPanel.addStyleName(StaticResourceBundle.INSTANCE.coreCss().notifTextSide()); main.add(textPanel); // build the message text NotificationMessageRenderer msgRenderer = messageRenderers.get(notif.getNotificiationType()); if (msgRenderer != null) { textPanel.add(msgRenderer.render(notif)); main.addStyleName(msgRenderer.getStyleName()); } // build the time Label when = new Label(dateFormatter.timeAgo(notif.getNotificationDate())); when.addStyleName(StaticResourceBundle.INSTANCE.coreCss().notifTimestamp()); textPanel.add(when); return main; } }