[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