2014년 2월 27일 목요일

I C o m m a n d & I F u n c t i o n ( PureMVC )

/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>
 
 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>
 
 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.interfaces;

/**
 * The interface definition for a PureMVC Command.
 * 
 * @see org.puremvc.java.interfaces INotification
 */
public interface ICommand extends INotifier
{

/**
 * Execute the <code>ICommand</code>'s logic to handle a given
 * <code>INotification</code>.
 * 
 * @param notification
 *            an <code>INotification</code> to handle.
 */
public void execute( INotification notification );
}





/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>
 
 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>
 
 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.interfaces;

/**
 * This interface must be implemented by all classes that want to be notified of
 * a notification.
 */
public interface IFunction
{

/**
 * @param notification
 */
public void onNotification( INotification notification );
}







N o t i f i e r ( PureMVC )



/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>

 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>

 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.interfaces;

/**
 * The interface definition for a PureMVC Notifier.
 * 
 * <P>
 * <code>MacroCommand, Command, Mediator</code> and <code>Proxy</code> all
 * have a need to send <code>Notifications</code>.
 * </P>
 * 
 * <P>
 * The <code>INotifier</code> interface provides a common method called
 * <code>sendNotification</code> that relieves implementation code of the
 * necessity to actually construct <code>Notifications</code>.
 * </P>
 * 
 * <P>
 * The <code>Notifier</code> class, which all of the above mentioned classes
 * extend, also provides an initialized reference to the <code>Facade</code>
 * Singleton, which is required for the convienience method for sending
 * <code>Notifications</code>, but also eases implementation as these classes
 * have frequent <code>Facade</code> interactions and usually require access
 * to the facade anyway.
 * </P>
 * 
 * @see org.puremvc.java.interfaces.IFacade IFacade
 * @see org.puremvc.java.interfaces.INotification INotification
 */
public interface INotifier
{

/**
 * Send a <code>INotification</code>.
 * 
 * <P>
 * Convenience method to prevent having to construct new notification
 * instances in our implementation code.
 * </P>
 * 
 * @param notificationName
 *            the name of the notification to send
 * @param body
 *            the body of the notification (optional)
 * @param type
 *            the type of the notification (optional)
 */
public void sendNotification( String notificationName, Object body, String type );
/**
 * Send a <code>INotification</code>.
 * 
 * <P>
 * Convenience method to prevent having to construct new notification
 * instances in our implementation code.
 * </P>
 * 
 * @param notificationName
 *            the name of the notification to send
 * @param body
 *            the body of the notification (optional)
 */
public void sendNotification( String notificationName, Object body );
/**
 * Send a <code>INotification</code>.
 * 
 * <P>
 * Convenience method to prevent having to construct new notification
 * instances in our implementation code.
 * </P>
 * 
 * @param notificationName
 *            the name of the notification to send
 */
public void sendNotification( String notificationName );
}




/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>
 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>
 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.patterns.observer;

import org.puremvc.java.interfaces.INotifier;
import org.puremvc.java.patterns.facade.Facade;

/**
 * A Base <code>INotifier</code> implementation.
 * 
 * <P>
 * <code>MacroCommand, Command, Mediator</code> and <code>Proxy</code> all
 * have a need to send <code>Notifications</code>.
 * <P>
 * <P>
 * The <code>INotifier</code> interface provides a common method called
 * <code>sendNotification</code> that relieves implementation code of the
 * necessity to actually construct <code>Notifications</code>.
 * </P>
 * 
 * <P>
 * The <code>Notifier</code> class, which all of the above mentioned classes
 * extend, provides an initialized reference to the <code>Facade</code>
 * Singleton, which is required for the convienience method for sending
 * <code>Notifications</code>, but also eases implementation as these classes
 * have frequent <code>Facade</code> interactions and usually require access
 * to the facade anyway.
 * </P>
 * 
 * @see org.puremvc.java.patterns.facade.Facade Facade
 * @see org.puremvc.java.patterns.mediator.Mediator Mediator
 * @see org.puremvc.java.patterns.proxy.Proxy Proxy
 * @see org.puremvc.java.patterns.command.SimpleCommand SimpleCommand
 * @see org.puremvc.java.patterns.command.MacroCommand MacroCommand
 */
public class Notifier implements INotifier
{
// The Multiton Key for this app
/**
 * Local reference to the Facade Singleton
 */
protected Facade facade = Facade.getInstance();

/**
 * Send an <code>INotification</code>s.
 * 
 * <P>
 * Keeps us from having to construct new notification instances in our
 * implementation code.
 * 
 * @param notificationName
 *            the name of the notiification to send
 * @param body
 *            the body of the notification (optional)
 * @param type
 *            the type of the notification (optional)
 */

public void sendNotification( String notificationName, Object body, String type )
{
facade.sendNotification( notificationName, body, type );
}
/**
 * Send an <code>INotification</code>s.
 * 
 * <P>
 * Keeps us from having to construct new notification instances in our
 * implementation code.
 * 
 * @param notificationName
 *            the name of the notiification to send
 * @param body
 *            the body of the notification (optional)
 */

public void sendNotification( String notificationName, Object body)
{
facade.sendNotification( notificationName, body);
}
/**
 * Send an <code>INotification</code>s.
 * 
 * <P>
 * Keeps us from having to construct new notification instances in our
 * implementation code.
 * 
 * @param notificationName
 *            the name of the notiification to send
 */

public void sendNotification( String notificationName)
{
facade.sendNotification( notificationName);
}

}


N o t i f i c a t i o n ( PureMVC )


/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>

 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>

 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.interfaces;

/**
 * The interface definition for a PureMVC Notification.
 * 
 * <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>
 * 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>
 * 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>
 * 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 org.puremvc.java.interfaces.IView IView
 * @see org.puremvc.java.interfaces.IObserver IObserver
 */
public interface INotification
{

/**
 * Get the name of the <code>INotification</code> instance. No setter,
 * should be set by constructor only
 * 
 * @return the name
 */
public String getName( );

/**
 * Set the body of the <code>INotification</code> instance
 * 
 * @param body
 */
public void setBody( Object body );

/**
 * Get the body of the <code>INotification</code> instance
 * 
 * @return the body
 */
public Object getBody( );

/**
 * Set the type of the <code>INotification</code> instance
 * 
 * @param type
 *            the type
 */
public void setType( String type );

/**
 * Get the type of the <code>INotification</code> instance
 * 
 * @return the type
 */
public String getType( );

/**
 * Get the string representation of the <code>INotification</code>
 * instance
 * 
 * @return the string representation of the <code>INotification</code>
 *         instance
 */
public String toString( );
}







/*
 PureMVC Java port by Frederic Saunier <frederic.saunier@puremvc.org>
 Adapted from sources of thoses different authors :
  Donald Stinchfield <donald.stinchfield@puremvc.org>, et all
  Ima OpenSource <opensource@ima.eu>
  Anthony Quinault <anthony.quinault@puremvc.org>
 PureMVC - Copyright(c) 2006-10 Futurescale, Inc., Some rights reserved. 
 Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.java.patterns.observer;

import org.puremvc.java.interfaces.INotification;

/**
 * A base <code>INotification</code> implementation.
 * 
 * <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>
 * 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>
 * 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>
 * 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 org.puremvc.java.patterns.observer.Observer Observer
 * 
 */
public class Notification implements INotification
{

// the name of the notification instance
// the type of the notification instance
private String name = null, type = null;

// the body of the notification instance
private 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 Notification( 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 Notification( 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 Notification( 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 Object getBody()
{
return 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 body of the <code>Notification</code> instance.
 * @param body 
 */
public void setBody( Object body )
{
this.body = body;
}

/**
 * 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;
}
}