[jboss-svn-commits] JBL Code SVN: r17441 - in labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools: compiler and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Dec 29 14:16:35 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-12-29 14:16:35 -0500 (Sat, 29 Dec 2007)
New Revision: 17441

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PackageBuildContext.java
Log:
JBRULES-1394 RuleFlow Nodes should be pluggable
-we have Builders, looked up from the ProcessNodeBuilderRegistry, for building of certain nodes.

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2007-12-29 19:09:33 UTC (rev 17440)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -28,6 +28,10 @@
 
 import org.drools.lang.descr.ActionDescr;
 import org.drools.lang.descr.ProcessDescr;
+import org.drools.process.builder.ActionNodeBuilder;
+import org.drools.process.builder.ProcessNodeBuilder;
+import org.drools.process.builder.ProcessNodeBuilderRegistry;
+import org.drools.process.builder.SplitNodeBuilder;
 import org.drools.rule.Package;
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.builder.ProcessBuildContext;
@@ -60,138 +64,119 @@
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
 public class ProcessBuilder {
-    
-	private PackageBuilder packageBuilder;
-	private final List errors = new ArrayList(); 
-	
-	public ProcessBuilder(PackageBuilder packageBuilder) {
-		this.packageBuilder = packageBuilder;
-	}
-    
+
+    private PackageBuilder packageBuilder;
+    private final List     errors = new ArrayList();
+
+    public ProcessBuilder(PackageBuilder packageBuilder) {
+        this.packageBuilder = packageBuilder;
+    }
+
     public List getErrors() {
-    	return errors;
+        return errors;
     }
 
     public void buildProcess(final Process process) {
-    	if (process instanceof RuleFlowProcess) {
-    		RuleFlowProcessValidator validator = RuleFlowProcessValidatorImpl.getInstance();
-    		RuleFlowProcessValidationError[] errors = validator.validateProcess((RuleFlowProcess) process);
-    		if (errors.length != 0) {
-    			for (int i = 0; i < errors.length; i++) {
-    				this.errors.add(new ParserError(errors[i].toString(), -1, -1));
-    			}
-    		} else {
-	            // generate and add rule for process
-	            String rules = generateRules( process );
-        		try {
-        			packageBuilder.addPackageFromDrl(new StringReader(rules));
-        		} catch (IOException e) {
-        			// should never occur
-        			e.printStackTrace(System.err);
-        		} catch (DroolsParserException e) {
-        			// should never occur
-        			e.printStackTrace(System.err);
-        		}        		
-        		buildNodes( process );   
+        if ( process instanceof RuleFlowProcess ) {
+            RuleFlowProcessValidator validator = RuleFlowProcessValidatorImpl.getInstance();
+            RuleFlowProcessValidationError[] errors = validator.validateProcess( (RuleFlowProcess) process );
+            if ( errors.length != 0 ) {
+                for ( int i = 0; i < errors.length; i++ ) {
+                    this.errors.add( new ParserError( errors[i].toString(),
+                                                      -1,
+                                                      -1 ) );
+                }
+            } else {
+                // generate and add rule for process
+                String rules = generateRules( process );
+                try {
+                    packageBuilder.addPackageFromDrl( new StringReader( rules ) );
+                } catch ( IOException e ) {
+                    // should never occur
+                    e.printStackTrace( System.err );
+                } catch ( DroolsParserException e ) {
+                    // should never occur
+                    e.printStackTrace( System.err );
+                }
+                buildNodes( process );
                 this.packageBuilder.getPackage().addRuleFlow( process );
-                
+
                 Package pkg = this.packageBuilder.getPackage();
-                if (  pkg != null ) {
+                if ( pkg != null ) {
                     // we can only do this is this.pkg != null, as otherwise the dialects won't be properly initialised
                     // as the dialects are initialised when the pkg is  first created
                     this.packageBuilder.getDialectRegistry().compileAll();
-                    
+
                     // some of the rules and functions may have been redefined
                     if ( pkg.getPackageCompilationData().isDirty() ) {
                         pkg.getPackageCompilationData().reload();
-                    }            
-                }                
-    		}
-    	}
+                    }
+                }
+            }
+        }
     }
-    
-    // @FIXME this is a hack to wire in Actions for now
+
+    private static ProcessNodeBuilderRegistry nodeBuilderRegistry = new ProcessNodeBuilderRegistry();
+
+    static {
+        nodeBuilderRegistry.register( ActionNodeImpl.class,
+                                      new ActionNodeBuilder() );
+        nodeBuilderRegistry.register( SplitImpl.class,
+                                      new SplitNodeBuilder() );
+    }
+
     public void buildNodes(Process process) {
         RuleFlowProcess rfp = (RuleFlowProcess) process;
 
         ProcessDescr processDescr = new ProcessDescr();
         processDescr.setName( rfp.getPackageName() );
-        
+
         Dialect dialect = this.packageBuilder.getDialectRegistry().getDialect( "java" );
         dialect.init( processDescr );
-        
+
         ProcessBuildContext context = new ProcessBuildContext( this.packageBuilder.getPackageBuilderConfiguration(),
                                                                this.packageBuilder.getPackage(),
                                                                process,
                                                                processDescr,
                                                                this.packageBuilder.getDialectRegistry(),
-                                                               dialect );         
-        
+                                                               dialect );
+
         for ( Node node : rfp.getNodes() ) {
-            if ( node instanceof ActionNode ) {
-                buildAction(process, processDescr, context, (ActionNodeImpl) node );
-            } else if ( node instanceof SplitImpl ) {
-                buildSplit(process, processDescr, context, (SplitImpl) node );
+            ProcessNodeBuilder builder = nodeBuilderRegistry.getNodeBuilder( node );
+            if ( builder != null ) {
+                // only build if there is a registered builder for this node type
+                builder.build( process,
+                               processDescr,
+                               context,
+                               node );
             }
-        }       
-        
+        }
+
         if ( !context.getErrors().isEmpty() ) {
             this.errors.addAll( context.getErrors() );
         }
-        
+
         for ( Iterator it = this.packageBuilder.getDialectRegistry().iterator(); it.hasNext(); ) {
-            dialect = ( Dialect ) it.next();
+            dialect = (Dialect) it.next();
             dialect.addProcess( context );
         }
-        
-    }    
-    
-    public void buildAction(Process process, ProcessDescr processDescr, ProcessBuildContext context, ActionNodeImpl actionNode) {
+
+    }
+
+    public void buildAction(Process process,
+                            ProcessDescr processDescr,
+                            ProcessBuildContext context,
+                            ActionNodeImpl actionNode) {
         DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
         ActionDescr actionDescr = new ActionDescr();
-        actionDescr.setText( action.getConsequence() );   
-        
-        Dialect dialect = this.packageBuilder.getDialectRegistry().getDialect( action.getDialect() );            
-        
-        dialect.getActionBuilder().build( context, actionNode, actionDescr );
+        actionDescr.setText( action.getConsequence() );
+
+        Dialect dialect = this.packageBuilder.getDialectRegistry().getDialect( action.getDialect() );
+
+        dialect.getActionBuilder().build( context,
+                                          actionNode,
+                                          actionDescr );
     }
-    
-    public void buildSplit(Process process, ProcessDescr processDescr, ProcessBuildContext context, SplitImpl splitNode) {
-        if ( splitNode.getType() == Split.TYPE_AND ) {
-            // we only process or/xor
-            return;
-        }
-        // we need to clone the map, so we can update the original while iterating.
-        Map map = new HashMap( splitNode.getConstraints() );
-        for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
-            Entry entry = (Entry) it.next();
-            Connection connection = (Connection) entry.getKey();
-            ConstraintImpl constraint = (ConstraintImpl) entry.getValue();
-            
-            if ( "rule".equals( constraint.getType() )) {
-                RuleFlowConstraintEvaluator ruleConstraint = new RuleFlowConstraintEvaluator();
-                ruleConstraint.setDialect( constraint.getDialect() );
-                ruleConstraint.setName( constraint.getName() );
-                ruleConstraint.setPriority( constraint.getPriority() );
-                ruleConstraint.setPriority( constraint.getPriority() );
-                splitNode.setConstraint( connection, ruleConstraint );
-            } else if ( "code".equals( constraint.getType() ) ) {
-                ReturnValueConstraintEvaluator returnValueConstraint = new ReturnValueConstraintEvaluator();
-                returnValueConstraint.setDialect( constraint.getDialect() );
-                returnValueConstraint.setName( constraint.getName() );
-                returnValueConstraint.setPriority( constraint.getPriority() );
-                returnValueConstraint.setPriority( constraint.getPriority() );
-                splitNode.setConstraint( connection, returnValueConstraint );            
-                
-                ReturnValueDescr returnValueDescr = new ReturnValueDescr();
-                returnValueDescr.setText( constraint.getConstraint() );
-                
-                Dialect dialect = this.packageBuilder.getDialectRegistry().getDialect( constraint.getDialect() );                               
-                dialect.getReturnValueEvaluatorBuilder().build( context, returnValueConstraint, returnValueDescr );
-            }
-        }
-    }
-    
 
     public void addProcessFromFile(final Reader reader) throws Exception {
         final XStream stream = new XStream();
@@ -200,74 +185,68 @@
         final ClassLoader newLoader = this.getClass().getClassLoader();
         try {
             Thread.currentThread().setContextClassLoader( newLoader );
-            final RuleFlowProcess process = (RuleFlowProcess) stream.fromXML( reader );   
-            buildProcess(process);
+            final RuleFlowProcess process = (RuleFlowProcess) stream.fromXML( reader );
+            buildProcess( process );
         } finally {
             Thread.currentThread().setContextClassLoader( oldLoader );
         }
         reader.close();
     }
-    
+
     private String generateRules(final Process process) {
         StringBuilder builder = new StringBuilder();
-        
-    	if (process instanceof RuleFlowProcessImpl) {
-    		RuleFlowProcessImpl ruleFlow = (RuleFlowProcessImpl) process;
-    		builder.append( "package " + ruleFlow.getPackageName() + "\n" );
-    		List imports = ruleFlow.getImports();
-    		if (imports != null) {
-    			for (Iterator iterator = imports.iterator(); iterator.hasNext(); ) {
-    			    builder.append( "import " + iterator.next() + ";\n" );
-    			}
-    		}
-    		Map globals = ruleFlow.getGlobals();
-    		if (globals != null) {
-    			for (Iterator iterator = globals.entrySet().iterator(); iterator.hasNext(); ) {
-    				Map.Entry entry = (Map.Entry) iterator.next();
-    				builder.append( "global " + entry.getValue() + " " + entry.getKey() + ";\n" );
-    			}
-    		}
 
-    		Node[] nodes = ruleFlow.getNodes();
-    		for (int i = 0; i < nodes.length; i++) {
-    			 if (nodes[i] instanceof Split ) {
-    				 Split split = (Split) nodes[i];
-    				 if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
-    					 for (Iterator iterator = split.getOutgoingConnections().iterator(); iterator.hasNext(); ) {    					     
-    						 Connection connection = (Connection) iterator.next();
-    						 Constraint constraint = split.getConstraint( connection );
-    						 if (  "rule".equals( constraint.getType() ) ) {
-    						     builder.append( createSplitRule(process, connection, split.getConstraint(connection).getConstraint()) );
-    						 }
-    					 }
-    				 }
-    			 } else if (nodes[i] instanceof MilestoneNode) {
-    				 MilestoneNode milestone = (MilestoneNode) nodes[i];
-    				 builder.append( createMilestoneRule(process, milestone) );
-    			 }
-    		}
-    	}
-    	return builder.toString();
+        if ( process instanceof RuleFlowProcessImpl ) {
+            RuleFlowProcessImpl ruleFlow = (RuleFlowProcessImpl) process;
+            builder.append( "package " + ruleFlow.getPackageName() + "\n" );
+            List imports = ruleFlow.getImports();
+            if ( imports != null ) {
+                for ( Iterator iterator = imports.iterator(); iterator.hasNext(); ) {
+                    builder.append( "import " + iterator.next() + ";\n" );
+                }
+            }
+            Map globals = ruleFlow.getGlobals();
+            if ( globals != null ) {
+                for ( Iterator iterator = globals.entrySet().iterator(); iterator.hasNext(); ) {
+                    Map.Entry entry = (Map.Entry) iterator.next();
+                    builder.append( "global " + entry.getValue() + " " + entry.getKey() + ";\n" );
+                }
+            }
+
+            Node[] nodes = ruleFlow.getNodes();
+            for ( int i = 0; i < nodes.length; i++ ) {
+                if ( nodes[i] instanceof Split ) {
+                    Split split = (Split) nodes[i];
+                    if ( split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR ) {
+                        for ( Iterator iterator = split.getOutgoingConnections().iterator(); iterator.hasNext(); ) {
+                            Connection connection = (Connection) iterator.next();
+                            Constraint constraint = split.getConstraint( connection );
+                            if ( "rule".equals( constraint.getType() ) ) {
+                                builder.append( createSplitRule( process,
+                                                                 connection,
+                                                                 split.getConstraint( connection ).getConstraint() ) );
+                            }
+                        }
+                    }
+                } else if ( nodes[i] instanceof MilestoneNode ) {
+                    MilestoneNode milestone = (MilestoneNode) nodes[i];
+                    builder.append( createMilestoneRule( process,
+                                                         milestone ) );
+                }
+            }
+        }
+        return builder.toString();
     }
-    
-    private String createSplitRule(Process process, Connection connection, String constraint) {
-		return 
-    		"rule \"RuleFlow-Split-" + process.getId() + "-"
-    			+ connection.getFrom().getId() + "-" + connection.getTo().getId() + "\" \n" + 
-			"      ruleflow-group \"DROOLS_SYSTEM\" \n" + 
-			"    when \n" + 
-			"      " + constraint + "\n" +
-			"    then \n" +
-			"end \n\n";
+
+    private String createSplitRule(Process process,
+                                   Connection connection,
+                                   String constraint) {
+        return "rule \"RuleFlow-Split-" + process.getId() + "-" + connection.getFrom().getId() + "-" + connection.getTo().getId() + "\" \n" + "      ruleflow-group \"DROOLS_SYSTEM\" \n" + "    when \n" + "      " + constraint + "\n" + "    then \n"
+               + "end \n\n";
     }
-    
-    private String createMilestoneRule(Process process, MilestoneNode milestone) {
-		return 
-    		"rule \"RuleFlow-Milestone-" + process.getId() + "-" + milestone.getId() + "\" \n" + 
-			"      ruleflow-group \"DROOLS_SYSTEM\" \n" + 
-			"    when \n" + 
-			"      " + milestone.getConstraint() + "\n" +
-			"    then \n" +
-			"end \n\n";
+
+    private String createMilestoneRule(Process process,
+                                       MilestoneNode milestone) {
+        return "rule \"RuleFlow-Milestone-" + process.getId() + "-" + milestone.getId() + "\" \n" + "      ruleflow-group \"DROOLS_SYSTEM\" \n" + "    when \n" + "      " + milestone.getConstraint() + "\n" + "    then \n" + "end \n\n";
     }
 }

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ActionNodeBuilder.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -0,0 +1,30 @@
+package org.drools.process.builder;
+
+import org.drools.compiler.Dialect;
+import org.drools.lang.descr.ActionDescr;
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.ruleflow.common.core.Process;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.impl.ActionNodeImpl;
+import org.drools.ruleflow.core.impl.DroolsConsequenceAction;
+
+public class ActionNodeBuilder
+    implements
+    ProcessNodeBuilder {
+
+    public void build(Process process,
+                           ProcessDescr processDescr,
+                           ProcessBuildContext context,
+                           Node node) {
+        ActionNodeImpl actionNode = ( ActionNodeImpl ) node;
+        DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+        ActionDescr actionDescr = new ActionDescr();
+        actionDescr.setText( action.getConsequence() );   
+        
+        Dialect dialect = context.getDialectRegistry().getDialect( action.getDialect() );            
+        
+        dialect.getActionBuilder().build( context, actionNode, actionDescr );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilder.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -0,0 +1,11 @@
+package org.drools.process.builder;
+
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.ruleflow.common.core.Process;
+import org.drools.ruleflow.core.Node;
+
+
+public interface ProcessNodeBuilder {
+    public void build(Process process, ProcessDescr processDescr, ProcessBuildContext context, Node node);
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -0,0 +1,22 @@
+package org.drools.process.builder;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.ruleflow.core.Node;
+
+public class ProcessNodeBuilderRegistry {
+	private Map<Class<? extends Node>, ProcessNodeBuilder> registry;
+	
+	public ProcessNodeBuilderRegistry() {
+		this.registry = new HashMap<Class<? extends Node>, ProcessNodeBuilder>();
+	}
+	
+	public void  register(Class<? extends Node> cls, ProcessNodeBuilder builder) {
+		this.registry.put(cls, builder);
+	}
+	
+	public ProcessNodeBuilder getNodeBuilder(Node node) {
+		return this.registry.get( node.getClass() );
+	}
+}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -0,0 +1,66 @@
+package org.drools.process.builder;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.ReturnValueDescr;
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.ruleflow.common.core.Process;
+import org.drools.ruleflow.core.Connection;
+import org.drools.ruleflow.core.Node;
+import org.drools.ruleflow.core.Split;
+import org.drools.ruleflow.core.impl.ConstraintImpl;
+import org.drools.ruleflow.core.impl.ReturnValueConstraintEvaluator;
+import org.drools.ruleflow.core.impl.RuleFlowConstraintEvaluator;
+import org.drools.ruleflow.core.impl.SplitImpl;
+
+public class SplitNodeBuilder
+    implements
+    ProcessNodeBuilder {
+
+    public void build(Process process,
+                           ProcessDescr processDescr,
+                           ProcessBuildContext context,
+                           Node node) {
+        SplitImpl splitNode = ( SplitImpl ) node;
+        
+        if ( splitNode.getType() == Split.TYPE_AND ) {
+            // we only process or/xor
+            return;
+        }
+        // we need to clone the map, so we can update the original while iterating.
+        Map map = new HashMap( splitNode.getConstraints() );
+        for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+            Entry entry = (Entry) it.next();
+            Connection connection = (Connection) entry.getKey();
+            ConstraintImpl constraint = (ConstraintImpl) entry.getValue();
+            
+            if ( "rule".equals( constraint.getType() )) {
+                RuleFlowConstraintEvaluator ruleConstraint = new RuleFlowConstraintEvaluator();
+                ruleConstraint.setDialect( constraint.getDialect() );
+                ruleConstraint.setName( constraint.getName() );
+                ruleConstraint.setPriority( constraint.getPriority() );
+                ruleConstraint.setPriority( constraint.getPriority() );
+                splitNode.setConstraint( connection, ruleConstraint );
+            } else if ( "code".equals( constraint.getType() ) ) {
+                ReturnValueConstraintEvaluator returnValueConstraint = new ReturnValueConstraintEvaluator();
+                returnValueConstraint.setDialect( constraint.getDialect() );
+                returnValueConstraint.setName( constraint.getName() );
+                returnValueConstraint.setPriority( constraint.getPriority() );
+                returnValueConstraint.setPriority( constraint.getPriority() );
+                splitNode.setConstraint( connection, returnValueConstraint );            
+                
+                ReturnValueDescr returnValueDescr = new ReturnValueDescr();
+                returnValueDescr.setText( constraint.getConstraint() );
+                
+                Dialect dialect = context.getDialectRegistry().getDialect( constraint.getDialect() );                               
+                dialect.getReturnValueEvaluatorBuilder().build( context, returnValueConstraint, returnValueDescr );
+            }
+        }
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PackageBuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PackageBuildContext.java	2007-12-29 19:09:33 UTC (rev 17440)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PackageBuildContext.java	2007-12-29 19:16:35 UTC (rev 17441)
@@ -112,6 +112,10 @@
     public Dialect getDialect(String dialectName) {
         return (Dialect) this.dialectRegistry.getDialect( dialectName );
     }
+    
+    public DialectRegistry getDialectRegistry() {
+        return this.dialectRegistry;
+    }
 
     /**
      * Returns the list of errors found while building the current context




More information about the jboss-svn-commits mailing list