[jboss-svn-commits] JBL Code SVN: r35949 - labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/parser.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 11 14:59:14 EST 2010


Author: laune
Date: 2010-11-11 14:59:14 -0500 (Thu, 11 Nov 2010)
New Revision: 35949

Modified:
   labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/parser/DefaultTemplateContainer.java
Log:
add row.rowNumber to parameter check

Modified: labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/parser/DefaultTemplateContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/parser/DefaultTemplateContainer.java	2010-11-11 16:53:59 UTC (rev 35948)
+++ labs/jbossrules/trunk/drools-templates/src/main/java/org/drools/template/parser/DefaultTemplateContainer.java	2010-11-11 19:59:14 UTC (rev 35949)
@@ -35,81 +35,82 @@
  * 
  */
 public class DefaultTemplateContainer implements TemplateContainer {
-    private String header;
+	private String header;
 
-    private Map<String, Column> columnMap = new HashMap<String, Column>();
+	private Map<String, Column> columnMap = new HashMap<String, Column>();
 
-    private List<Column> columns = new ArrayList<Column>();
+	private List<Column> columns = new ArrayList<Column>();
 
-    private Map<String, RuleTemplate> templates = new HashMap<String, RuleTemplate>();
+	private Map<String, RuleTemplate> templates = new HashMap<String, RuleTemplate>();
 
-    public DefaultTemplateContainer(final String template) {
-        this(DefaultTemplateContainer.class.getResourceAsStream(template));
-    }
+	public DefaultTemplateContainer(final String template) {
+		this(DefaultTemplateContainer.class.getResourceAsStream(template));
+	}
 
-    public DefaultTemplateContainer(final InputStream templateReader) {
-        parseTemplate(templateReader);
-        validateTemplate();
-    }
+	public DefaultTemplateContainer(final InputStream templateReader) {
+		parseTemplate(templateReader);
+		validateTemplate();
+	}
 
-    private void validateTemplate() {
-        if (columns.size() == 0) {
-            throw new DecisionTableParseException("No template parameters");
-        }
-        if (templates.size() == 0) {
-            throw new DecisionTableParseException("No templates");
-        }
-    }
+	private void validateTemplate() {
+		if (columns.size() == 0) {
+			throw new DecisionTableParseException("No template parameters");
+		}
+		if (templates.size() == 0) {
+			throw new DecisionTableParseException("No templates");
+		}
+	}
+	
+	Pattern parPattern = Pattern.compile( "@\\{([^}]+)\\}" );
 
-    Pattern parPattern = Pattern.compile( "@\\{([^}]+)\\}" );
-
-    /**
-     * Check whether all parameters have been defined.
-     * @param line a line in a rule
-     * qparam lno the line number
-     */
-    private void checkLine( String line, int lno ){
-        Matcher parMatcher = parPattern.matcher( line );
-        while( parMatcher.find() ){
-            String par = parMatcher.group( 1 ).trim();
-            if( ! columnMap.containsKey( par ) ){
-                throw new DecisionTableParseException( "Undeclared parameter '" + par + "' in line " + lno );
-            }
-        }
-    }
-
-    private void parseTemplate(final InputStream givenStream) {
-        try {
-            InputStreamReader isr =  new InputStreamReader( givenStream );
-            LineNumberReader templateReader = new LineNumberReader( isr );
-            final ColumnFactory cf = new ColumnFactory();
-            String line = null;
-            StringBuilder header = new StringBuilder();
-            boolean inTemplate = false;
-            boolean inHeader = false;
-            boolean inContents = false;
-            RuleTemplate template = null;
-            StringBuilder contents = new StringBuilder();
+	/**
+	 * Check whether all parameters have been defined.
+	 * @param line a line in a rule
+	 * qparam lno the line number
+	 */
+	private void checkLine( String line, int lno ){
+	    Matcher parMatcher = parPattern.matcher( line );
+	    while( parMatcher.find() ){
+	        String par = parMatcher.group( 1 ).trim();
+	        if( ! columnMap.containsKey( par ) &&
+	            ! "row.rowNumber".equals( par ) ){
+	            throw new DecisionTableParseException( "Undeclared parameter '" + par + "' in line " + lno );
+	        }
+	    }
+	}
+	
+	private void parseTemplate(final InputStream givenStream) {
+		try {
+		    InputStreamReader isr =  new InputStreamReader( givenStream );
+	        LineNumberReader templateReader = new LineNumberReader( isr );
+			final ColumnFactory cf = new ColumnFactory();
+			String line = null;
+			StringBuilder header = new StringBuilder();
+			boolean inTemplate = false;
+			boolean inHeader = false;
+			boolean inContents = false;
+			RuleTemplate template = null;
+			StringBuilder contents = new StringBuilder();
             String lastTemplateName = "?";
             int    lastTemplateLine = 0;
-            while ((line = templateReader.readLine()) != null) {
-                String trimmed = line.trim();
-                if( trimmed.length() > 0 ){
-                    int lineNo = templateReader.getLineNumber();
-
-                    if( trimmed.matches( "template\\s+header" ) ){
-                        inHeader = true;
-
-                    } else if (trimmed.startsWith("template")) {
-                        if( inTemplate ){
-                            throw new DecisionTableParseException(
-                                    "Nested template, within '" + lastTemplateName + "'. at line " + lineNo );
-                        }
-                        inTemplate = true;
-                        String quotedName = line.substring(8).trim();						
+			while ((line = templateReader.readLine()) != null) {
+			    String trimmed = line.trim();
+				if( trimmed.length() > 0 ){
+				    int lineNo = templateReader.getLineNumber();
+				    
+					if( trimmed.matches( "template\\s+header" ) ){
+						inHeader = true;
+					
+					} else if (trimmed.startsWith("template")) {
+					    if( inTemplate ){
+					        throw new DecisionTableParseException(
+                            "Nested template, within '" + lastTemplateName + "'. at line " + lineNo );
+					    }
+						inTemplate = true;
+						String quotedName = line.substring(8).trim();						
                         if( quotedName.startsWith( "\"" ) && quotedName.endsWith( "\"" ) ||
                             quotedName.startsWith( "'" ) && quotedName.endsWith( "'" ) ){
-                            quotedName = quotedName.substring(1, quotedName.length() - 1);
+ 						    quotedName = quotedName.substring(1, quotedName.length() - 1);
                         }
                         if( quotedName.length() == 0 ){
                             throw new DecisionTableParseException(
@@ -121,111 +122,111 @@
                         }
                         lastTemplateName = quotedName;
                         lastTemplateLine = lineNo;
-                        template = new RuleTemplate( quotedName, this);
-                        addTemplate(template);
+						template = new RuleTemplate( quotedName, this);
+						addTemplate(template);
 
-                    } else if ( trimmed.startsWith("package") ) {
-                        if ( ! inHeader ) {
-                            throw new DecisionTableParseException(
-                                    "Missing header at line " + lineNo );
-                        }
-                        inHeader = false;
-                        header.append(line).append("\n");
-
-                    } else if ( inHeader ) {
-                        if( ! addColumn(cf.getColumn(trimmed)) ){
-                            throw new DecisionTableParseException( "Duplicate parameter '" +
-                                    trimmed + "' at line " + lineNo);
-                        }
-
-                    } else if (!inTemplate && !inHeader) {
-                        header.append(line).append("\n");
-
-                    } else if (!inContents && trimmed.startsWith("rule")) {
-                        if( !inTemplate ){
-                            header.append(line).append("\n");
-                        } else {
-                            inContents = true;
+					} else if ( trimmed.startsWith("package") ) {
+						if ( ! inHeader ) {
+							throw new DecisionTableParseException(
+									"Missing header at line " + lineNo );
+						}
+						inHeader = false;
+						header.append(line).append("\n");
+						
+					} else if ( inHeader ) {
+						if( ! addColumn(cf.getColumn(trimmed)) ){
+						    throw new DecisionTableParseException( "Duplicate parameter '" +
+						            trimmed + "' at line " + lineNo);
+						}
+						
+					} else if (!inTemplate && !inHeader) {
+						header.append(line).append("\n");
+						
+					} else if (!inContents && trimmed.startsWith("rule")) {
+					    if( !inTemplate ){
+	                        header.append(line).append("\n");
+					    } else {
+     						inContents = true;
                             checkLine( line, lineNo );
-                            contents.append(line).append("\n");	    					
-                        }
+	    					contents.append(line).append("\n");	    					
+					    }
+					    
+					} else if (trimmed.matches("end\\s+template")) {
+						template.setContents(contents.toString());
+						contents.setLength(0);
+						inTemplate = false;
+						inContents = false;
+						
+					} else if (inContents) {
+					    checkLine( line, lineNo );
+						contents.append(line).append("\n");
+						
+					} else if (inTemplate) {
+						template.addColumn( trimmed );
+					}
+				}
+			}
+			if (inTemplate) {
+				throw new DecisionTableParseException( "Unterminated template '" +
+				        lastTemplateName + "', started in line " + lastTemplateLine );
+			}
+			this.header = header.toString();
 
-                    } else if (trimmed.matches("end\\s+template")) {
-                        template.setContents(contents.toString());
-                        contents.setLength(0);
-                        inTemplate = false;
-                        inContents = false;
+		} catch (IOException e) {
+			throw new RuntimeException(e);
+		} finally {
+			if (givenStream != null)
+				closeStream(givenStream);
+		}
+	}
 
-                    } else if (inContents) {
-                        checkLine( line, lineNo );
-                        contents.append(line).append("\n");
+	private void addTemplate(RuleTemplate template) {
+		templates.put(template.getName(), template);
+	}
 
-                    } else if (inTemplate) {
-                        template.addColumn( trimmed );
-                    }
-                }
-            }
-            if (inTemplate) {
-                throw new DecisionTableParseException( "Unterminated template '" +
-                        lastTemplateName + "', started in line " + lastTemplateLine );
-            }
-            this.header = header.toString();
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.drools.decisiontable.parser.TemplateContainer#getTemplates()
+	 */
+	public Map<String, RuleTemplate> getTemplates() {
+		return templates;
+	}
 
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        } finally {
-            if (givenStream != null)
-                closeStream(givenStream);
-        }
-    }
+	private boolean addColumn(Column c) {
+		columns.add(c);
+		return null == columnMap.put(c.getName(), c);
+	}
 
-    private void addTemplate(RuleTemplate template) {
-        templates.put(template.getName(), template);
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.drools.decisiontable.parser.TemplateContainer#getColumns()
+	 */
+	public Column[] getColumns() {
+		return (Column[]) columns.toArray(new Column[columns.size()]);
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.drools.decisiontable.parser.TemplateContainer#getTemplates()
-     */
-    public Map<String, RuleTemplate> getTemplates() {
-        return templates;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.drools.decisiontable.parser.TemplateContainer#getHeader()
+	 */
+	public String getHeader() {
+		return header;
+	}
 
-    private boolean addColumn(Column c) {
-        columns.add(c);
-        return null == columnMap.put(c.getName(), c);
-    }
+	private void closeStream(final InputStream stream) {
+		try {
+			stream.close();
+		} catch (final Exception e) {
+			System.err.print("Warning: Unable to "
+					+ "close stream for decision table template. "
+					+ e.getMessage());
+		}
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.drools.decisiontable.parser.TemplateContainer#getColumns()
-     */
-    public Column[] getColumns() {
-        return (Column[]) columns.toArray(new Column[columns.size()]);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.drools.decisiontable.parser.TemplateContainer#getHeader()
-     */
-    public String getHeader() {
-        return header;
-    }
-
-    private void closeStream(final InputStream stream) {
-        try {
-            stream.close();
-        } catch (final Exception e) {
-            System.err.print("Warning: Unable to "
-                    + "close stream for decision table template. "
-                    + e.getMessage());
-        }
-    }
-
-    public Column getColumn(final String name) {
-        return (Column) columnMap.get(name);
-    }
+	public Column getColumn(final String name) {
+		return (Column) columnMap.get(name);
+	}
 }



More information about the jboss-svn-commits mailing list