[jboss-svn-commits] JBL Code SVN: r35720 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 25 15:01:38 EDT 2010


Author: tsurdilovic
Date: 2010-10-25 15:01:38 -0400 (Mon, 25 Oct 2010)
New Revision: 35720

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorRegistry.java
Log:
JBRULES-2753 : Add the StrEvaluator to the list of core evaluators


Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorRegistry.java	2010-10-25 19:01:05 UTC (rev 35719)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorRegistry.java	2010-10-25 19:01:38 UTC (rev 35720)
@@ -89,6 +89,7 @@
         this.addEvaluatorDefinition( new StartsEvaluatorDefinition() );
         this.addEvaluatorDefinition( new StartedByEvaluatorDefinition() );
         this.addEvaluatorDefinition( new CoincidesEvaluatorDefinition() );
+        this.addEvaluatorDefinition( new StrEvaluatorDefinition() );
     }
 
     /**

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java	2010-10-25 19:01:38 UTC (rev 35720)
@@ -0,0 +1,224 @@
+package org.drools.base.evaluators;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+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;
+
+/**
+ * <p>The implementation of the 'str' evaluator definition.</p>
+ * 
+ * <p>The <b><code>str</code></b> compares two string values.</p> 
+ * 
+ * <p>Lets look at some examples:</p>
+ * 
+ * <pre>$m : Message( routingValue str[startsWith] "R1" )</pre>
+ * <pre>$m : Message( routingValue str[endsWith] "R2" )</pre>
+ * <pre>$m : Message( routingValue str[length] 17 )</pre>
+ * 
+ *
+ * @author tsurdilo
+ */
+public class StrEvaluatorDefinition implements EvaluatorDefinition {
+	public static final Operator STR_COMPARE = Operator.addOperatorToRegistry(
+			"str", false);
+	public static final Operator NOT_STR_COMPARE = Operator
+			.addOperatorToRegistry("str", true);
+	private static final String[] SUPPORTED_IDS = { STR_COMPARE
+			.getOperatorString() };
+	
+	public enum Operations {
+		startsWith, endsWith, length;
+	}
+	
+	private Evaluator[] evaluator;
+
+	/**
+     * @inheridDoc
+     */
+	public Evaluator getEvaluator(ValueType type, Operator operator) {
+		return this.getEvaluator(type, operator.getOperatorString(), operator
+				.isNegated(), null);
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public Evaluator getEvaluator(ValueType type, Operator operator,
+			String parameterText) {
+		return this.getEvaluator(type, operator.getOperatorString(), operator
+				.isNegated(), parameterText);
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText) {
+		return getEvaluator(type, operatorId, isNegated, parameterText,
+				Target.FACT, Target.FACT);
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText, Target leftTarget,
+			Target rightTarget) {
+		StrEvaluator evaluator = new StrEvaluator(type, isNegated);
+		evaluator.setParameterText(parameterText);
+		return evaluator;		
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public Target getTarget() {
+		return Target.FACT;
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public boolean isNegatable() {
+		return true;
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public boolean supportsType(ValueType type) {
+		return true;
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public void readExternal(ObjectInput in) throws IOException,
+			ClassNotFoundException {
+		evaluator = (Evaluator[]) in.readObject();
+	}
+
+	/**
+     * @inheridDoc
+     */
+	public void writeExternal(ObjectOutput out) throws IOException {
+		out.writeObject(evaluator);
+	}
+
+	public static class StrEvaluator extends BaseEvaluator {
+		private Operations parameter;
+
+		public void setParameterText(String parameterText) {
+			this.parameter = Operations.valueOf(parameterText);
+		}
+
+		public Operations getParameter() {
+			return parameter;
+		}
+
+		public StrEvaluator(final ValueType type, final boolean isNegated) {
+			super(type, isNegated ? NOT_STR_COMPARE : STR_COMPARE);
+		}
+
+		/**
+	     * @inheridDoc
+	     */
+		public boolean evaluate(InternalWorkingMemory workingMemory,
+				InternalReadAccessor extractor, Object object, FieldValue value) {
+			final Object objectValue = extractor
+					.getValue(workingMemory, object);
+				switch (parameter) {
+				case startsWith:
+					return this.getOperator().isNegated() ^ (((String)objectValue).startsWith( (String)value.getValue() ));
+				case endsWith:
+					return this.getOperator().isNegated() ^ (((String)objectValue).endsWith( (String)value.getValue() ));
+				case length:
+					return this.getOperator().isNegated() ^ (((String)objectValue).length() == ((Long) value.getValue()).longValue() );
+				default:
+					throw new IllegalAccessError("Illegal str comparison parameter");
+				}
+		}
+
+		public boolean evaluate(InternalWorkingMemory workingMemory,
+				InternalReadAccessor leftExtractor, Object left,
+				InternalReadAccessor rightExtractor, Object right) {
+			final Object value1 = leftExtractor.getValue(workingMemory, left);
+			final Object value2 = rightExtractor.getValue(workingMemory, right);
+			
+				switch (parameter) {
+				case startsWith:
+					return this.getOperator().isNegated() ^ (((String)value1).startsWith( (String) value2 ));
+				case endsWith:
+					return this.getOperator().isNegated() ^ (((String)value1).endsWith( (String) value2 ));
+				case length:
+					return this.getOperator().isNegated() ^ (((String)value1).length() == ((Long) value2).longValue() );
+				default:
+					throw new IllegalAccessError("Illegal str comparison parameter");
+				}				
+			
+		}
+
+		public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object right) {
+			
+				switch (parameter) {
+				case startsWith:
+					return this.getOperator().isNegated() ^ (((String)right).startsWith( (String)((ObjectVariableContextEntry)
+							context).left) );
+				case endsWith:
+					return this.getOperator().isNegated() ^ (((String)right).endsWith( (String)((ObjectVariableContextEntry)
+							context).left));
+				case length:
+					return this.getOperator().isNegated() ^ (((String)right).length() ==  ((Long)((ObjectVariableContextEntry)
+							context).left).longValue());
+				default:
+					throw new IllegalAccessError("Illegal str comparison parameter");
+				}
+			
+		}
+
+		public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object left) {
+				switch (parameter) {
+				case startsWith:
+					return this.getOperator().isNegated() ^ (((String)left).startsWith((String)((ObjectVariableContextEntry)
+							context).right));
+				case endsWith:
+					return this.getOperator().isNegated() ^ (((String)left).endsWith((String)((ObjectVariableContextEntry)
+							context).right));
+				case length:
+					return this.getOperator().isNegated() ^ (((String)left).length() == ((Long)((ObjectVariableContextEntry)
+							context).right).longValue());
+				default:
+					throw new IllegalAccessError("Illegal str comparison parameter");
+				}
+			
+		}
+
+		@Override
+		public String toString() {
+			return "StrEvaluatorDefinition str";
+
+		}
+
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the jboss-svn-commits mailing list