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.Negator; 026 import biz.hammurapi.rules.Supercedable; 027 028 /** 029 * Negates bad facts. Uses equals() to compare facts. 030 * @author Pavel Vlasov 031 * @revision $Revision$ 032 */ 033 public class SuspectParentRelationship implements Negator, Supercedable { 034 String message; 035 private Parent parent; 036 037 public SuspectParentRelationship(Parent parent, String message) { 038 this.message=message; 039 this.parent=parent; 040 } 041 042 public boolean negates(Object obj) { 043 // Negate parent itself 044 if (obj instanceof Parent) { 045 return parent.getSubject().equals(((Parent) obj).getSubject()) && parent.getObject().equals(((Parent) obj).getObject()); 046 } 047 048 049 050 // Negate child 051 if (obj instanceof Child) { 052 return ((Child) obj).getSubject().equals(parent.getObject()) && ((Child) obj).getObject().equals(parent.getSubject()); 053 } 054 055 return false; 056 } 057 058 public String toString() { 059 return "[Suspect parent relationship] "+message+": "+parent; 060 } 061 062 public boolean supercedes(Object obj) { 063 return obj instanceof SuspectParentRelationship && parent.supercedes(((SuspectParentRelationship) obj).parent); 064 } 065 066 }