[rules-users] Is it possible to retrieve the collection of Conditions from DecisionTable?

Swindells, Thomas TSwindells at nds.com
Tue Oct 4 04:19:07 EDT 2011


Looking at the SpreadsheetCompiler class you can do something like the following

    /**
     * Generates DRL from the input stream containing the spreadsheet.
     *
     * @param xlsStream
     *            The stream to the spreadsheet. Uses the first worksheet found
     *            for the decision tables, ignores others.
     * @param type
     *            The type of the file - InputType.CSV or InputType.XLS
     * @param listener
     *
     * @return DRL xml, ready for use in drools.
     */
    public String compile(final InputStream xlsStream,
                          final InputType type,
                          final RuleSheetListener listener) {
        final DecisionTableParser parser = type.createParser( listener );
        parser.parseFile( xlsStream );
        final Package rulePackage = listener.getRuleSet();

List<Rule> rules = rulePackage.getRules
for(Rule r : rules) {
r.getName();
List<Condition> conditions = r.getConditions();
For(Condition c : conditions) {
String snippet = r.getSnippet();
}
}

        final DRLOutput out = new DRLOutput();
        rulePackage.renderDRL( out );
        return out.getDRL();
    }


Thomas
From: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Wolfgang Laun
Sent: 04 October 2011 08:53
To: Rules Users List
Subject: Re: [rules-users] Is it possible to retrieve the collection of Conditions from DecisionTable?

Since Toni confirms me even before I post this on the list: Using the Verifier way to get at a column from some spreadsheet is not for the faint at heart. In addition to what Toni wrote: source code in the Drools AST corner isn't even commented.
-W

2011/10/4 Toni Rikkola <toni.rikkola at gmail.com<mailto:toni.rikkola at gmail.com>>
If you take a look at the Verifier it goes through the Drools AST with a visitor pattern.
It starts by using getting the PackageDescr using DrlParser, this uses Drools internals so be warned that it might change in the future.

  Reader drlReader = new InputStreamReader( stream );
  PackageDescr descr = new DrlParser().parse( drlReader );

After that it goes through the PackageDescr using PackageDescrVisitor. RuleDescrVisitor shows how to get the condition part from each rule.

https://github.com/droolsjbpm/drools/blob/master/drools-verifier/src/main/java/org/drools/verifier/visitor/PackageDescrVisitor.java
https://github.com/droolsjbpm/drools/blob/master/drools-verifier/src/main/java/org/drools/verifier/visitor/RuleDescrVisitor.java

Toni


On Oct 3, 2011, at 8:11 PM, Mark Proctor wrote:


On 03/10/2011 18:03, Wolfgang Laun wrote:

A condition does not have a "name", as you write; values of the cells
below a condition are (usually) literals.

There is no API for extracting parts of a spreadsheet. You can look at
the Drools source code (in the packages org.drools.decisiontable and
.../parser) and write whatever you need - it is not too difficult.
You can also look at drools-verifier, as that shows ho to analyse
resulting rule fragments.

Mark


-W


On 3 October 2011 17:05, RaviCKota<Ravi.Kota at wellsfargo.com<mailto:Ravi.Kota at wellsfargo.com>>  wrote:
Hi All, for suppose I have a DecisionTable like below

CONDITION               ACTION
-----------------------------
COND1                     ACTION1
COND2                     ACTION2
COND3                     ACTION3
-----------------------------

This is just a representation of the DecisionTable. So I need to retrieve
all the conditions and store them into a Collection like Set. Does Drools
provide any such feature.

We load the drools as below
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl(new StringReader(drl)); //drl is the filepath of
decisiontable excel

// add the package to a rulebase (deploy the rule package).
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(builder.getPackage());

I tried to look into api of RuleBase, tried to get the packages, Rules,
Consequence, etc etc, but could not find any method, that gets me the
condition name.

When I tried to do
Package[] packages = rulebase.getPackages();

for(Package pack : packages){
System.out.println("Package Name is : "+pack.getName());
Rule[] rules = pack.getRules();
for(Rule rule : rules){
System.out.println("Rule name is : "+rule.getName());

All I get is some representation of each row, but I'm specifically looking
for the value of the first column (CONDITION) for each rule.

Please offer some guidance here.

--
View this message in context: http://drools.46999.n3.nabble.com/Is-it-possible-to-retrieve-the-collection-of-Conditions-from-DecisionTable-tp3390026p3390026.html
Sent from the Drools: User forum mailing list archive at Nabble.com<http://Nabble.com>.
_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users

_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users




_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users


________________________________

**************************************************************************************
This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the postmaster at nds.com and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00
**************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20111004/4f75200d/attachment.html 


More information about the rules-users mailing list