commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Kitching <skitch...@apache.org>
Subject Re: [Digester] How to apply rules on XML tags (SAX events) based on previously encountered tags?
Date Wed, 13 Apr 2005 15:00:04 GMT
On Wed, 2005-04-13 at 09:41 -0400, Soaring Eagle wrote:
> Hello,
> 
> I am using Digester to create a rules engine for an application. This
> rules engine should be capable of determining what should be done for
> certain type of financial securities based on their type and the
> business event that has occured. Such rules are maintained in XML. How
> do I apply digester rules based on nested criteria in this case?
> 
> For example, in the XML below, I would like to instantiate the class
> com.services.EmailAction only if the type of security is "MEGA" and
> the action is "Publish". How do i do that?
> 
> --
> Thanks in advance!
> Eagle
> 
> <Services>
> 	<Security type="DUSARM">
> 		<Event type="Preview">
> 			<Action>
> 				<ClassName>
> 					com.services.EmailAction
> 				</ClassName>
> 				<ClassName>
> 					com.services.EmailAction
> 				</ClassName>
> 			</Action>
> 		</Event>
> 	</Security>
> 	<Security type="MEGA">
> 		<Event type="Preview">
> 			<Action>
> 				<ClassName>
> 					com.services.EmailAction
> 				</ClassName>
> 				<ClassName>
> 					com.services.EmailAction
> 				</ClassName>
> 			</Action>
> 		</Event>
> 	</Security>
> </Services>

I think you could use the FactoryCreateRule to achieve this (instead of
using ObjectCreateRule).

MyActionFactory myActionFactory = new MyActionFactory();
digester.addFactoryCreate(
  "Services/Security/Event/Action/ClassName", 
  myActionFactory);

where

class MyActionFactory extends ObjectCreationFactory {
  public Object createObject(Attributes attributes)
  throws Exception {
    Digester d = getDigester();

    // here you can inspect the xml attributes on the ClassName tag,
    // and inspect any of the objects on the Digester stack in order
    // to determine what kind of object to instantiate and return.
    // Presumably there will be objects representing the current
    // Security and Event on the digester stack so their "type"
    // is accessable.
    //
    // If you don't want to create *any* object, I don't know whether
    // you can get away with returning null, or will have to return
    // some kind of NoAction dummy object.
  }
}

Is this what you wanted to achieve?

Regards,

Simon


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message