001    /*
002    @license.text@
003     */
004    package com.hammurapi.eventbus.tests.familyties.rules;
005    
006    import com.hammurapi.common.Condition;
007    import com.hammurapi.eventbus.Handler;
008    import com.hammurapi.eventbus.tests.familyties.model.Husband;
009    import com.hammurapi.eventbus.tests.familyties.model.Spouse;
010    import com.hammurapi.eventbus.tests.familyties.model.Wife;
011    
012    public class SpouseRules extends FamilyTiesRules {      
013                    
014            /**
015             * If A is a spouse of B then B is a spouse of A. 
016             * @param spouse
017             */
018            @Handler        
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            @Handler        
028            public Husband inferHusband(@Condition("spouse.getSubject().isMale() && !(spouse instanceof com.hammurapi.eventbus.tests.familyties.model.Husband)") Spouse spouse) {
029                    return new Husband(spouse.getSubject(), spouse.getObject());
030            }
031            
032            /**
033             * Female spouse is wife.
034             * @param spouse
035             */
036            @Handler        
037            public Wife inferWife(@Condition("!spouse.getSubject().isMale() && !(spouse instanceof com.hammurapi.eventbus.tests.familyties.model.Wife)") Spouse spouse) {
038                    return new Wife(spouse.getSubject(), spouse.getObject());
039            }
040    }