[jboss-svn-commits] JBL Code SVN: r26666 - in labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools: degrees/operators and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 21 22:46:15 EDT 2009


Author: dsotty
Date: 2009-05-21 22:46:14 -0400 (Thu, 21 May 2009)
New Revision: 26666

Added:
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectAbstractEvaluatorDefinition.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectEvaluatorDefinition.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/EqualsEvaluatorDefinition.java
Log:
Major update

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectAbstractEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectAbstractEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectAbstractEvaluatorDefinition.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,89 @@
+package org.drools.base.evaluators;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition.Target;
+import org.drools.spi.Evaluator;
+
+
+public abstract class ImperfectAbstractEvaluatorDefinition implements
+		ImperfectEvaluatorDefinition {
+
+
+	protected Map<String, Evaluator> cache         = Collections.emptyMap();
+
+		
+	
+	
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText) {
+		return getEvaluator(type, operatorId, isNegated, parameterText, Target.BOTH, Target.BOTH);
+	}
+	
+	
+	public abstract Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText, Target leftTarget,
+			Target rightTarget);
+	
+	
+	public Evaluator getEvaluator(ValueType type, Operator operator,
+			String parameterText) {
+		return getEvaluator(type,operator.getOperatorString(),false,parameterText);
+	}
+
+	public Evaluator getEvaluator(ValueType type, Operator operator) {
+		return getEvaluator(type,operator.getOperatorString(),false,"");
+	}
+	
+	/** 
+	 * 
+	 * 
+	 */
+	public boolean isNegatable() {
+		return true;
+	}
+
+	
+	public boolean operatesOnFactHandles() {
+		return true;
+	}
+
+	public boolean supportsType(ValueType type) {
+		return true;
+	}
+
+		
+	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+		cache = (Map<String, Evaluator>) in.readObject();
+	}
+
+	public void writeExternal(ObjectOutput out) throws IOException {
+		out.writeObject(cache);
+	}
+		
+	public Target getTarget() {
+		return Target.BOTH;
+	}
+
+
+
+	
+	
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/evaluators/ImperfectEvaluatorDefinition.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package org.drools.base.evaluators;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.FieldValue;
+import org.drools.spi.InternalReadAccessor;
+
+
+
+/**
+ * @author davide
+ *
+ */
+public interface ImperfectEvaluatorDefinition 
+	extends EvaluatorDefinition {
+	
+	
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountOperator.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,9 @@
+package org.drools.degrees.operators;
+
+import org.drools.degrees.IDegree;
+
+public interface IDiscountOperator extends IDegreeCombiner {
+	
+	public IDegree discount(IDegree arg, float strength);
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDiscountStrategy.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,10 @@
+package org.drools.degrees.operators;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+
+public interface IDiscountStrategy {
+	
+	public IDegree[] discount(IDegree[] args, boolean[] flags, IDegreeFactory factory);
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountStrategy.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,44 @@
+package org.drools.degrees.operators.intervals;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.IDiscountOperator;
+import org.drools.degrees.operators.IDiscountStrategy;
+
+public class IntervalDiscountStrategy implements IDiscountStrategy {
+
+	private IDiscountOperator discOp;
+
+	public IntervalDiscountStrategy(IDiscountOperator discountOperator) {
+		discOp = discountOperator;
+	}
+	
+	public IDegree[] discount(IDegree[] args, boolean[] flags, IDegreeFactory factory) {
+		float confMax = 0;
+		
+		IDegree[] ans = new IDegree[args.length];
+		
+		for (int j = 0; j < args.length; j++) {
+			if (flags[j])
+				confMax = Math.max(confMax, args[j].getConfidence(factory.isClosedWorldAssumption()));
+		}
+		
+		for (int j = 0; j < args.length; j++) {
+			//float weak = Math.max(0 , confMax - args[j].getConfidence());
+			
+			float strength;
+			float c0 = args[j].getConfidence(factory.isClosedWorldAssumption());
+			if (flags[j]) {
+				//weaken weaker defeaters
+				strength = 1 - (confMax - c0);
+			} else {
+				//weaken the non-killers
+				strength = 1 - confMax;
+			}
+			
+			ans[j] = discOp.discount(args[j], strength);
+		}
+		return ans;
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,51 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalLukasImplicationOperator implements IDegreeCombiner {
+
+	
+	
+	public IDegree eval(IDegree[] args, IDegreeFactory factory) {		
+		if (args == null || args.length < 2)
+			return factory == null ? IntervalDegreeFactory.UNKNOWN : factory.Unknown();		
+		float low = 0;
+		float upp = 0;
+		
+		IntervalDegree prem = (IntervalDegree) args[0];
+		IntervalDegree conc = (IntervalDegree) args[1];
+		
+		
+		low = Math.min(1, 1 - prem.getUpp() + conc.getLow());
+		upp = Math.min(1, 1 - prem.getLow() + conc.getUpp());
+		return new IntervalDegree(low, upp);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args, IDegreeFactory factory) {
+		if (args == null || args.size() == 0)
+			return factory == null ? IntervalDegreeFactory.UNKNOWN : factory.Unknown();		
+		float low = 0;
+		float upp = 0;
+		
+		Iterator<? extends IDegree> iter = args.iterator();
+		IntervalDegree prem = (IntervalDegree) iter.next();
+		IntervalDegree conc = (IntervalDegree) iter.next();
+		
+		
+		low = Math.min(1, 1 - prem.getUpp() + conc.getLow());
+		upp = Math.min(1, 1 - prem.getLow() + conc.getUpp());
+		return new IntervalDegree(low, upp);
+	}
+
+	public String getName() {
+		return "i_ximp";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,41 @@
+package org.drools.degrees.operators.simple;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.SimpleDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.IDiscountOperator;
+
+public class SimpleDiscountOperator implements IDiscountOperator {
+
+		
+	private SimpleDegree unk;
+	
+	public SimpleDiscountOperator(SimpleDegree unk) {
+		this.unk = unk;
+	}
+	
+	public IDegree discount(IDegree source, float strength) {
+		float val = (1-strength)*unk.getValue() + strength*source.getDegree().getValue();
+		return new SimpleDegree(val);
+	}
+
+	public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+		return discount(args[0], args[1].getDegree().getValue());
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args,
+			IDegreeFactory factory) {
+		Iterator<? extends IDegree> iter = args.iterator();
+		IDegree arg = iter.next();
+		IDegree wgt = iter.next();
+		return discount(arg, wgt.getDegree().getValue());
+	}
+
+	public String getName() {
+		return "disc";
+	}
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountStrategy.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,45 @@
+package org.drools.degrees.operators.simple;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IDiscountOperator;
+import org.drools.degrees.operators.IDiscountStrategy;
+
+public class SimpleDiscountStrategy implements IDiscountStrategy {
+	
+	private IDiscountOperator discOp;
+
+	public SimpleDiscountStrategy(IDiscountOperator discountOperator) {
+		discOp = discountOperator;
+	}
+
+	public IDegree[] discount(IDegree[] args, boolean[] flags, IDegreeFactory factory) {
+		float confMax = 0;
+		
+		IDegree[] ans = new IDegree[args.length];
+		
+		for (int j = 0; j < args.length; j++) {
+			if (flags[j])
+				confMax = Math.max(confMax, args[j].getConfidence(factory.isClosedWorldAssumption()));
+		}
+		
+		for (int j = 0; j < args.length; j++) {
+			//float weak = Math.max(0 , confMax - args[j].getConfidence());
+			
+			float strength;
+			float c0 = args[j].getConfidence(factory.isClosedWorldAssumption());
+			if (flags[j]) {
+				//weaken weaker defeaters
+				strength = 1 - (confMax - c0);
+			} else {
+				//weaken the non-killers
+				strength = 1 - confMax;
+			}
+			
+			ans[j] = discOp.discount(args[j], strength);
+		}
+		return ans;
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,40 @@
+package org.drools.degrees.operators.simple;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.SimpleDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+
+public class SimpleLukasImplication implements IDegreeCombiner {
+
+	
+	public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+		if (args == null || args.length < 2)
+			return factory == null ? SimpleDegree.UNKNOWN(true) : factory.Unknown();		
+		float ans = 1 - args[0].getDegree().getValue() + args[1].getDegree().getValue();
+		
+		
+		return new SimpleDegree(Math.min(1,ans));
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args, IDegreeFactory factory) {
+		if (args == null || args.size() < 2)
+			return factory == null ? SimpleDegree.UNKNOWN(true) : factory.Unknown();		
+		Iterator<? extends IDegree> iter = args.iterator();
+		float ans = 1 - iter.next().getDegree().getValue() + iter.next().getDegree().getValue();
+		
+		
+		return new SimpleDegree(Math.min(1,ans));
+		
+	}
+
+	public String getName() {
+		return "lukImp";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,54 @@
+package org.drools.degrees.operators.simple;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.SimpleDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.IDiscountStrategy;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class SimpleMaxMergeStrategy implements IMergeStrategy {
+
+	public IDegree eval(IDegree[] degrees, boolean[] kFlags, INullHandlingStrategy nullStrat, IDegreeFactory factory) {
+		IDegree[] args = new IDegree[degrees.length];
+		if (factory == null) {
+			factory = new SimpleDegreeFactory();
+			factory.setClosedWorldAssumption(true);
+		}
+		
+		for (int j = 0; j < degrees.length; j++)
+			args[j] = degrees[j] == null ? nullStrat.convertNull(factory) : degrees[j];
+		
+		if (kFlags != null) {
+			IDiscountStrategy discountStrat = factory.getDiscountStrategy();
+			args = discountStrat.discount(args, kFlags,factory);
+		}
+		
+		
+		float val = factory.Unknown().getDegree().getValue();
+		for (IDegree deg : args) {					
+				val = Math.max(val,deg.getDegree().getValue());		
+		}
+		
+		
+		
+		return new SimpleDegree(val);
+	}
+
+	public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+		return eval(args, null, factory.getNullHandlingStrategy(),factory);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getName() {
+		return "max";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,54 @@
+package org.drools.degrees.operators.simple;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.SimpleDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.IDiscountStrategy;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class SimpleMinMergeStrategy implements IMergeStrategy {
+
+	public IDegree eval(IDegree[] degrees, boolean[] kFlags, INullHandlingStrategy nullStrat, IDegreeFactory factory) {
+		IDegree[] args = new IDegree[degrees.length];
+
+		if (factory == null) {			
+			factory = new SimpleDegreeFactory();
+			factory.setClosedWorldAssumption(false);
+		}
+		
+
+		for (int j = 0; j < degrees.length; j++)
+			args[j] = degrees[j] == null ? nullStrat.convertNull(factory) : degrees[j];
+		
+		if (kFlags != null) {
+			IDiscountStrategy discountStrat = factory.getDiscountStrategy();
+			args = discountStrat.discount(args, kFlags,factory);
+		}
+		
+		
+		float val = factory.Unknown().getDegree().getValue();
+		for (IDegree deg : args) {				
+				val = Math.min(val,deg.getDegree().getValue());		
+		}
+		
+		return new SimpleDegree(val);
+	}
+
+	public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+		return eval(args, null, factory.getNullHandlingStrategy(),factory);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public String getName() {
+		return "max";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/EqualsEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/EqualsEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/EqualsEvaluatorDefinition.java	2009-05-22 02:46:14 UTC (rev 26666)
@@ -0,0 +1,122 @@
+package org.drools.fuzzy.evaluators;
+
+
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseEvaluator;
+import org.drools.base.BaseImperfectEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ImperfectAbstractEvaluatorDefinition;
+import org.drools.base.evaluators.ImperfectEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.EvaluatorDefinition.Target;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.rule.VariableRestriction.ObjectVariableContextEntry;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.InternalReadAccessor;
+
+
+
+
+
+
+
+/**
+ * 
+ * @author sotty
+
+ *
+ */
+public class EqualsEvaluatorDefinition 
+	extends ImperfectAbstractEvaluatorDefinition {
+	
+	
+	
+	
+	
+	
+		
+	
+	
+	
+	public static final Operator   EQUALS         = Operator.addOperatorToRegistry( "equals",
+            										false );
+
+	private static final String[]  SUPPORTED_IDS = {EQUALS.getOperatorString()};
+
+	
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText, Target left, Target right) {
+		
+		if ( this.cache == Collections.EMPTY_MAP ) {
+            this.cache = new HashMap<String, Evaluator>();
+        }
+        String key = isNegated + ":" + parameterText;
+        Evaluator eval = this.cache.get( key );
+        if ( eval == null ) {
+            eval = new EqualsEvaluator( type,
+                                       isNegated,
+                                       parameterText );
+            this.cache.put( key,
+                            eval );
+        }
+        return eval;
+                        
+	}
+
+	
+	
+	/**
+	 * Operator is known as "equals"
+	 */
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	public class EqualsEvaluator extends BaseImperfectEvaluator {
+
+		
+		public EqualsEvaluator(ValueType type, boolean isNegated,
+				String parameterText) {
+			super(type, EqualsEvaluatorDefinition.EQUALS, parameterText);
+		}
+
+		@Override
+		protected IDegree eval(Object left, Object right, IDegreeFactory factory) {
+			if (left == null || right == null)
+				return factory.Unknown();
+			return factory.fromBoolean(left.equals(right));
+		}
+				
+
+	}
+
+	
+	
+	
+	
+	
+	
+	
+}




More information about the jboss-svn-commits mailing list