001    /*
002    @license.text@
003     */
004    package com.hammurapi.reasoning.tutorial.rules;
005    
006    import com.hammurapi.reasoning.spi.Condition;
007    import com.hammurapi.reasoning.spi.Infer;
008    import com.hammurapi.reasoning.tutorial.objectmodel.Child;
009    import com.hammurapi.reasoning.tutorial.objectmodel.Daughter;
010    import com.hammurapi.reasoning.tutorial.objectmodel.Father;
011    import com.hammurapi.reasoning.tutorial.objectmodel.GrandDaughter;
012    import com.hammurapi.reasoning.tutorial.objectmodel.GrandFather;
013    import com.hammurapi.reasoning.tutorial.objectmodel.GrandMother;
014    import com.hammurapi.reasoning.tutorial.objectmodel.GrandSon;
015    import com.hammurapi.reasoning.tutorial.objectmodel.Mother;
016    import com.hammurapi.reasoning.tutorial.objectmodel.Parent;
017    import com.hammurapi.reasoning.tutorial.objectmodel.Son;
018    
019    public class GrandRules {
020                    
021            /**
022             * Son of child is a grandson.
023             * @param son
024             * @param parent
025             * @return
026             */
027            @Infer
028            @Condition("son, parent: son.getObject().equals(parent.getObject())")
029            public GrandSon infer(Son son, Parent parent) {
030                    return new GrandSon(son.getSubject(), parent.getSubject());
031            }
032            
033            /**
034             * Daughter of child is a granddaughter.
035             * @param daughter
036             * @param parent
037             * @return
038             */
039            @Infer
040            @Condition("daughter, parent: daughter.getObject().equals(parent.getObject())")
041            public GrandDaughter infer(Daughter daughter, Parent parent) {
042                    return new GrandDaughter(daughter.getSubject(), parent.getSubject()); 
043            }
044            
045            /**
046             * Father of parent is grandparent.
047             * @param child
048             * @param father
049             * @return
050             */
051            @Infer
052            @Condition("child, father: child.getObject().equals(father.getObject())")
053            public GrandFather infer(Child child, Father father) {
054                    return new GrandFather(father.getSubject(), child.getSubject());
055            }
056            
057            /**
058             * Mother of parent is grandmother.
059             * @param child
060             * @param mother
061             * @return
062             */
063            @Infer
064            @Condition("child, mother: child.getObject().equals(mother.getObject())")
065            public GrandMother infer(Child child, Mother mother) {
066                    return new GrandMother(mother.getSubject(), child.getSubject());
067            }
068            
069    }