[rules-users] @key declarations for a type - What's under the hood?

Wolfgang Laun wolfgang.laun at gmail.com
Thu Feb 27 13:24:04 EST 2014


Forgot the rule that creates the output :-)

rule isConnected
when
    $r1: Room()
    $r2: Room( this != $r1 )
    $d: Door( fromRoom == $r1, toRoom == $r2 )
then
    System.out.println( $d + " connects " + $r1 + " and " + $r1 );
end

-W

On 27/02/2014, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:
> Works as you'd exprect it - and here we go:
>
> declare Thing
>    size : int
> end
>
> // A room is also a thing
> declare Room extends Thing
>     name : String @key
> end
>
> // A door is a pathway between two rooms
> declare Door extends Thing
>    fromRoom : Room @key
>    toRoom   : Room @key
> end
>
> rule "startup"
> when
> then
>    Room kit = new Room("kitchen");
>    kit.setSize( 10 );
>    insert( kit );
>    Room off = new Room("office");
>    kit.setSize( 15 );
>    insert( off );
>    Door kitoff = new Door( kit, off );
>    insert( kitoff );
> end
>
> Output:
>
> Door( size=0, fromRoom=Room( size=15, name=kitchen ), toRoom=Room(
> size=0, name=office ) ) connects Room( size=15, name=kitchen ) and
> Room( size=15, name=kitchen )
>
> -W
>
>
>
> On 27/02/2014, Matthew Versaggi <profversaggi at gmail.com> wrote:
>> But what if you now have 2 declare statements in which one defines itself
>> in terms of the other ...
>>
>> // A room is also a thing
>> declare Room extends Thing
>>     name : String @key
>> end
>>
>> One would instantiate an object like this:
>> Room room = new Room("office");
>>
>>
>> // A door is a pathway between two rooms
>> declare Door extends Thing
>>    fromRoom : Room @key
>>    toRoom   : Room @key
>> end
>>
>> How would one instantiate an object of 'Door' ?
>>
>>
>>
>> On Wed, Feb 26, 2014 at 5:11 PM, Edson Tirelli <ed.tirelli at gmail.com>
>> wrote:
>>
>>>
>>>    Drools bytecode generates these beans without generating java source
>>> code (if you are using the declare, not the data modeller). Having said
>>> that, it is very simple:
>>>
>>> declare Here
>>>     location: String @key
>>> end
>>>
>>>    Generates a java class roughly equivalent to:
>>>
>>> public class Here implements Serializable {
>>>    private String location;
>>>
>>>    public Here() {}
>>>
>>>    public Here( String location ) {
>>>       this.location = location;
>>>    }
>>>
>>>    public String getLocation() { return location; }
>>>    public void setLocation(String location) { this.location = location;
>>> }
>>>
>>>    // generates a toString()
>>>
>>>    // generates a hashCode()/equals() method that use the location's
>>> hashcode()/equals()
>>> }
>>>
>>>    I did this from memory, but it is pretty much all it does. Nothing
>>> complex there, just a javabean really.
>>>
>>>    The difference to not using @key is that the hashCode()/equals()
>>> methods would not take "location" in consideration, and in this case,
>>> since
>>> there are no other attributes, would then rely on system identity.
>>>
>>>    Edson
>>>
>>>
>>>
>>>
>>>
>>> On Wed, Feb 26, 2014 at 2:23 PM, profversaggi
>>> <profversaggi at gmail.com>wrote:
>>>
>>>> I was looking for something along the lines of a method of inspecting
>>>> the
>>>> resulting code of any arbitrary @key declarations I might want to
>>>> deploy.
>>>> Is
>>>> there such a way?
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://drools.46999.n3.nabble.com/key-declarations-for-a-type-What-s-under-the-hood-tp4028343p4028346.html
>>>> Sent from the Drools: User forum mailing list archive at Nabble.com.
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>
>>>
>>>
>>> --
>>>   Edson Tirelli
>>>   Principal Software Engineer
>>>   Red Hat Business Systems and Intelligence Group
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>>
>> --
>> #########################################################
>> Matthew R. Versaggi, President & CEO
>> Versaggi Information Systems, Inc.
>> Adjunct Professor of eBusiness DePaul University
>> Email: mailto:matt at versaggi.com, ProfVersaggi at gmail.com
>> M: 630-292-8422
>> LinkedIn:  http://www.linkedin.com/in/versaggi
>> #########################################################
>>
>


More information about the rules-users mailing list