/* * ****************************************************************************** * * Copyright 2015 See AUTHORS file. * * * * 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 com.puremvc.patterns.observer; /** * A base <code>Notification</code> implementation. * <p> * <p> * PureMVC does not rely upon underlying event models such as the one provided * with Flash, and ActionScript 3 does not have an inherent event model. * </P> * <p> * <p> * The Observer Pattern as implemented within PureMVC exists to support * event-driven communication between the application and the actors of the MVC * triad. * </P> * <p> * <p> * Notifications are not meant to be a replacement for Events in * Flex/Flash/Apollo. Generally, <code>IMediator</code> implementors place * event listeners on their view components, which they then handle in the usual * way. This may lead to the broadcast of <code>Notification</code>s to * trigger <code>ICommand</code>s or to communicate with other * <code>IMediators</code>. <code>IProxy</code> and <code>ICommand</code> * instances communicate with each other and <code>IMediator</code>s by * broadcasting <code>INotification</code>s. * </P> * <p> * <p> * A key difference between Flash <code>Event</code>s and PureMVC * <code>Notification</code>s is that <code>Event</code>s follow the * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy until * some parent component handles the <code>Event</code>, while PureMVC * <code>Notification</code>s follow a 'Publish/Subscribe' pattern. PureMVC * classes need not be related to each other in a parent/child relationship in * order to communicate with one another using <code>Notification</code>s. * * @see com.puremvc.patterns.observer Observer */ public class BaseNotification implements Notification { // the name of the notification instance // the type of the notification instance protected String name = null; protected String type = null; // the body of the notification instance protected Object body = null; /** * Constructor. * * @param name name of the <code>Notification</code> instance. (required) * @param body the <code>Notification</code> body. (optional) * @param type the type of the <code>Notification</code> (optional) */ public BaseNotification(String name, Object body, String type) { this.name = name; this.body = body; this.type = type; } /** * Constructor. * * @param name name of the <code>Notification</code> instance. (required) */ public BaseNotification(String name) { this.name = name; body = null; type = null; } /** * Constructor. * * @param name name of the <code>Notification</code> instance. (required) * @param body the <code>Notification</code> body. (optional) */ public BaseNotification(String name, Object body) { this.name = name; this.body = body; type = null; } /** * Get the body of the <code>Notification</code> instance. * * @return the body object. */ public <T> T getBody() { return (T) body; } /** * Set the body of the <code>Notification</code> instance. * * @param body */ public <T> void setBody(T body) { this.body = body; } /** * Get the name of the <code>Notification</code> instance. * * @return the name of the <code>Notification</code> instance. */ public String getName() { return name; } /** * Get the type of the <code>Notification</code> instance. * * @return the type */ public String getType() { return type; } /** * Set the type of the <code>Notification</code> instance. * * @param type */ public void setType(String type) { this.type = type; } /** * Get the string representation of the <code>Notification</code> * instance. * * @return the string representation of the <code>Notification</code> * instance. */ public String toString() { String result = "Notification Name: " + getName() + " Body:"; if (body != null) result += body.toString() + " Type:"; else result += "null Type:"; if (type != null) result += type; else result += "null "; return result; } }