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 }