| Package: MachII.framework |
| Manages registered Listeners for the framework instance. |
| Method Summary | |
|---|---|
| public ListenerManager |
init(AppManager appManager, [any parentListenerManager=""])
Initialization function called by the framework. |
| public void |
addListener(string listenerName, Listener listener, [boolean overrideCheck="false"])
Registers a Listener with the specified name. |
| public void |
configure()
Configures each of the registered Listeners and its' invoker. |
| public AppManager |
getAppManager()
Sets the AppManager instance this ListenerManager belongs to. |
| public Listener |
getListener(string listenerName)
Gets a Listener with the specified name. |
| public array |
getListenerNames()
Returns an array of listener names. |
| public any |
getParent()
Sets the parent ListenerManager instance this ListenerManager belongs to. It will return empty string if no parent is defined. |
| public boolean |
isListenerDefined(string listenerName)
Returns true if a Listener is registered with the specified name. Does NOT check parent. |
| public void |
loadXml(string configXML, [boolean override="false"])
Loads xml into the manager. |
| public void |
removeListener(string listenerName)
Removes a listener. Does NOT remove from a parent. |
| public void |
setAppManager(AppManager appManager)
Returns the AppManager instance this ListenerManager belongs to. |
| public void |
setParent(ListenerManager parentListenerManager)
Returns the parent ListenerManager instance this ListenerManager belongs to. |
| Method Detail |
|---|
| addListener |
|---|
public void addListener( string listenerName, Listener listener, [boolean overrideCheck="false"] )
Registers a Listener with the specified name.
Parameters:
| string listenerName |
| Listener listener |
| [boolean overrideCheck="false"] |
Code:
<cffunction name="addListener" access="public" returntype="void" output="false" hint="Registers a Listener with the specified name."> <cfargument name="listenerName" type="string" required="true" /> <cfargument name="listener" type="MachII.framework.Listener" required="true" /> <cfargument name="overrideCheck" type="boolean" required="false" default="false" /> <cfif NOT arguments.overrideCheck AND isListenerDefined(arguments.listenerName)> <cfthrow type="MachII.framework.ListenerAlreadyDefined" message="A Listener with name '#arguments.listenerName#' is already registered." /> <cfelse> <cfset variables.listeners[arguments.listenerName] = arguments.listener /> </cfif> </cffunction>
| configure |
|---|
public void configure( )
Configures each of the registered Listeners and its' invoker.
Parameters:
Code:
<cffunction name="configure" access="public" returntype="void" hint="Configures each of the registered Listeners and its' invoker."> <cfset var key = "" /> <cfloop collection="#variables.listeners#" item="key"> <cfset getListener(key).configure() /> </cfloop> </cffunction>
| getAppManager |
|---|
public AppManager getAppManager( )
Sets the AppManager instance this ListenerManager belongs to.
Parameters:
Code:
<cffunction name="getAppManager" access="public" returntype="MachII.framework.AppManager" output="false" hint="Sets the AppManager instance this ListenerManager belongs to."> <cfreturn variables.appManager /> </cffunction>
| getListener |
|---|
public Listener getListener( string listenerName )
Gets a Listener with the specified name.
Parameters:
| string listenerName |
Code:
<cffunction name="getListener" access="public" returntype="MachII.framework.Listener" output="false" hint="Gets a Listener with the specified name."> <cfargument name="listenerName" type="string" required="true" /> <cfif isListenerDefined(arguments.listenerName)> <cfreturn variables.listeners[arguments.listenerName] /> <cfelseif isObject(getParent()) AND getParent().isListenerDefined(arguments.listenerName)> <cfreturn getParent().getListener(arguments.listenerName) /> <cfelse> <cfthrow type="MachII.framework.ListenerNotDefined" message="Listener with name '#arguments.listenerName#' is not defined. Listeners: '#ArrayToList(getListenerNames())#'" /> </cfif> </cffunction>
| getListenerNames |
|---|
public array getListenerNames( )
Returns an array of listener names.
Parameters:
Code:
<cffunction name="getListenerNames" access="public" returntype="array" output="false" hint="Returns an array of listener names."> <cfreturn StructKeyArray(variables.listeners) /> </cffunction>
| getParent |
|---|
public any getParent( )
Sets the parent ListenerManager instance this ListenerManager belongs to. It will return empty string if no parent is defined.
Parameters:
Code:
<cffunction name="getParent" access="public" returntype="any" output="false" hint="Sets the parent ListenerManager instance this ListenerManager belongs to. It will return empty string if no parent is defined."> <cfreturn variables.parentListenerManager /> </cffunction>
| init |
|---|
public ListenerManager init( AppManager appManager, [any parentListenerManager=""] )
Initialization function called by the framework.
Parameters:
| AppManager appManager |
| [any parentListenerManager=""] |
Code:
<cffunction name="init" access="public" returntype="ListenerManager" output="false" hint="Initialization function called by the framework."> <cfargument name="appManager" type="MachII.framework.AppManager" required="true" /> <cfargument name="parentListenerManager" type="any" required="false" default="" hint="Optional argument for a parent listener manager. If there isn't one default to empty string." /> <cfset setAppManager(arguments.appManager) /> <cfset variables.utils = getAppManager().getUtils() /> <cfif isObject(arguments.parentListenerManager)> <cfset setParent(arguments.parentListenerManager) /> </cfif> <cfreturn this /> </cffunction>
| isListenerDefined |
|---|
public boolean isListenerDefined( string listenerName )
Returns true if a Listener is registered with the specified name. Does NOT check parent.
Parameters:
| string listenerName |
Code:
<cffunction name="isListenerDefined" access="public" returntype="boolean" output="false" hint="Returns true if a Listener is registered with the specified name. Does NOT check parent."> <cfargument name="listenerName" type="string" required="true" /> <cfreturn StructKeyExists(variables.listeners, arguments.listenerName) /> </cffunction>
| loadXml |
|---|
public void loadXml( string configXML, [boolean override="false"] )
Loads xml into the manager.
Parameters:
| string configXML |
| [boolean override="false"] |
Code:
<cffunction name="loadXml" access="public" returntype="void" output="false"
hint="Loads xml into the manager.">
<cfargument name="configXML" type="string" required="true" />
<cfargument name="override" type="boolean" required="false" default="false" />
<cfset var listenerNodes = "" />
<cfset var listenerParams = "" />
<cfset var listenerName = "" />
<cfset var listenerType = "" />
<cfset var paramNodes = "" />
<cfset var paramName = "" />
<cfset var paramValue = "" />
<cfset var invokerType = "" />
<cfset var invoker = "" />
<cfset var listener = "" />
<cfset var hasParent = isObject(getParent()) />
<cfset var mapping = "" />
<cfset var i = 0 />
<cfset var j = 0 />
<cfif NOT arguments.override>
<cfset listenerNodes = XMLSearch(arguments.configXML, "mach-ii/listeners/listener") />
<cfelse>
<cfset listenerNodes = XMLSearch(arguments.configXML, "./listeners/listener") />
</cfif>
<cfloop from="1" to="#ArrayLen(listenerNodes)#" index="i">
<cfset listenerName = listenerNodes[i].xmlAttributes["name"] />
<cfif hasParent AND arguments.override AND StructKeyExists(listenerNodes[i].xmlAttributes, "overrideAction")>
<cfif listenerNodes[i].xmlAttributes["overrideAction"] EQ "useParent">
<cfset removeListener(listenerName) />
<cfelseif listenerNodes[i].xmlAttributes["overrideAction"] EQ "addFromParent">
<cfif StructKeyExists(listenerNodes[i].xmlAttributes, "mapping")>
<cfset mapping = listenerNodes[i].xmlAttributes["mapping"] />
<cfelse>
<cfset mapping = listenerName />
</cfif>
<cfif NOT getParent().isListenerDefined(mapping)>
<cfthrow type="MachII.framework.overrideListenerNotDefined"
message="An listener named '#mapping#' cannot be found in the parent listener manager for the override named '#listenerName#' in module '#getAppManager().getModuleName()#'." />
</cfif>
<cfset addListener(listenerName, getParent().getListener(mapping), arguments.override) />
</cfif>
<cfelse>
<cfset listenerType = listenerNodes[i].xmlAttributes["type"] />
<cfset listenerParams = StructNew() />
<cfif StructKeyExists(listenerNodes[i], "parameters")>
<cfset paramNodes = listenerNodes[i].parameters.xmlChildren />
<cfloop from="1" to="#ArrayLen(paramNodes)#" index="j">
<cfset paramName = paramNodes[j].xmlAttributes["name"] />
<cftry>
<cfset paramValue = variables.utils.recurseComplexValues(paramNodes[j]) />
<cfcatch type="any">
<cfthrow type="MachII.framework.InvalidParameterXml"
message="Xml parsing error for the parameter named '#paramName#' for listener '#listenerName#' in module '#getAppManager().getModuleName()#'." />
</cfcatch>
</cftry>
<cfset listenerParams[paramName] = paramValue />
</cfloop>
</cfif>
<cfset listener = CreateObject("component", listenerType).init(getAppManager(), listenerParams) />
<cfif StructKeyExists(listenerNodes[i], "invoker")>
<cfset invokerType = listenerNodes[i].invoker.xmlAttributes["type"] />
<cfset invoker = CreateObject("component", invokerType).init() />
<cfelse>
<cfset invoker = CreateObject("component", "MachII.framework.invokers.EventInvoker").init() />
</cfif>
<cfset listener.setInvoker(invoker) />
<cfset addListener(listenerName, listener, arguments.override) />
</cfif>
</cfloop>
</cffunction>
| removeListener |
|---|
public void removeListener( string listenerName )
Removes a listener. Does NOT remove from a parent.
Parameters:
| string listenerName |
Code:
<cffunction name="removeListener" access="public" returntype="void" output="false" hint="Removes a listener. Does NOT remove from a parent."> <cfargument name="listenerName" type="string" required="true" /> <cfset StructDelete(variables.listeners, arguments.listenerName, false) /> </cffunction>
| setAppManager |
|---|
public void setAppManager( AppManager appManager )
Returns the AppManager instance this ListenerManager belongs to.
Parameters:
| AppManager appManager |
Code:
<cffunction name="setAppManager" access="public" returntype="void" output="false" hint="Returns the AppManager instance this ListenerManager belongs to."> <cfargument name="appManager" type="MachII.framework.AppManager" required="true" /> <cfset variables.appManager = arguments.appManager /> </cffunction>
| setParent |
|---|
public void setParent( ListenerManager parentListenerManager )
Returns the parent ListenerManager instance this ListenerManager belongs to.
Parameters:
| ListenerManager parentListenerManager |
Code:
<cffunction name="setParent" access="public" returntype="void" output="false" hint="Returns the parent ListenerManager instance this ListenerManager belongs to."> <cfargument name="parentListenerManager" type="MachII.framework.ListenerManager" required="true" /> <cfset variables.parentListenerManager = arguments.parentListenerManager /> </cffunction>