/*  Clauses

	Micro Projet ARTC 1997/1998
        (C) 1998 DPSV Team Touts Droits Réservés
	Marc-Aurèle DARCHE
	Emmanuel PIERRE
	Marc-Olivier VARROY
	Antoine SOULIEZ

*/

import java.util.*;
import java.io.*;


public class Clause {
    Vector ruleRefs ;
    RuleVariable lhs ;
    String rhs ;
    Condition  cond ;
    Boolean consequent ;  // true ou false
    Boolean truth ;   // état = null(unknown), true ou false
    Clause(RuleVariable Lhs, Condition Cond, String Rhs)
    {
     lhs = Lhs ; cond = Cond ; rhs = Rhs ;
     lhs.addClauseRef(this) ;
     ruleRefs = new Vector() ;
     truth = null ;
     consequent = new Boolean(false) ;
    }

    void addRuleRef(Rule ref) { ruleRefs.addElement(ref) ; }

    Boolean check() {
        if (consequent.booleanValue() == true) return null ;
        if (lhs.value == null) {
            return truth = null ;  // impossible de vérifier si la variable est nulle
        } else {

        switch(cond.index) {
       case 1: truth = new Boolean(lhs.value.equals(rhs)) ;
//        RuleBase.appendText("\nTeste la Clause " + lhs.name + " = " + rhs + " " + truth);
        break ;
       case 2: truth = new Boolean(lhs.value.compareTo(rhs) > 0) ;
//        RuleBase.appendText("\nTeste la Clause " + lhs.name + " > " + rhs + " " + truth);
        break ;
       case 3: truth = new Boolean(lhs.value.compareTo(rhs) < 0) ;
//        RuleBase.appendText("\nTeste la Clause " + lhs.name + " < " + rhs + " " + truth);
        break ;
       case 4: truth = new Boolean(lhs.value.compareTo(rhs) != 0) ;
//        RuleBase.appendText("\nTeste la Clause " + lhs.name + " != " + rhs + " " + truth);
        break ;
       }

       return truth ;
        }
    }
    void isConsequent() { consequent = new Boolean(true); }
    Rule getRule() { if (consequent.booleanValue() == true)
        return (Rule)ruleRefs.firstElement() ;
        else return null ;}
};






