[jboss-svn-commits] JBL Code SVN: r26548 - in labs/jbossrules/branches/DroolsChance/drools-compiler: src/main/java/org/drools/lang/descr and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 15 05:46:58 EDT 2009


Author: dsotty
Date: 2009-05-15 05:46:58 -0400 (Fri, 15 May 2009)
New Revision: 26548

Added:
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/CutDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/EqvDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/ForAnyDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/HedgeDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/XorDescr.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/ForAnyBuilder.java
Modified:
   labs/jbossrules/branches/DroolsChance/drools-compiler/.project
Log:
Major bugfix and extension

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/.project
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/.project	2009-05-15 09:39:03 UTC (rev 26547)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/.project	2009-05-15 09:46:58 UTC (rev 26548)
@@ -1,20 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-  <name>drools-compiler</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-api</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-    <buildCommand>
-      <name>org.maven.ide.eclipse.maven2Builder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-    <nature>org.maven.ide.eclipse.maven2Nature</nature>
-  </natures>
-</projectDescription>
\ No newline at end of file
+	<name>drools-compiler</name>
+	<comment>A rule production system</comment>
+	<projects>
+		<project>drools-api</project>
+		<project>drools-core</project>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.dltk.core.scriptbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+		<nature>org.deved.antlride.core.nature</nature>
+	</natures>
+</projectDescription>

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/CutDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/CutDescr.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/CutDescr.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,5 @@
+package org.drools.lang.descr;
+
+public class CutDescr extends BaseDescr {
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/EqvDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/EqvDescr.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/EqvDescr.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,73 @@
+package org.drools.lang.descr;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EqvDescr extends BaseDescr
+    implements
+    ConditionalElementDescr {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 400L;
+    private List              descrs           = new ArrayList();
+
+    public EqvDescr() {
+    }
+
+    public void addDescr(final BaseDescr baseDescr) {
+        this.descrs.add( baseDescr );
+    }
+
+    public void insertDescr(int index,
+                            final BaseDescr baseDescr) {
+        this.descrs.add( index,
+                         baseDescr );
+    }
+
+    public void insertBeforeLast(final Class clazz,
+                             final BaseDescr baseDescr) {
+        if ( this.descrs.isEmpty() ) {
+            addDescr( baseDescr );
+            return;
+        }
+
+        for ( int i = this.descrs.size() - 1; i >= 0; i-- ) {
+            if ( clazz.isInstance( this.descrs.get( i ) ) ) {
+                insertDescr( i,
+                             baseDescr );
+                return;
+            }
+        }
+        
+        addDescr( baseDescr );
+    }
+
+    public List getDescrs() {
+        return this.descrs;
+    }
+
+    public void addOrMerge(final BaseDescr baseDescr) {
+        if ( baseDescr instanceof AndDescr ) {
+            this.descrs.addAll( ((AndDescr) baseDescr).getDescrs() );
+        } else {
+            addDescr( baseDescr );
+        }
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/ForAnyDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/ForAnyDescr.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/ForAnyDescr.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.lang.descr;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author etirelli
+ *
+ */
+public class ForAnyDescr extends BaseDescr
+    implements
+    ConditionalElementDescr {
+
+    private static final long   serialVersionUID = 400L;
+
+    private static final String BASE_IDENTIFIER  = "$__foranyBaseIdentifier";
+
+    private List<BaseDescr>     descriptors;
+
+    public ForAnyDescr() {
+        this.descriptors = new ArrayList<BaseDescr>( 3 );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.lang.descr.ConditionalElementDescr#addDescr(org.drools.lang.descr.BaseDescr)
+     */
+    public void addDescr(final BaseDescr baseDescr) {
+        // cast to make sure we are adding a pattern descriptor
+        this.descriptors.add( baseDescr );
+    }
+
+    public void insertBeforeLast(final Class clazz,
+                                 final BaseDescr baseDescr) {
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.lang.descr.ConditionalElementDescr#getDescrs()
+     */
+    public List getDescrs() {
+        return this.descriptors;
+    }
+
+    
+    public BaseDescr getIntegrandDescr() {
+    	return this.descriptors.get(0);
+    }
+    
+    public BaseDescr getConstraintDescr() {
+    	return this.descriptors.get(1);
+    }
+    
+    public BaseDescr getWeightDescr() {
+    	return this.descriptors.get(2);
+    }
+    
+    /*
+    
+    public PatternDescr getBasePattern() {
+        if ( this.patterns.size() > 1 ) {
+            return (PatternDescr) this.patterns.get( 0 );
+        } else if ( this.patterns.size() == 1 ) {
+            // in case there is only one pattern, we do a rewrite, so:
+            // forall( Cheese( type == "stilton" ) )
+            // becomes
+            // forall( BASE_IDENTIFIER : Cheese() Cheese( this == BASE_IDENTIFIER, type == "stilton" ) )
+            PatternDescr original = (PatternDescr) this.patterns.get( 0 );
+            PatternDescr base = (PatternDescr) original.clone();
+            base.getDescrs().clear();
+            base.setIdentifier( BASE_IDENTIFIER );
+            return base;
+        }
+        return null;
+    }
+
+   
+    public List getRemainingPatterns() {
+        if ( this.patterns.size() > 1 ) {
+            return this.patterns.subList( 1,
+                                          this.patterns.size() );
+        } else if ( this.patterns.size() == 1 ) {
+            // in case there is only one pattern, we do a rewrite, so:
+            // forall( Cheese( type == "stilton" ) )
+            // becomes
+            // forall( BASE_IDENTIFIER : Cheese() Cheese( this == BASE_IDENTIFIER, type == "stilton" ) )
+            PatternDescr original = (PatternDescr) this.patterns.get( 0 );
+            PatternDescr remaining = (PatternDescr) original.clone();
+            VariableRestrictionDescr restr = new VariableRestrictionDescr( "==",
+                                                                           false,
+                                                                           null,
+                                                                           BASE_IDENTIFIER );
+            FieldConstraintDescr constr = new FieldConstraintDescr( "this" );
+            constr.addRestriction( restr );
+            remaining.addConstraint( constr );
+            return Collections.singletonList( remaining );
+        }
+        return Collections.EMPTY_LIST;
+    }
+    */
+    
+
+    public void addOrMerge(BaseDescr baseDescr) {
+        this.descriptors.add( baseDescr );
+    }
+}

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/HedgeDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/HedgeDescr.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/HedgeDescr.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,75 @@
+package org.drools.lang.descr;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HedgeDescr extends BaseDescr
+    implements
+    ConditionalElementDescr {
+
+	
+	
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 400L;
+    private final List        descrs           = new ArrayList( 1 );
+
+    public HedgeDescr() {
+    }
+
+    public HedgeDescr(final BaseDescr descr) {
+        addDescr( descr );
+    }
+
+    public void addDescr(final BaseDescr baseDescr) {
+        this.descrs.add( baseDescr );
+    }
+    
+    public void insertBeforeLast(final Class clazz ,final BaseDescr baseDescr ) { 
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
+    }    
+
+    public List getDescrs() {
+        return this.descrs;
+    }
+
+    public void addOrMerge(BaseDescr baseDescr) {
+        if( baseDescr instanceof HedgeDescr ) {
+            this.descrs.addAll( ((HedgeDescr)baseDescr).getDescrs() ); 
+        } else {
+            this.descrs.add( baseDescr );        
+        }
+    }
+
+	/**
+	 * @param modifier the modifier to set
+	 */
+	public void setModifier(String modifier) {
+		setParams(modifier);
+	}
+
+	/**
+	 * @return the modifier
+	 */
+	public String getModifier() {
+		return getParams();
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/XorDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/XorDescr.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/XorDescr.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,73 @@
+package org.drools.lang.descr;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class XorDescr extends BaseDescr
+    implements
+    ConditionalElementDescr {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 400L;
+    private List              descrs           = new ArrayList();
+
+    public XorDescr() {
+    }
+
+    public void addDescr(final BaseDescr baseDescr) {
+        this.descrs.add( baseDescr );
+    }
+
+    public void insertDescr(int index,
+                            final BaseDescr baseDescr) {
+        this.descrs.add( index,
+                         baseDescr );
+    }
+
+    public void insertBeforeLast(final Class clazz,
+                             final BaseDescr baseDescr) {
+        if ( this.descrs.isEmpty() ) {
+            addDescr( baseDescr );
+            return;
+        }
+
+        for ( int i = this.descrs.size() - 1; i >= 0; i-- ) {
+            if ( clazz.isInstance( this.descrs.get( i ) ) ) {
+                insertDescr( i,
+                             baseDescr );
+                return;
+            }
+        }
+        
+        addDescr( baseDescr );
+    }
+
+    public List getDescrs() {
+        return this.descrs;
+    }
+
+    public void addOrMerge(final BaseDescr baseDescr) {
+        if ( baseDescr instanceof AndDescr ) {
+            this.descrs.addAll( ((AndDescr) baseDescr).getDescrs() );
+        } else {
+            addDescr( baseDescr );
+        }
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/ForAnyBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/ForAnyBuilder.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/rule/builder/ForAnyBuilder.java	2009-05-15 09:46:58 UTC (rev 26548)
@@ -0,0 +1,78 @@
+package org.drools.rule.builder;
+
+import java.util.Iterator;
+
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.ForAnyDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.reteoo.builder.ReteooComponentBuilder;
+import org.drools.rule.ConditionalElement;
+import org.drools.rule.Forall;
+import org.drools.rule.Forany;
+import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
+
+public class ForAnyBuilder
+implements
+RuleConditionBuilder {
+
+	public RuleConditionElement build(final RuleBuildContext context,
+                                final BaseDescr descr) {
+		return build( context,
+				descr,
+				null );
+	}
+
+	public RuleConditionElement build(final RuleBuildContext context,
+                                final BaseDescr descr,
+                                final Pattern prefixPattern) {
+		
+		final ForAnyDescr foranyDescr = (ForAnyDescr) descr;
+		Forany forany = new Forany();
+		
+		
+		
+		
+		final RuleConditionBuilder integrandBuilder;
+		final RuleConditionBuilder constraintBuilder;
+		final RuleConditionBuilder weightBuilder;
+		
+		integrandBuilder = (RuleConditionBuilder) context.getDialect().getBuilder( foranyDescr.getIntegrandDescr().getClass() );
+		
+		
+		final RuleConditionElement integrand = integrandBuilder.build(context, foranyDescr.getIntegrandDescr()); 		
+			if ( integrand == null ) {
+				return null;
+			}
+
+		forany.setIntegrand(integrand);
+		
+		context.getBuildStack().push( forany );
+		if ( foranyDescr.getConstraintDescr() != null) {
+		
+			constraintBuilder = (RuleConditionBuilder) context.getDialect().getBuilder( foranyDescr.getConstraintDescr().getClass() );
+			
+			final RuleConditionElement constraint = constraintBuilder.build(context, foranyDescr.getConstraintDescr());
+			
+			forany.setConstraint(constraint);
+											
+		}
+		
+					
+			if (foranyDescr.getWeightDescr() != null) {
+			
+				weightBuilder = (RuleConditionBuilder) context.getDialect().getBuilder( foranyDescr.getWeightDescr().getClass() );
+				
+				final RuleConditionElement weight = weightBuilder.build(context, foranyDescr.getWeightDescr());
+				
+				forany.setWeight(weight);
+			}			
+		
+		context.getBuildStack().pop();
+		
+					
+		return forany;
+	}
+	
+}




More information about the jboss-svn-commits mailing list