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.Husband;
009    import com.hammurapi.reasoning.tutorial.objectmodel.Spouse;
010    import com.hammurapi.reasoning.tutorial.objectmodel.Wife;
011    
012    public class SpouseRules {      
013                    
014            /**
015             * If A is a spouse of B then B is a spouse of A. 
016             * @param spouse
017             */
018            @Infer
019            public Spouse inferSpouse(Spouse spouse) {
020                    return new Spouse(spouse.getObject(), spouse.getSubject());
021            }
022                    
023            /**
024             * Male spouse is husband.
025             * @param spouse
026             */
027            @Infer 
028            public Husband inferHusband(@Condition("arg.getSubject().isMale() && !(arg instanceof com.hammurapi.reasoning.tutorial.objectmodel.Husband)") Spouse spouse) {
029                    return new Husband(spouse.getSubject(), spouse.getObject());
030            }
031            
032            /**
033             * Female spouse is wife.
034             * @param spouse
035             */
036            @Infer 
037            public Wife inferWife(@Condition("!arg.getSubject().isMale() && !(arg instanceof com.hammurapi.reasoning.tutorial.objectmodel.Wife)") Spouse spouse) {
038                    return new Wife(spouse.getSubject(), spouse.getObject());
039            }
040    }