Michael Neale <michael.neale <at> gmail.com> writes:

> 
> Sorry wasn't able to reproduce, the class you provided looks slightly
> mangled - there is no "getSat" method is the error I get.
> 

Oh sorry, I made an adaptation without verifying it. Try this one. If in the
"then" clause you comment the function and uncomment the assignment the error
disappears.
Alberto


package dtest;

public class Node
{
        public float value = 0;
        
        public Node( float v )
        {
                value = v;
        }

        public float getValue()
        {
                return value;
        }
        public void setValue( float f )
        {
                value = f;
        }
}


package dtest;

public class Relation
{
        public Node source = null;
        public Node target = null;
        
        public Relation( Node s, Node t )
        {
                source = s;
                target = t;
        }
        
        public Node getSource()
        {
                return source;
        }
        public void setSource( Node n )
        {
                source = n;
        }
        
        public Node getTarget()
        {
                return target;
        }
        public void setTarget( Node n )
        {
                target = n;
        }
}


package dtest.rules

import dtest.Node;
import dtest.Relation;

function void propagateValue( Node g1, Node g2 )
{
        g2.setValue( g1.getValue() );
}


rule "A Rule"
        
        when
                r : Relation( sn : source, en : target );
                g1 : Node( s1: value > 0 );
                g2 : Node( s2 : value < s1 );
                
                eval( g1 == sn );
                eval( g2 == en );

        then 
                propagateValue( g1, g2 );
                #g2.value = g1.value;
                modify( g2 );
                
end


        try {
                
                //load up the rulebase
            RuleBase ruleBase = readRule( "/RuleTest.drl" );
            WorkingMemory workingMemory = ruleBase.newWorkingMemory();
            
            Node n1 = new Node( 1.0f );
            Node n2 = new Node( 0.0f );
            Node n3 = new Node( 0.0f );
            
            Relation r1 = new Relation( n1, n2 );
            Relation r2 = new Relation( n2, n3 );
            
            workingMemory.assertObject( n1 );
            workingMemory.assertObject( n2 );
            workingMemory.assertObject( n3 );
            workingMemory.assertObject( r1 );
            workingMemory.assertObject( r2 );
            
                System.out.println( "Initial state ( " + 
                                n1.value + ", " + 
                                n2.value + ", " + 
                                n3.value + ")" );
            
            workingMemory.fireAllRules();
            
                System.out.println( "Final state ( " + 
                                n1.value + ", " + 
                                n2.value + ", " + 
                                n3.value + ")" );
        }
        catch (Throwable t)
        {
            t.printStackTrace();
        }


Reply via email to