001    /*
002      * hammurapi-rules-tutorial @mesopotamia.version@
003     * Hammurapi rules tutorial. 
004     * Copyright (C) 2006  Hammurapi Group
005     *
006     * This program is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 2 of the License, or (at your option) any later version.
010     *
011     * This program is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public
017     * License along with this library; if not, write to the Free Software
018     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
019     *
020     * URL: http://http://www.hammurapi.biz
021     * e-Mail: support@hammurapi.biz
022     */
023    package biz.hammurapi.rules.tutorial.conclusions;
024    
025    import biz.hammurapi.rules.Conclusion;
026    import biz.hammurapi.rules.tutorial.facts.Person;
027    
028    public class Relative extends Conclusion implements Comparable {
029    
030            public Relative(Person subject, Person object) {
031                    setSlot("subject", subject);
032                    setSlot("object", object);
033                    synchronized (Relative.class) {
034                            serialNo = ++counter;
035                    }
036            }
037    
038            public String toString() {
039                    StringBuffer ret = new StringBuffer(getSubject().toString());
040                    ret.append(" is a ");
041                    
042                    int idx = getClass().getName().lastIndexOf('.');
043                    ret.append(idx == -1 ? getClass().getName() : getClass().getName().substring(idx + 1));
044                    ret.append(" of ");
045                    ret.append(getObject().toString());
046                    
047                    ret.append(" (");
048                    ret.append(getDepth());
049                    ret.append("/");
050                    ret.append(getCardinality());
051                    ret.append(")");
052                    return ret.toString();
053            }
054            
055            public Person getSubject() {
056                    return (Person) getSlot("subject");
057            }
058            
059            public Person getObject() {
060                    return (Person) getSlot("object");
061            }
062            
063            private static int counter;
064            
065            private int serialNo;
066    
067            public int compareTo(Object o) {
068                    if (o==null) {
069                            return -1;
070                    }
071                    return o instanceof Relative ? serialNo-((Relative) o).serialNo : hashCode()-o.hashCode();
072            }
073    }