RequiredFieldsFilter

Package: MachII.filters
Inherits from: framework.BaseComponent  <  framework.EventFilter
An EventFilter for testing that an event's args contain a list of required fields.

<!--- License: Copyright 2006 Mach-II 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. Copyright: Mach-II Corporation Author: Ben Edwards (ben@ben-edwards.com) $Id: RequiredFieldsFilter.cfc 4352 2006-08-29 20:35:15Z pfarrell $ Created version: 1.0.10 Updated version: 1.1.0 RequiredFieldsFilter This event-filter tests an event for required fields specified. If the required fields are not present (or are blank) then event processing is aborted and a specified event is announced. If the required fields aren't defined then 'message' and 'missingFields' are set in the event. Configuration Usage: No configuration parameters. <event-filters> <event-filter name="RequiredFields" type="MachII.filters.RequiredFieldsFilter" /> </event-filters> Event-Handler Usage: - "requiredFields" - a comma delimited list of fields required - "invalidEvent" - the event to announce if all required fields are not in the event <event-handler name="someImportantEvent" access="public"> <filter name="RequiredFields"> <parameter name="requiredFields" value="list,of,important,args" /> <parameter name="invalidEvent" value="eventToGoToIfArgsAreNotThere" /> </filter> </event-handler> --->

Method Summary
public void configure()

This configure does nothing.

public boolean filterEvent(Event event, EventContext eventContext, [struct paramArgs="#StructNew()#"])

Runs the filter event.

private void throwUsageException()

Throws an usage exception.

Methods inherited from framework.EventFilter:   init
Methods inherited from framework.BaseComponent:   isParameterDefined , setPropertyManager , setParameters , getPropertyManager , announceEvent , getAppManager , setAppManager , hasParameter , getParameter , getProperty , getParameters , setProperty , setParameter
Method Detail
configure

public void configure( )

This configure does nothing.

Parameters:

Code:

	<cffunction name="configure" access="public" returntype="void" output="false"
		hint="This configure does nothing.">
		
	</cffunction> 

filterEvent

public boolean filterEvent( Event event, EventContext eventContext, [struct paramArgs="#StructNew()#"] )

Runs the filter event.

Parameters:
Event event
EventContext eventContext
[struct paramArgs="#StructNew()#"]

Code:

	<cffunction name="filterEvent" access="public" returntype="boolean"
		hint="Runs the filter event.">
		<cfargument name="event" type="MachII.framework.Event" required="true" />
		<cfargument name="eventContext" type="MachII.framework.EventContext" required="true" />
		<cfargument name="paramArgs" type="struct" required="false" default="#StructNew()#" />
		
		<cfset var isContinue = true />
		<cfset var missingFields = '' />
		<cfset var requiredFields = '' />
		<cfset var invalidEvent = '' />
		<cfset var field = 0 />
		<cfset var newEventArgs = 0 />
		
		<cfif StructKeyExists(arguments.paramArgs,this.REQUIRED_FIELDS_PARAM) 
				AND StructKeyExists(arguments.paramArgs,this.INVALID_EVENT_PARAM)>
			<cfset requiredFields = arguments.paramArgs[this.REQUIRED_FIELDS_PARAM] />
			<cfset invalidEvent = arguments.paramArgs[this.INVALID_EVENT_PARAM] />
			
			<cfloop index="field" list="#requiredFields#" delimiters=",">
				<cfif (NOT event.isArgDefined(field)) OR (event.getArg(field,'') EQ '')>
					<cfset missingFields = ListAppend(missingFields, field, ',') />
					<cfset isContinue = false />
				</cfif>
			</cfloop>
		<cfelse>
			<cfset throwUsageException() />
		</cfif>
		
		<cfif isContinue>
			<cfreturn true />
		<cfelse>
			<cfset newEventArgs = arguments.event.getArgs() />
			<cfset newEventArgs['message'] = "Please provide all required fields. Missing fields: " & ReplaceNoCase(missingFields,',',', ','all') & "." />
			<cfset newEventArgs['missingFields'] = missingFields />
			<cfset arguments.eventContext.announceEvent(invalidEvent, newEventArgs) />
			
			<cfreturn false />
		</cfif>
	</cffunction> 

throwUsageException

private void throwUsageException( )

Throws an usage exception.

Parameters:

Code:

	<cffunction name="throwUsageException" access="private" returntype="void" output="false"
		hint="Throws an usage exception.">
		<cfset var throwMsg = "RequiredFieldsFilter requires the following usage parameters: " & this.REQUIRED_FIELDS_PARAM & ", " & this.INVALID_EVENT_PARAM & "." />
		<cfthrow message="#throwMsg#" />
	</cffunction>