[jboss-svn-commits] JBL Code SVN: r15645 - labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 8 09:55:23 EDT 2007
Author: fmeyer
Date: 2007-10-08 09:55:23 -0400 (Mon, 08 Oct 2007)
New Revision: 15645
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
Log:
JBRULES-1252 - DrlDumper does not dump import functions
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-10-08 12:49:23 UTC (rev 15644)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java 2007-10-08 13:55:23 UTC (rev 15645)
@@ -1,497 +1,498 @@
-package org.drools.lang;
-
-/*
- * Author Jayaram C S
- *
- * 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.Iterator;
-import java.util.List;
-
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.AttributeDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.GlobalDescr;
-import org.drools.lang.descr.ImportDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.PackageDescrDumper;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
-import org.drools.util.ReflectiveVisitor;
-
-/**
- *
- * @author <a href="mailto:jayaramcs at gmail.com">Author Jayaram C S</a>
- *
- */
-public class DrlDumper extends ReflectiveVisitor
- implements
- PackageDescrDumper {
-
- private StringBuffer drlDump;
- private static final String eol = System.getProperty( "line.separator" );
- private String template;
- private boolean needsBracket = false;
-
- public synchronized String dump(final PackageDescr packageDescr) {
- this.drlDump = new StringBuffer();
- visitPackageDescr( packageDescr );
- return this.drlDump.toString();
- }
-
- public String getTemplate() {
- return this.template;
- }
-
- public void visitAndDescr(final AndDescr descr) {
- this.template = new String();
- if ( !descr.getDescrs().isEmpty() ) {
- this.template = processDescrList( descr.getDescrs() );
- } else {
- this.template = "";
- }
- }
-
- public void visitAttributeDescr(final AttributeDescr attributeDescr) {
- this.template = new String();
- final String name = attributeDescr.getName();
- String value = null;
- if ( name.equals( "agenda-group" ) || name.equals( "activation-group" ) || name.equals( "ruleflow-group" ) ) {
- // These attributes may need quotes around them, if they have spaces, so add anyway
- value = "\"" + attributeDescr.getValue() + "\"";
- } else {
- value = attributeDescr.getValue();
- }
- this.template = "\t " + name + " " + value + DrlDumper.eol;
- }
-
- public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
- if ( !descr.getRestrictions().isEmpty() ) {
- this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestriction(),
- false );
- }
- }
-
- public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
- this.template = new String();
- this.template = descr.getEvaluator() + " " + descr.getIdentifier();
- }
-
- public void visitPatternDescr(final PatternDescr descr) {
- StringBuffer buf = new StringBuffer();
- buf.append( "\t\t" );
- if ( descr.getIdentifier() != null ) {
- buf.append( descr.getIdentifier() );
- buf.append( " : " );
-
- }
- buf.append( descr.getObjectType() );
- buf.append( "( " );
- if ( !descr.getConstraint().getDescrs().isEmpty() ) {
- buf.append( processColoumnConstraintList( descr.getConstraint().getDescrs() ) );
- }
- buf.append( " )" );
- if( descr.getSource() != null ) {
- buf.append( " from " );
- this.template = buf.toString();
- visit( descr.getSource() );
- buf.append( this.template );
- }
- this.template = buf.toString();
- }
-
- public void visitEvalDescr(final EvalDescr descr) {
- this.template = new String();
- this.template = "\t\teval ( " + descr.getContent() + " )" + DrlDumper.eol;
- }
-
- public void visitExistsDescr(final ExistsDescr descr) {
- this.template = new String();
- if ( !descr.getDescrs().isEmpty() ) {
- this.template = "\t\texists " + processDescrList( descr.getDescrs() ) + ";";
- } else {
- this.template = "";
- }
- }
-
- public void visitCollectDescr(final CollectDescr descr) {
- String tmpstr = new String();
- tmpstr += " collect (";
- visitPatternDescr( descr.getInputPattern() );
- tmpstr += this.template.substring( 2 );
- this.template = tmpstr + ");";
- }
-
- public void visitAccumulateDescr(final AccumulateDescr descr) {
- String tmpstr = new String();
- tmpstr += " accumulate (";
- if ( descr.isSinglePattern() ) {
- visitPatternDescr( descr.getInputPattern() );
- } else {
- visit(descr.getInput());
- }
- tmpstr += this.template.substring( 2 );
-
- if ( descr.isExternalFunction() ) {
- tmpstr += "," + descr.getFunctionIdentifier() + "(" + descr.getExpression() + ")";
- } else {
- tmpstr += ", init(" + descr.getInitCode() + "), ";
- tmpstr += "action(" + descr.getActionCode() + "), ";
- if( descr.getReverseCode() != null ) {
- tmpstr += " reverse(" + descr.getReverseCode() +"), ";
- }
- tmpstr += "result(" + descr.getResultCode() + ")";
- }
- this.template = tmpstr + ");";
- }
-
- public void visitFromDescr(final FromDescr descr) {
- this.template = descr.getDataSource().toString();
- }
-
- public void visitForallDescr(final ForallDescr descr) {
- String localstr = new String();
- localstr += "\t\tforall ( ";
- localstr += DrlDumper.eol;
-
- for ( final Iterator ite = descr.getDescrs().iterator(); ite.hasNext(); ) {
- Object obj = ite.next();
- visit( obj );
- localstr += this.template + DrlDumper.eol;
- }
-
- this.template = localstr;
- this.template += "\t\t)";
- this.template += DrlDumper.eol;
- }
-
- public void visitFieldBindingDescr(final FieldBindingDescr descr) {
- this.template = new String();
- this.template = descr.getIdentifier() + " : " + descr.getFieldName();
- }
-
- public void visitFunctionDescr(final FunctionDescr functionDescr) {
- this.template = new String();
- final String parameterTemplate = processParameters( functionDescr.getParameterNames(),
- functionDescr.getParameterTypes() );
-
- this.template = "function " + functionDescr.getReturnType() + " " + functionDescr.getName() + "(" + parameterTemplate + "){" +
-
- functionDescr.getText() + DrlDumper.eol + "}" + DrlDumper.eol;
-
- }
-
- public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
- this.template = "";
- String text = descr.getText();
- if ( text == null || descr.getType() == LiteralRestrictionDescr.TYPE_NULL ) {
- text = "null";
- } else if( descr.getType() == LiteralRestrictionDescr.TYPE_NUMBER ) {
- try {
- Integer.parseInt( text );
- } catch ( final NumberFormatException e ) {
- text = "\"" + text + "\"";
- }
- } else if( descr.getType() == LiteralRestrictionDescr.TYPE_STRING ) {
- text = "\"" + text + "\"";
- }
- this.template = descr.getEvaluator() + " " + text;
- }
-
- public void visitQualifiedIdentifierRestrictionDescr(final QualifiedIdentifierRestrictionDescr descr) {
- this.template = descr.getEvaluator() + " " + descr.getText();
- }
-
- public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
- String tmp = this.processFieldConstraint( descr,
- true );
- this.template = tmp;
- }
-
- public void visitNotDescr(final NotDescr descr) {
- this.template = new String();
- if ( !descr.getDescrs().isEmpty() ) {
- this.template = "\t not ( " + processDescrList( descr.getDescrs() ) +")";
- } else {
- this.template = "";
- }
- }
-
- public void visitOrDescr(final OrDescr descr) {
- this.template = new String();
- if ( !descr.getDescrs().isEmpty() ) {
- this.template = processOrDescrList( descr.getDescrs() );
- } else {
- this.template = " ";
- }
- }
-
- public void visitPackageDescr(final PackageDescr packageDescr) {
- final String packageName = packageDescr.getName();
- final String xmlString = "package " + packageName + ";" + DrlDumper.eol + DrlDumper.eol;
-
- appendDrlDump( xmlString );
- if ( packageDescr.getImports() != null ) {
- appendDrlDump( processImportsList( packageDescr.getImports() ) );
- }
- if ( packageDescr.getGlobals() != null ) {
- appendDrlDump( processGlobalsList( packageDescr.getGlobals() ) );
- }
- if ( packageDescr.getFunctions() != null ) {
- appendDrlDump( processFunctionsList( packageDescr.getFunctions() ) );
- }
- if ( packageDescr.getRules() != null ) {
- appendDrlDump( processRules( packageDescr.getRules() ) );
- }
-
- }
-
- public void visitPredicateDescr(final PredicateDescr descr) {
- this.template = new String();
- this.template = "eval( " + descr.getContent() + " )";
-
- }
-
- public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
- this.template = new String();
- this.template = descr.getEvaluator() + " ( " + descr.getContent() + ")";
- }
-
- public void visitQueryDescr(final QueryDescr descr) {
- this.template = new String();
- this.template = "query \"" + descr.getName() + "\"" + processDescrList( descr.getLhs().getDescrs() ) + "end";
- }
-
-
- private String processRules(final List rules) {
- String ruleList = "";
- Object ruleobj;
- for ( final Iterator iterator = rules.iterator(); iterator.hasNext(); ) {
- ruleobj = iterator.next();
- if ( ruleobj instanceof QueryDescr ) {
- visitQueryDescr((QueryDescr) ruleobj);
- ruleList += this.template;
- break;
- }
-
- final RuleDescr ruleDescr = (RuleDescr) ruleobj;
- String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
- final String attribute = processAttribute( ruleDescr.getAttributes() );
- String lhs = "";
- if ( !ruleDescr.getLhs().getDescrs().isEmpty() ) {
- lhs = "\t when" + DrlDumper.eol + processDescrList( ruleDescr.getLhs().getDescrs() ) + DrlDumper.eol;
- } else {
-
- lhs = "\t when";
- }
-
- String rhs = (String) ruleDescr.getConsequence();
- if ( rhs == null ) {
- rhs = "\t then" + DrlDumper.eol + "\t";
- } else {
- rhs = "\t then" + DrlDumper.eol + ruleDescr.getConsequence();
- }
-
- rule += attribute;
- rule += lhs;
- rule += rhs;
- rule += "end" + DrlDumper.eol;
- ruleList += rule;
- }
-
- return ruleList + DrlDumper.eol;
- }
-
- private String processOrDescrList(final List descr) {
- String descrString = "";
- for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
- visit( iterator.next() );
- descrString += this.template;
- if ( descrString.endsWith( DrlDumper.eol ) ) {
- descrString = descrString.substring( 0,
- descrString.indexOf( DrlDumper.eol ) );
- }
- descrString += " || ";
- }
- return descrString.substring( 0,
- descrString.length() - 4 );
- }
-
- private String processColoumnConstraintList(final List descr) {
- String descrString = "";
- Object previous = null;
- for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
-
- final Object temp = iterator.next();
- visit( temp );
-
- if ( previous == null ) {
- descrString += this.template;
- } else if ( previous instanceof FieldBindingDescr && !(temp instanceof FieldBindingDescr) && !(temp instanceof PredicateDescr) ) {
- final FieldConstraintDescr tempDescr = (FieldConstraintDescr) temp;
- final FieldBindingDescr previousDescr = (FieldBindingDescr) previous;
- if ( tempDescr.getFieldName().equals( previousDescr.getFieldName() ) ) {
- // as its a binding followed by a field constraint we need to remove
- // the extra field name
- descrString += this.template.substring( tempDescr.getFieldName().length() + 1 );
- } else {
- descrString += " , " + this.template;
- }
- } else {
- descrString += " , " + this.template;
- }
-
- previous = temp;
-
- }
- return descrString.substring( 0,
- descrString.length() );
- }
-
- private String processFieldConstraint(final RestrictionConnectiveDescr restriction,
- boolean addBrackets) {
- String descrString = "";
- String connective = "";
- boolean bracketTmp = this.needsBracket;
- this.needsBracket = restriction.getRestrictions().size() > 1;
-
- if ( restriction.getConnective() == RestrictionConnectiveDescr.OR ) {
- connective = " || ";
- } else {
- connective = " && ";
- }
- if ( addBrackets && bracketTmp ) {
- descrString += "( ";
- }
- for ( final Iterator it = restriction.getRestrictions().iterator(); it.hasNext(); ) {
- final Object temp = it.next();
- visit( temp );
- descrString += this.template;
- if ( it.hasNext() ) {
- descrString += connective;
- }
- }
- if ( addBrackets && bracketTmp ) {
- descrString += " )";
- }
- this.needsBracket = bracketTmp;
- return descrString;
- }
-
- private String processDescrList(final List descr) {
- String descrString = "";
- for ( final Iterator ite = descr.iterator(); ite.hasNext(); ) {
-
- Object obj = ite.next();
-
- visit( obj );
- descrString += this.template;
-
- if ( obj.getClass().equals( PatternDescr.class ) || obj.getClass().equals( CollectDescr.class ) ) {
- descrString += DrlDumper.eol;
- } else if ( ite.hasNext() ) {
- descrString += " && ";
- }
- }
- return descrString;
- }
-
- private String processFunctionsList(final List functions) {
- String functionList = "";
-
- for ( final Iterator it = functions.iterator(); it.hasNext(); ) {
- visit( it.next() );
- functionList += this.template;
- }
-
- return functionList + DrlDumper.eol;
- }
-
- private String processAttribute(final List attributes) {
-
- String attributeList = "";
- for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
- final AttributeDescr attributeDescr = (AttributeDescr) it.next();
- visit( attributeDescr );
- attributeList += this.template;
- }
- return attributeList;
- }
-
- private String processParameters(final List parameterNames,
- final List parameterTypes) {
- if ( parameterNames.isEmpty() ) {
- return "";
- }
-
- String paramList = "";
- int i = 0;
- for ( final Iterator it = parameterNames.iterator(); it.hasNext(); i++ ) {
- final String paramName = (String) it.next();
- final String paramType = (String) parameterTypes.get( i );
- final String paramTemplate = paramType + " " + paramName + ",";
- paramList += paramTemplate;
- }
- paramList = paramList.substring( 0,
- paramList.length() - 1 );
- return paramList;
- }
-
- private String processGlobalsList(final List globals) {
- String globalList = "";
-
- for ( final Iterator it = globals.iterator(); it.hasNext(); ) {
- final GlobalDescr global = (GlobalDescr) it.next();
- final String identifier = global.getIdentifier();
- final String type = global.getType();
- final String globalTemplate = "global " + type + " " + identifier + ";" + DrlDumper.eol;
- globalList += globalTemplate;
- }
-
- return globalList + DrlDumper.eol;
- }
-
- private String processImportsList(final List imports) {
- String importList = "";
-
- for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
- final String importString = ((ImportDescr) it.next()).getTarget();
- final String importTemplate = "import " + importString + ";" + DrlDumper.eol;
- importList += importTemplate;
- }
- return importList + DrlDumper.eol;
- }
-
- private void appendDrlDump(final String temp) {
- this.drlDump.append( temp );
- }
-
+package org.drools.lang;
+
+/*
+ * Author Jayaram C S
+ *
+ * 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.Iterator;
+import java.util.List;
+
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.FunctionImportDescr;
+import org.drools.lang.descr.GlobalDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PackageDescrDumper;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.util.ReflectiveVisitor;
+
+/**
+ *
+ * @author <a href="mailto:jayaramcs at gmail.com">Author Jayaram C S</a>
+ *
+ */
+public class DrlDumper extends ReflectiveVisitor
+ implements
+ PackageDescrDumper {
+
+ private StringBuffer drlDump;
+ private static final String eol = System.getProperty( "line.separator" );
+ private String template;
+ private boolean needsBracket = false;
+
+ public synchronized String dump(final PackageDescr packageDescr) {
+ this.drlDump = new StringBuffer();
+ visitPackageDescr( packageDescr );
+ return this.drlDump.toString();
+ }
+
+ public String getTemplate() {
+ return this.template;
+ }
+
+ public void visitAndDescr(final AndDescr descr) {
+ this.template = new String();
+ if ( !descr.getDescrs().isEmpty() ) {
+ this.template = processDescrList( descr.getDescrs() );
+ } else {
+ this.template = "";
+ }
+ }
+
+ public void visitAttributeDescr(final AttributeDescr attributeDescr) {
+ this.template = new String();
+ final String name = attributeDescr.getName();
+ String value = null;
+ if ( name.equals( "agenda-group" ) || name.equals( "activation-group" ) || name.equals( "ruleflow-group" ) ) {
+ // These attributes may need quotes around them, if they have spaces, so add anyway
+ value = "\"" + attributeDescr.getValue() + "\"";
+ } else {
+ value = attributeDescr.getValue();
+ }
+ this.template = "\t " + name + " " + value + DrlDumper.eol;
+ }
+
+ public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
+ if ( !descr.getRestrictions().isEmpty() ) {
+ this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestriction(),
+ false );
+ }
+ }
+
+ public void visitVariableRestrictionDescr(final VariableRestrictionDescr descr) {
+ this.template = new String();
+ this.template = descr.getEvaluator() + " " + descr.getIdentifier();
+ }
+
+ public void visitPatternDescr(final PatternDescr descr) {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "\t\t" );
+ if ( descr.getIdentifier() != null ) {
+ buf.append( descr.getIdentifier() );
+ buf.append( " : " );
+
+ }
+ buf.append( descr.getObjectType() );
+ buf.append( "( " );
+ if ( !descr.getConstraint().getDescrs().isEmpty() ) {
+ buf.append( processColoumnConstraintList( descr.getConstraint().getDescrs() ) );
+ }
+ buf.append( " )" );
+ if( descr.getSource() != null ) {
+ buf.append( " from " );
+ this.template = buf.toString();
+ visit( descr.getSource() );
+ buf.append( this.template );
+ }
+ this.template = buf.toString();
+ }
+
+ public void visitEvalDescr(final EvalDescr descr) {
+ this.template = new String();
+ this.template = "\t\teval ( " + descr.getContent() + " )" + DrlDumper.eol;
+ }
+
+ public void visitExistsDescr(final ExistsDescr descr) {
+ this.template = new String();
+ if ( !descr.getDescrs().isEmpty() ) {
+ this.template = "\t\texists " + processDescrList( descr.getDescrs() ) + ";";
+ } else {
+ this.template = "";
+ }
+ }
+
+ public void visitCollectDescr(final CollectDescr descr) {
+ String tmpstr = new String();
+ tmpstr += " collect (";
+ visitPatternDescr( descr.getInputPattern() );
+ tmpstr += this.template.substring( 2 );
+ this.template = tmpstr + ");";
+ }
+
+ public void visitAccumulateDescr(final AccumulateDescr descr) {
+ String tmpstr = new String();
+ tmpstr += " accumulate (";
+ if ( descr.isSinglePattern() ) {
+ visitPatternDescr( descr.getInputPattern() );
+ } else {
+ visit(descr.getInput());
+ }
+ tmpstr += this.template.substring( 2 );
+
+ if ( descr.isExternalFunction() ) {
+ tmpstr += "," + descr.getFunctionIdentifier() + "(" + descr.getExpression() + ")";
+ } else {
+ tmpstr += ", init(" + descr.getInitCode() + "), ";
+ tmpstr += "action(" + descr.getActionCode() + "), ";
+ if( descr.getReverseCode() != null ) {
+ tmpstr += " reverse(" + descr.getReverseCode() +"), ";
+ }
+ tmpstr += "result(" + descr.getResultCode() + ")";
+ }
+ this.template = tmpstr + ");";
+ }
+
+ public void visitFromDescr(final FromDescr descr) {
+ this.template = descr.getDataSource().toString();
+ }
+
+ public void visitForallDescr(final ForallDescr descr) {
+ String localstr = new String();
+ localstr += "\t\tforall ( ";
+ localstr += DrlDumper.eol;
+
+ for ( final Iterator ite = descr.getDescrs().iterator(); ite.hasNext(); ) {
+ Object obj = ite.next();
+ visit( obj );
+ localstr += this.template + DrlDumper.eol;
+ }
+
+ this.template = localstr;
+ this.template += "\t\t)";
+ this.template += DrlDumper.eol;
+ }
+
+ public void visitFieldBindingDescr(final FieldBindingDescr descr) {
+ this.template = new String();
+ this.template = descr.getIdentifier() + " : " + descr.getFieldName();
+ }
+
+ public void visitFunctionDescr(final FunctionDescr functionDescr) {
+ this.template = new String();
+ final String parameterTemplate = processParameters( functionDescr.getParameterNames(),
+ functionDescr.getParameterTypes() );
+
+ this.template = "function " + functionDescr.getReturnType() + " " + functionDescr.getName() + "(" + parameterTemplate + "){" +
+
+ functionDescr.getText() + DrlDumper.eol + "}" + DrlDumper.eol;
+
+ }
+
+ public void visitLiteralRestrictionDescr(final LiteralRestrictionDescr descr) {
+ this.template = "";
+ String text = descr.getText();
+ if ( text == null || descr.getType() == LiteralRestrictionDescr.TYPE_NULL ) {
+ text = "null";
+ } else if( descr.getType() == LiteralRestrictionDescr.TYPE_NUMBER ) {
+ try {
+ Integer.parseInt( text );
+ } catch ( final NumberFormatException e ) {
+ text = "\"" + text + "\"";
+ }
+ } else if( descr.getType() == LiteralRestrictionDescr.TYPE_STRING ) {
+ text = "\"" + text + "\"";
+ }
+ this.template = descr.getEvaluator() + " " + text;
+ }
+
+ public void visitQualifiedIdentifierRestrictionDescr(final QualifiedIdentifierRestrictionDescr descr) {
+ this.template = descr.getEvaluator() + " " + descr.getText();
+ }
+
+ public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
+ String tmp = this.processFieldConstraint( descr,
+ true );
+ this.template = tmp;
+ }
+
+ public void visitNotDescr(final NotDescr descr) {
+ this.template = new String();
+ if ( !descr.getDescrs().isEmpty() ) {
+ this.template = "\t not ( " + processDescrList( descr.getDescrs() ) +")";
+ } else {
+ this.template = "";
+ }
+ }
+
+ public void visitOrDescr(final OrDescr descr) {
+ this.template = new String();
+ if ( !descr.getDescrs().isEmpty() ) {
+ this.template = processOrDescrList( descr.getDescrs() );
+ } else {
+ this.template = " ";
+ }
+ }
+
+ public void visitPackageDescr(final PackageDescr packageDescr) {
+ final String packageName = packageDescr.getName();
+ final String xmlString = "package " + packageName + ";" + DrlDumper.eol + DrlDumper.eol;
+
+ appendDrlDump( xmlString );
+ if ( packageDescr.getImports() != null ) {
+ appendDrlDump( processImportsList( packageDescr.getImports() ) );
+ }
+ if ( packageDescr.getGlobals() != null ) {
+ appendDrlDump( processGlobalsList( packageDescr.getGlobals() ) );
+ }
+ if ( packageDescr.getFunctions() != null ) {
+ appendDrlDump( processFunctionsList( packageDescr.getFunctions() ) );
+ }
+ if ( packageDescr.getRules() != null ) {
+ appendDrlDump( processRules( packageDescr.getRules() ) );
+ }
+
+ }
+
+ public void visitPredicateDescr(final PredicateDescr descr) {
+ this.template = new String();
+ this.template = "eval( " + descr.getContent() + " )";
+
+ }
+
+ public void visitReturnValueRestrictionDescr(final ReturnValueRestrictionDescr descr) {
+ this.template = new String();
+ this.template = descr.getEvaluator() + " ( " + descr.getContent() + ")";
+ }
+
+ public void visitQueryDescr(final QueryDescr descr) {
+ this.template = new String();
+ this.template = "query \"" + descr.getName() + "\"" + processDescrList( descr.getLhs().getDescrs() ) + "end";
+ }
+
+
+ private String processRules(final List rules) {
+ String ruleList = "";
+ Object ruleobj;
+ for ( final Iterator iterator = rules.iterator(); iterator.hasNext(); ) {
+ ruleobj = iterator.next();
+ if ( ruleobj instanceof QueryDescr ) {
+ visitQueryDescr((QueryDescr) ruleobj);
+ ruleList += this.template;
+ break;
+ }
+
+ final RuleDescr ruleDescr = (RuleDescr) ruleobj;
+ String rule = "rule \"" + ruleDescr.getName() + "\" " + DrlDumper.eol;
+ final String attribute = processAttribute( ruleDescr.getAttributes() );
+ String lhs = "";
+ if ( !ruleDescr.getLhs().getDescrs().isEmpty() ) {
+ lhs = "\t when" + DrlDumper.eol + processDescrList( ruleDescr.getLhs().getDescrs() ) + DrlDumper.eol;
+ } else {
+
+ lhs = "\t when";
+ }
+
+ String rhs = (String) ruleDescr.getConsequence();
+ if ( rhs == null ) {
+ rhs = "\t then" + DrlDumper.eol + "\t";
+ } else {
+ rhs = "\t then" + DrlDumper.eol + ruleDescr.getConsequence();
+ }
+
+ rule += attribute;
+ rule += lhs;
+ rule += rhs;
+ rule += "end" + DrlDumper.eol;
+ ruleList += rule;
+ }
+
+ return ruleList + DrlDumper.eol;
+ }
+
+ private String processOrDescrList(final List descr) {
+ String descrString = "";
+ for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
+ visit( iterator.next() );
+ descrString += this.template;
+ if ( descrString.endsWith( DrlDumper.eol ) ) {
+ descrString = descrString.substring( 0,
+ descrString.indexOf( DrlDumper.eol ) );
+ }
+ descrString += " || ";
+ }
+ return descrString.substring( 0,
+ descrString.length() - 4 );
+ }
+
+ private String processColoumnConstraintList(final List descr) {
+ String descrString = "";
+ Object previous = null;
+ for ( final Iterator iterator = descr.iterator(); iterator.hasNext(); ) {
+
+ final Object temp = iterator.next();
+ visit( temp );
+
+ if ( previous == null ) {
+ descrString += this.template;
+ } else if ( previous instanceof FieldBindingDescr && !(temp instanceof FieldBindingDescr) && !(temp instanceof PredicateDescr) ) {
+ final FieldConstraintDescr tempDescr = (FieldConstraintDescr) temp;
+ final FieldBindingDescr previousDescr = (FieldBindingDescr) previous;
+ if ( tempDescr.getFieldName().equals( previousDescr.getFieldName() ) ) {
+ // as its a binding followed by a field constraint we need to remove
+ // the extra field name
+ descrString += this.template.substring( tempDescr.getFieldName().length() + 1 );
+ } else {
+ descrString += " , " + this.template;
+ }
+ } else {
+ descrString += " , " + this.template;
+ }
+
+ previous = temp;
+
+ }
+ return descrString.substring( 0,
+ descrString.length() );
+ }
+
+ private String processFieldConstraint(final RestrictionConnectiveDescr restriction,
+ boolean addBrackets) {
+ String descrString = "";
+ String connective = "";
+ boolean bracketTmp = this.needsBracket;
+ this.needsBracket = restriction.getRestrictions().size() > 1;
+
+ if ( restriction.getConnective() == RestrictionConnectiveDescr.OR ) {
+ connective = " || ";
+ } else {
+ connective = " && ";
+ }
+ if ( addBrackets && bracketTmp ) {
+ descrString += "( ";
+ }
+ for ( final Iterator it = restriction.getRestrictions().iterator(); it.hasNext(); ) {
+ final Object temp = it.next();
+ visit( temp );
+ descrString += this.template;
+ if ( it.hasNext() ) {
+ descrString += connective;
+ }
+ }
+ if ( addBrackets && bracketTmp ) {
+ descrString += " )";
+ }
+ this.needsBracket = bracketTmp;
+ return descrString;
+ }
+
+ private String processDescrList(final List descr) {
+ String descrString = "";
+ for ( final Iterator ite = descr.iterator(); ite.hasNext(); ) {
+
+ Object obj = ite.next();
+
+ visit( obj );
+ descrString += this.template;
+
+ if ( obj.getClass().equals( PatternDescr.class ) || obj.getClass().equals( CollectDescr.class ) ) {
+ descrString += DrlDumper.eol;
+ } else if ( ite.hasNext() ) {
+ descrString += " && ";
+ }
+ }
+ return descrString;
+ }
+
+ private String processFunctionsList(final List functions) {
+ String functionList = "";
+
+ for ( final Iterator it = functions.iterator(); it.hasNext(); ) {
+ visit( it.next() );
+ functionList += this.template;
+ }
+
+ return functionList + DrlDumper.eol;
+ }
+
+ private String processAttribute(final List attributes) {
+
+ String attributeList = "";
+ for ( final Iterator it = attributes.iterator(); it.hasNext(); ) {
+ final AttributeDescr attributeDescr = (AttributeDescr) it.next();
+ visit( attributeDescr );
+ attributeList += this.template;
+ }
+ return attributeList;
+ }
+
+ private String processParameters(final List parameterNames,
+ final List parameterTypes) {
+ if ( parameterNames.isEmpty() ) {
+ return "";
+ }
+
+ String paramList = "";
+ int i = 0;
+ for ( final Iterator it = parameterNames.iterator(); it.hasNext(); i++ ) {
+ final String paramName = (String) it.next();
+ final String paramType = (String) parameterTypes.get( i );
+ final String paramTemplate = paramType + " " + paramName + ",";
+ paramList += paramTemplate;
+ }
+ paramList = paramList.substring( 0,
+ paramList.length() - 1 );
+ return paramList;
+ }
+
+ private String processGlobalsList(final List globals) {
+ String globalList = "";
+
+ for ( final Iterator it = globals.iterator(); it.hasNext(); ) {
+ final GlobalDescr global = (GlobalDescr) it.next();
+ final String identifier = global.getIdentifier();
+ final String type = global.getType();
+ final String globalTemplate = "global " + type + " " + identifier + ";" + DrlDumper.eol;
+ globalList += globalTemplate;
+ }
+
+ return globalList + DrlDumper.eol;
+ }
+
+ private String processImportsList(final List imports) {
+ String importList = "";
+
+ for ( final Iterator it = imports.iterator(); it.hasNext(); ) {
+ final String importString = ((ImportDescr) it.next()).getTarget();
+ final String importTemplate = "import " + importString + ";" + DrlDumper.eol;
+ importList += importTemplate;
+ }
+ return importList + DrlDumper.eol;
+ }
+
+ private void appendDrlDump(final String temp) {
+ this.drlDump.append( temp );
+ }
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list