The runtime type of the objects returned by KnowledgePackageImp.getRules() is org.drools.definitions.rule.impl.RuleImpl. RuleImpl implements org.drools.definition.rule.Rule and contains a org.drools.rule.Rule as attribute. The thing is that it is not exposing all the org.drools.rule.Rule's attributes. I really don't know why these two different Rule classes exists. It would be nice if someone could clarify this. As a workaround you can cast agent.getKnowledgeBase().getKnowledgePackage( /* ... */ ) to KnowledgePackageImpl and use its public attribute pkg to get the rules you want. Remember that this is just a workaround. It would be better to use the standard APIs.
2010/4/13 Luiz Eduardo Guida Valmont <[email protected]> > a less critical part of that code >> > > I meant a part of the application I'm working on, not the one that'll > generate the DRL files. > > Mea culpa > > > On 13 April 2010 17:30, Luiz Eduardo Guida Valmont > <[email protected]>wrote: > >> Hi all, >> >> Recently I had to update part of the application I'm working so it would >> use KnowledgeAgent instead of RuleAgent. The later restricts scanned DRL >> files so that all rules from any given package must be written into only one >> file), whereas the former does not. Long story made short: an external >> application will feed my application with generated DRL's and it cannot (aka >> will not) managed a single monolithic DRL or even regenerate it every now >> and then. >> >> What happens is that I have to update (re-write?) a less critical part of >> that code which generates a list of all rules contained within a certain >> package. It has to print rules' attibutes like name, salience, >> date-effective and date-expires. On the one hand, the old code imports * >> org.drools.rule.Rule* (1), which provides getters for such properties; >> that Rule class is accessed through a chain of method calls starting at >> RuleAgent, for example: >> >> agent.getRuleBase().getPackage( /* ... */ ).getRules()[ /* ... */ >>> ].getDateEffective() >>> >> >> On the other hand, when using KnowledgeAgent's, I can fetch instances of >> *org.drools.definition.rule.Rule* through a >> similar-but-effectivelly-different chain of method calls, like so: >> >> agent.getKnowledgeBase().getKnowledgePackage( /* ... */ ).getRules() >>> >> >> This one getRules returns a *Collection* of * >> org.drools.definition.rule.Rule* (2). Finally, this class does not >> provide similar methods: >> >> String getPackageName >> >> String getName >> >> Collection listMetaAttributes >> >> String getMetaAttribute >>> >> >> Hoping I've made myself clear up to this point, I ask: is it posible to >> convert an instance of (1) into an instance of (2) or is it possible to get >> instances of (1) through getters starting at KnowledgeAgent? >> >> Thanks in advance, >> Luiz Valmont >> > > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > -- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Esteban Aliverti
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
