[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