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 <legvalmont@gmail.com>_______________________________________________I meant a part of the application I'm working on, not the one that'll generate the DRL files.a less critical part of that code
Mea culpaOn 13 April 2010 17:30, Luiz Eduardo Guida Valmont <legvalmont@gmail.com> 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 getPackageNameString getNameCollection listMetaAttributesString 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
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Esteban Aliverti
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users