--[[
 * @author PureMVC Lua Native Port by Sean 
 * @author Copyright(c) 2006-2012 Futurescale, Inc., Some rights reserved.
 * 
 * @class puremvc.Notification
 * 
 * A base Notification implementation.
 * 
 * PureMVC does not rely upon underlying event models such as the one provided 
 * with the DOM or other browser centric W3C event models.
 * 
 * The Observer Pattern as implemented within PureMVC exists to support 
 * event-driven communication between the application and the actors of the MVC 
 * triad.
 * 
 * Notifications are not meant to be a replacement for events in the browser. 
 * Generally, Mediator implementors place event listeners on their view 
 * components, which they then handle in the usual way. This may lead to the 
 * broadcast of Notifications to trigger commands or to communicate with other 
 * Mediators. {@link puremvc.Proxy Proxy},
 * {@link puremvc.SimpleCommand SimpleCommand}
 * and {@link puremvc.MacroCommand MacroCommand}
 * instances communicate with each other and 
 * {@link puremvc.Mediator Mediator}s
 * by broadcasting Notifications.
 * 
 * A key difference between browser events and PureMVC Notifications is that
 * events follow the 'Chain of Responsibility' pattern, 'bubbling' up the 
 * display hierarchy until some parent component handles the event, while 
 * PureMVC Notification 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 Notifications.
 * 
 * @constructor 
 * @param {string} name
 *  The Notification name
 * @param {Object} [body]
 *  The Notification body
 * @param {Object} [type]
 *  The Notification type
]]
local Notification = reusableClass("Notification")
Notification.PoolSize = 25

function Notification:ctor(name, body, type)
	Notification.super.ctor(self)
	self.name = name
	self.body = body
	self.type = type
end
--[[
 * Get the name of the Notification instance
 *
 * @return {string}
 *  The name of the Notification instance
]]
function Notification:getName()
	return self.name
end
--[[
 * Set this Notifications body. 
 * @param {Object} body
 * @return {void}
]]
function Notification:setBody(body)
	self.body = body
end
--[[
 * Get the Notification body.
 *
 * @return {Object}
]]
function Notification:getBody()
	return self.body
end
--[[
 * Set the type of the Notification instance.
 *
 * @param {Object} type
 * @return {void}
]]
function Notification:setType(type)
	self.type = type
end
--[[
 * Get the type of the Notification instance.
 * 
 * @return {Object}
]]
function Notification:getType()
	return self.type
end
--[[
 * Get a string representation of the Notification instance
 *
 * @return {string}
]]
function Notification:toString()
	local msg = "Notification Name: " .. self:getName()
	msg = msg .. "\nBody: " .. tostring(self:getBody())
	msg = msg .. "\nType: " .. self:getType()
	return msg
end

-- override begin
function Notification:DoConstruct(asArray, data)
end

function Notification:DoDeconstruct(asArray)
	self.name = nil
	self.type = nil
	self.body = nil
end
-- override end

return Notification