Author: julien_viet
Date: 2011-08-14 16:46:07 -0400 (Sun, 14 Aug 2011)
New Revision: 7119
Added:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/REParser.java
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RERenderer.java
Removed:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/Parser.java
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpParser.java
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpRenderer.java
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/SubCharSequence.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestSubCharSequence.java
Modified:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PathParam.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestParser.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpAnalyser.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpParser.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpRenderer.java
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRouteEscaper.java
Log:
- rename RegExpRender and RegExpParser
- remove obsolete code
Deleted:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/Parser.java
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/Parser.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/Parser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2011 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.web.controller.regexp;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public abstract class Parser
-{
-
- public Parser()
- {
- }
-
-/*
- protected final SyntaxException createSyntaxException(String msg, int start, int end)
- {
- StringBuilder sb = new StringBuilder(msg).append(" : ");
- sb.append(s, 0, start).append(" ->").append(s, start,
end).append("<- ").append(s, end, s.length());
- return new SyntaxException(sb.toString());
- }
-*/
-}
Copied:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/REParser.java
(from rev 7117,
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpParser.java)
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/REParser.java
(rev 0)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/REParser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2011 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web.controller.regexp;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class REParser
+{
+
+ /** . */
+ private final Lexer lexer;
+
+ public REParser(CharSequence seq)
+ {
+ this.lexer = new Lexer(seq);
+ }
+
+ public REParser(Lexer lexer)
+ {
+ this.lexer = lexer;
+ }
+
+ public void reset()
+ {
+ lexer.reset();
+ }
+
+ public int getIndex()
+ {
+ return lexer.getIndex();
+ }
+
+ public RENode parse() throws SyntaxException
+ {
+ return parseDisjunction();
+ }
+
+ public boolean isDone()
+ {
+ return lexer.isDone();
+ }
+
+ public RENode.Disjunction parseDisjunction() throws SyntaxException
+ {
+ RENode.Alternative alternative = parseAlternative();
+ if (alternative != null)
+ {
+ if (lexer.next(Kind.OR))
+ {
+ RENode.Disjunction next = parseDisjunction();
+ return new RENode.Disjunction(alternative, next);
+ }
+ else
+ {
+ return new RENode.Disjunction(alternative);
+ }
+ }
+ else
+ {
+ if (lexer.next(Kind.OR))
+ {
+ RENode.Disjunction next = parseDisjunction();
+ return new RENode.Disjunction(null, next);
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+ public RENode.Alternative parseAlternative() throws SyntaxException
+ {
+ RENode.Expr expr = parseExpression();
+ if (expr != null)
+ {
+ RENode.Alternative next = parseAlternative();
+ return new RENode.Alternative(expr, next);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public RENode.Expr parseExpression() throws SyntaxException
+ {
+ RENode.Expr expr;
+ if (lexer.next(Kind.BEGIN))
+ {
+ expr = new RENode.Assertion.Begin();
+ }
+ else if (lexer.next(Kind.END))
+ {
+ expr = new RENode.Assertion.End();
+ }
+ else if (lexer.next(Kind.GROUP_OPEN))
+ {
+ GroupType groupType = GroupType.forPrefix(lexer.getToken());
+ RENode.Disjunction group = parseDisjunction();
+ if (lexer.next(Kind.GROUP_CLOSE))
+ {
+ expr = new RENode.Group(group, groupType);
+ }
+ else
+ {
+ throw new SyntaxException("Group not closed ");
+ }
+ }
+ else
+ {
+ expr = parseCharacter();
+ }
+ if (expr != null)
+ {
+ Quantifier quantifier = parseQuantifier();
+ if (quantifier != null)
+ {
+ expr.setQuantifier(quantifier);
+ }
+ }
+ return expr;
+ }
+
+ private static final Pattern QUANTIFIER_PATTERN = Pattern.compile(
+ "^" +
+ "(\\?|\\+|\\*)|\\{([0-9]+)(?:(,)([0-9]*))?\\}" +
+ "$");
+
+ public Quantifier parseQuantifier() throws SyntaxException
+ {
+ if (lexer.next(Kind.QUANTIFIER))
+ {
+ String quantifierToken = lexer.getToken();
+ Matcher matcher = QUANTIFIER_PATTERN.matcher(quantifierToken);
+ if (!matcher.matches())
+ {
+ throw new AssertionError("The quantifier token " + quantifierToken
+ " is not valid");
+ }
+ Quantifier.Range range;
+ if (matcher.group(1) != null)
+ {
+ switch (quantifierToken.charAt(0))
+ {
+ case '*':
+ range = Quantifier.Range.zeroOrMore();
+ break;
+ case '+':
+ range = Quantifier.Range.oneOrMore();
+ break;
+ case '?':
+ range = Quantifier.Range.onceOrNotAtAll();
+ break;
+ default:
+ throw new AssertionError();
+ }
+ }
+ else
+ {
+ int min = Integer.parseInt(matcher.group(2));
+ Integer max;
+ if (matcher.group(3) != null)
+ {
+ max = matcher.group(4).isEmpty() ? null :
Integer.parseInt(matcher.group(4));
+ }
+ else
+ {
+ max = min;
+ }
+ range = new Quantifier.Range(min, max);
+ }
+ Quantifier.Mode mode;
+ if (lexer.next(Kind.QUANTIFIER_MODE))
+ {
+ switch (lexer.getToken().charAt(0))
+ {
+ case '?':
+ mode = Quantifier.Mode.RELUCTANT;
+ break;
+ case '+':
+ mode = Quantifier.Mode.POSSESSIVE;
+ break;
+ default:
+ throw new AssertionError();
+ }
+ }
+ else
+ {
+ mode = Quantifier.Mode.GREEDY;
+ }
+ return new Quantifier(mode, range);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public RENode.Atom parseCharacter() throws SyntaxException
+ {
+ if (lexer.next(Kind.ANY))
+ {
+ return new RENode.Any();
+ }
+ else
+ {
+ RENode.Atom atom = parseCharacterLiteral();
+ if (atom == null)
+ {
+ atom = parseCharacterClass();
+ }
+ return atom;
+ }
+ }
+
+ public RENode.Char parseCharacterLiteral() throws SyntaxException
+ {
+ if (lexer.next(Kind.LITERAL))
+ {
+ return new RENode.Char(lexer.getToken().charAt(0));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public RENode.CharacterClass parseCharacterClass() throws SyntaxException
+ {
+ RENode.CharacterClassExpr cce = _parseCharacterClass();
+ if (cce != null)
+ {
+ return new RENode.CharacterClass(cce);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ private RENode.CharacterClassExpr _parseCharacterClass() throws SyntaxException
+ {
+ if (lexer.next(Kind.CC_OPEN))
+ {
+ boolean negated = lexer.getToken().length() > 1;
+ RENode.CharacterClassExpr expr = parseCharacterClassExpression();
+ if (expr != null)
+ {
+ if (lexer.next(Kind.CC_CLOSE))
+ {
+ return negated ? new RENode.CharacterClassExpr.Not(expr) : expr;
+ }
+ else
+ {
+ throw new SyntaxException("");
+ }
+ }
+ else
+ {
+ throw new SyntaxException("");
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public RENode.CharacterClassExpr parseCharacterClassExpression() throws
SyntaxException
+ {
+ RENode.CharacterClassExpr left = parseCharacterClassTerm();
+ if (left != null)
+ {
+ boolean and = lexer.next(Kind.CC_AND);
+ RENode.CharacterClassExpr right = parseCharacterClassExpression();
+ if (right != null)
+ {
+ if (and)
+ {
+ return new RENode.CharacterClassExpr.And(left, right);
+ }
+ else
+ {
+ return new RENode.CharacterClassExpr.Or(left, right);
+ }
+ }
+ else
+ {
+ return left;
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public RENode.CharacterClassExpr parseCharacterClassTerm() throws SyntaxException
+ {
+ RENode.CharacterClassExpr expr = _parseCharacterClass();
+ if (expr == null)
+ {
+ RENode.CharacterClassExpr.Char c = parseCharacterClassLiteral();
+ if (c != null)
+ {
+ if (lexer.next(Kind.HYPHEN))
+ {
+ RENode.CharacterClassExpr.Char to = parseCharacterClassLiteral();
+ if (to != null)
+ {
+ expr = new RENode.CharacterClassExpr.Range(c, to);
+ }
+ else
+ {
+ throw new SyntaxException();
+ }
+ }
+ else
+ {
+ expr = c;
+ }
+ }
+ else if (lexer.next(Kind.ANY))
+ {
+ // NOT SURE THIS IS CORRECT
+ expr = new RENode.CharacterClassExpr.Char('.');
+ }
+ else if (lexer.next(Kind.BEGIN))
+ {
+ // NOT SURE THIS IS CORRECT
+ expr = new RENode.CharacterClassExpr.Char('^');
+ }
+ else if (lexer.next(Kind.END))
+ {
+ // NOT SURE THIS IS CORRECT
+ expr = new RENode.CharacterClassExpr.Char('$');
+ }
+ }
+ return expr;
+ }
+
+ public RENode.CharacterClassExpr.Char parseCharacterClassLiteral() throws
SyntaxException
+ {
+ if (lexer.next(Kind.LITERAL))
+ {
+ return new RENode.CharacterClassExpr.Char(lexer.getToken().charAt(0));
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
Copied:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RERenderer.java
(from rev 7117,
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpRenderer.java)
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RERenderer.java
(rev 0)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RERenderer.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web.controller.regexp;
+
+import java.io.IOException;
+
+/**
+ * Renders a {@link RENode} to its pattern representation.
+ *
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class RERenderer
+{
+
+ public final <A extends Appendable> A render(RENode re, A appendable) throws
IOException, NullPointerException
+ {
+ if (re == null)
+ {
+ throw new NullPointerException("No null disjunction accepted");
+ }
+ if (appendable == null)
+ {
+ throw new NullPointerException("No null appendable accepted");
+ }
+
+ //
+ doRender(re, appendable);
+
+ //
+ return appendable;
+ }
+
+ protected void doRender(RENode re, Appendable appendable) throws IOException
+ {
+ if (re instanceof RENode.Disjunction)
+ {
+ doRender((RENode.Disjunction) re, appendable);
+ }
+ else if (re instanceof RENode.Alternative)
+ {
+ doRender((RENode.Alternative) re, appendable);
+ }
+ else if (re instanceof RENode.Expr)
+ {
+ doRender((RENode.Expr) re, appendable);
+ }
+ else
+ {
+ throw new AssertionError("Was not expecting node " + re);
+ }
+ }
+
+ protected void doRender(RENode.Disjunction disjunction, Appendable appendable) throws
IOException, NullPointerException
+ {
+ RENode.Alternative alternative = disjunction.getAlternative();
+ RENode.Disjunction next = disjunction.getNext();
+ if (alternative != null)
+ {
+ doRender(alternative, appendable);
+ if (next != null)
+ {
+ appendable.append('|');
+ doRender(next, appendable);
+ }
+ }
+ else if (next != null)
+ {
+ doRender(next, appendable);
+ }
+ }
+
+ protected void doRender(RENode.Alternative alternative, Appendable appendable) throws
IOException, NullPointerException
+ {
+ doRender(alternative.getExp(), appendable);
+ RENode.Alternative next = alternative.getNext();
+ if (next != null)
+ {
+ doRender(next, appendable);
+ }
+ }
+
+ protected void doRender(RENode.Expr expr, Appendable appendable) throws IOException,
NullPointerException
+ {
+ if (expr instanceof RENode.Atom)
+ {
+ doRender((RENode.Atom) expr, appendable);
+ }
+ else if (expr instanceof RENode.Group)
+ {
+ doRender((RENode.Group)expr, appendable);
+ }
+ else if (expr instanceof RENode.Assertion)
+ {
+ doRender((RENode.Assertion)expr, appendable);
+ }
+ else
+ {
+ throw new AssertionError("Was not expecting node " + expr);
+ }
+ }
+
+ protected void doRender(Quantifier quantifier, Appendable appendable) throws
IOException
+ {
+ quantifier.toString(appendable);
+ }
+
+ protected void doRender(RENode.Assertion assertion, Appendable appendable) throws
IOException
+ {
+ if (assertion instanceof RENode.Assertion.Begin)
+ {
+ doRender((RENode.Assertion.Begin)assertion, appendable);
+ }
+ else if (assertion instanceof RENode.Assertion.End)
+ {
+ doRender((RENode.Assertion.End)assertion, appendable);
+ }
+ else
+ {
+ throw new AssertionError("Was not expecting node " + assertion);
+ }
+ }
+
+ protected void doRender(RENode.Assertion.Begin expr, Appendable appendable) throws
IOException
+ {
+ appendable.append('^');
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.Assertion.End expr, Appendable appendable) throws
IOException
+ {
+ appendable.append('$');
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.Group expr, Appendable appendable) throws IOException
+ {
+ appendable.append(expr.getType().getOpen());
+ this.doRender(expr.getDisjunction(), appendable);
+ appendable.append(expr.getType().getClose());
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.Atom atom, Appendable appendable) throws IOException
+ {
+ if (atom instanceof RENode.Any)
+ {
+ doRender((RENode.Any) atom, appendable);
+ }
+ else if (atom instanceof RENode.Char)
+ {
+ doRender((RENode.Char)atom, appendable);
+ }
+ else if (atom instanceof RENode.CharacterClass)
+ {
+ doRender((RENode.CharacterClass)atom, appendable);
+ }
+ else
+ {
+ throw new AssertionError("Was not expecting node " + atom);
+ }
+ }
+
+ protected void doRender(RENode.Char expr, Appendable appendable) throws IOException
+ {
+ Literal.escapeTo(expr.getValue(), appendable);
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.Any expr, Appendable appendable) throws IOException
+ {
+ appendable.append('.');
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.CharacterClass expr, Appendable appendable) throws
IOException
+ {
+ appendable.append("[");
+ doRender(expr.getExpr(), appendable);
+ appendable.append("]");
+ if (expr.getQuantifier() != null)
+ {
+ doRender(expr.getQuantifier(), appendable);
+ }
+ }
+
+ protected void doRender(RENode.CharacterClassExpr expr, Appendable appendable) throws
IOException, NullPointerException
+ {
+ if (expr instanceof RENode.CharacterClassExpr.Char)
+ {
+ doRender((RENode.CharacterClassExpr.Char) expr, appendable);
+ }
+ else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Range)
+ {
+ doRender((RENode.CharacterClassExpr.Range) expr, appendable);
+ }
+ else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.And)
+ {
+ doRender((RENode.CharacterClassExpr.And) expr, appendable);
+ }
+ else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Or)
+ {
+ doRender((RENode.CharacterClassExpr.Or) expr, appendable);
+ }
+ else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Not)
+ {
+ doRender((RENode.CharacterClassExpr.Not) expr, appendable);
+ }
+ else
+ {
+ throw new AssertionError();
+ }
+ }
+
+ protected void doRender(RENode.CharacterClassExpr.Not expr, Appendable appendable)
throws IOException
+ {
+ boolean needBrace = false;
+ for (RENode current = expr.getParent();current != null;current =
current.getParent())
+ {
+ if (current instanceof RENode.CharacterClassExpr.Or)
+ {
+ needBrace = true;
+ break;
+ }
+ else if (current instanceof RENode.CharacterClassExpr.And)
+ {
+ needBrace = true;
+ break;
+ }
+ else if (current instanceof RENode.CharacterClassExpr.Not)
+ {
+ needBrace = true;
+ break;
+ }
+ }
+ if (needBrace)
+ {
+ appendable.append("[");
+ }
+ appendable.append("^");
+ doRender(expr.getNegated(), appendable);
+ if (needBrace)
+ {
+ appendable.append(']');
+ }
+ }
+
+ protected void doRender(RENode.CharacterClassExpr.Or expr, Appendable appendable)
throws IOException
+ {
+ doRender(expr.getLeft(), appendable);
+ doRender(expr.getRight(), appendable);
+ }
+
+ protected void doRender(RENode.CharacterClassExpr.And expr, Appendable appendable)
throws IOException
+ {
+ doRender(expr.getLeft(), appendable);
+ appendable.append("&&");
+ doRender(expr.getRight(), appendable);
+ }
+
+ protected void doRender(RENode.CharacterClassExpr.Range expr, Appendable appendable)
throws IOException
+ {
+ doRender(expr.getFrom(), appendable);
+ appendable.append('-');
+ doRender(expr.getTo(), appendable);
+ }
+
+ protected void doRender(RENode.CharacterClassExpr.Char expr, Appendable appendable)
throws IOException
+ {
+ Literal.escapeTo(expr.getValue(), appendable);
+ }
+}
Deleted:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpParser.java
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpParser.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpParser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -1,375 +0,0 @@
-/*
- * Copyright (C) 2011 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.web.controller.regexp;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public class RegExpParser
-{
-
- /** . */
- private final Lexer lexer;
-
- public RegExpParser(CharSequence seq)
- {
- this.lexer = new Lexer(seq);
- }
-
- public RegExpParser(Lexer lexer)
- {
- this.lexer = lexer;
- }
-
- public void reset()
- {
- lexer.reset();
- }
-
- public int getIndex()
- {
- return lexer.getIndex();
- }
-
- public RENode parse() throws SyntaxException
- {
- return parseDisjunction();
- }
-
- public boolean isDone()
- {
- return lexer.isDone();
- }
-
- public RENode.Disjunction parseDisjunction() throws SyntaxException
- {
- RENode.Alternative alternative = parseAlternative();
- if (alternative != null)
- {
- if (lexer.next(Kind.OR))
- {
- RENode.Disjunction next = parseDisjunction();
- return new RENode.Disjunction(alternative, next);
- }
- else
- {
- return new RENode.Disjunction(alternative);
- }
- }
- else
- {
- if (lexer.next(Kind.OR))
- {
- RENode.Disjunction next = parseDisjunction();
- return new RENode.Disjunction(null, next);
- }
- else
- {
- return null;
- }
- }
- }
-
- public RENode.Alternative parseAlternative() throws SyntaxException
- {
- RENode.Expr expr = parseExpression();
- if (expr != null)
- {
- RENode.Alternative next = parseAlternative();
- return new RENode.Alternative(expr, next);
- }
- else
- {
- return null;
- }
- }
-
- public RENode.Expr parseExpression() throws SyntaxException
- {
- RENode.Expr expr;
- if (lexer.next(Kind.BEGIN))
- {
- expr = new RENode.Assertion.Begin();
- }
- else if (lexer.next(Kind.END))
- {
- expr = new RENode.Assertion.End();
- }
- else if (lexer.next(Kind.GROUP_OPEN))
- {
- GroupType groupType = GroupType.forPrefix(lexer.getToken());
- RENode.Disjunction group = parseDisjunction();
- if (lexer.next(Kind.GROUP_CLOSE))
- {
- expr = new RENode.Group(group, groupType);
- }
- else
- {
- throw new SyntaxException("Group not closed ");
- }
- }
- else
- {
- expr = parseCharacter();
- }
- if (expr != null)
- {
- Quantifier quantifier = parseQuantifier();
- if (quantifier != null)
- {
- expr.setQuantifier(quantifier);
- }
- }
- return expr;
- }
-
- private static final Pattern QUANTIFIER_PATTERN = Pattern.compile(
- "^" +
- "(\\?|\\+|\\*)|\\{([0-9]+)(?:(,)([0-9]*))?\\}" +
- "$");
-
- public Quantifier parseQuantifier() throws SyntaxException
- {
- if (lexer.next(Kind.QUANTIFIER))
- {
- String quantifierToken = lexer.getToken();
- Matcher matcher = QUANTIFIER_PATTERN.matcher(quantifierToken);
- if (!matcher.matches())
- {
- throw new AssertionError("The quantifier token " + quantifierToken
+ " is not valid");
- }
- Quantifier.Range range;
- if (matcher.group(1) != null)
- {
- switch (quantifierToken.charAt(0))
- {
- case '*':
- range = Quantifier.Range.zeroOrMore();
- break;
- case '+':
- range = Quantifier.Range.oneOrMore();
- break;
- case '?':
- range = Quantifier.Range.onceOrNotAtAll();
- break;
- default:
- throw new AssertionError();
- }
- }
- else
- {
- int min = Integer.parseInt(matcher.group(2));
- Integer max;
- if (matcher.group(3) != null)
- {
- max = matcher.group(4).isEmpty() ? null :
Integer.parseInt(matcher.group(4));
- }
- else
- {
- max = min;
- }
- range = new Quantifier.Range(min, max);
- }
- Quantifier.Mode mode;
- if (lexer.next(Kind.QUANTIFIER_MODE))
- {
- switch (lexer.getToken().charAt(0))
- {
- case '?':
- mode = Quantifier.Mode.RELUCTANT;
- break;
- case '+':
- mode = Quantifier.Mode.POSSESSIVE;
- break;
- default:
- throw new AssertionError();
- }
- }
- else
- {
- mode = Quantifier.Mode.GREEDY;
- }
- return new Quantifier(mode, range);
- }
- else
- {
- return null;
- }
- }
-
- public RENode.Atom parseCharacter() throws SyntaxException
- {
- if (lexer.next(Kind.ANY))
- {
- return new RENode.Any();
- }
- else
- {
- RENode.Atom atom = parseCharacterLiteral();
- if (atom == null)
- {
- atom = parseCharacterClass();
- }
- return atom;
- }
- }
-
- public RENode.Char parseCharacterLiteral() throws SyntaxException
- {
- if (lexer.next(Kind.LITERAL))
- {
- return new RENode.Char(lexer.getToken().charAt(0));
- }
- else
- {
- return null;
- }
- }
-
- public RENode.CharacterClass parseCharacterClass() throws SyntaxException
- {
- RENode.CharacterClassExpr cce = _parseCharacterClass();
- if (cce != null)
- {
- return new RENode.CharacterClass(cce);
- }
- else
- {
- return null;
- }
- }
-
- private RENode.CharacterClassExpr _parseCharacterClass() throws SyntaxException
- {
- if (lexer.next(Kind.CC_OPEN))
- {
- boolean negated = lexer.getToken().length() > 1;
- RENode.CharacterClassExpr expr = parseCharacterClassExpression();
- if (expr != null)
- {
- if (lexer.next(Kind.CC_CLOSE))
- {
- return negated ? new RENode.CharacterClassExpr.Not(expr) : expr;
- }
- else
- {
- throw new SyntaxException("");
- }
- }
- else
- {
- throw new SyntaxException("");
- }
- }
- else
- {
- return null;
- }
- }
-
- public RENode.CharacterClassExpr parseCharacterClassExpression() throws
SyntaxException
- {
- RENode.CharacterClassExpr left = parseCharacterClassTerm();
- if (left != null)
- {
- boolean and = lexer.next(Kind.CC_AND);
- RENode.CharacterClassExpr right = parseCharacterClassExpression();
- if (right != null)
- {
- if (and)
- {
- return new RENode.CharacterClassExpr.And(left, right);
- }
- else
- {
- return new RENode.CharacterClassExpr.Or(left, right);
- }
- }
- else
- {
- return left;
- }
- }
- else
- {
- return null;
- }
- }
-
- public RENode.CharacterClassExpr parseCharacterClassTerm() throws SyntaxException
- {
- RENode.CharacterClassExpr expr = _parseCharacterClass();
- if (expr == null)
- {
- RENode.CharacterClassExpr.Char c = parseCharacterClassLiteral();
- if (c != null)
- {
- if (lexer.next(Kind.HYPHEN))
- {
- RENode.CharacterClassExpr.Char to = parseCharacterClassLiteral();
- if (to != null)
- {
- expr = new RENode.CharacterClassExpr.Range(c, to);
- }
- else
- {
- throw new SyntaxException();
- }
- }
- else
- {
- expr = c;
- }
- }
- else if (lexer.next(Kind.ANY))
- {
- // NOT SURE THIS IS CORRECT
- expr = new RENode.CharacterClassExpr.Char('.');
- }
- else if (lexer.next(Kind.BEGIN))
- {
- // NOT SURE THIS IS CORRECT
- expr = new RENode.CharacterClassExpr.Char('^');
- }
- else if (lexer.next(Kind.END))
- {
- // NOT SURE THIS IS CORRECT
- expr = new RENode.CharacterClassExpr.Char('$');
- }
- }
- return expr;
- }
-
- public RENode.CharacterClassExpr.Char parseCharacterClassLiteral() throws
SyntaxException
- {
- if (lexer.next(Kind.LITERAL))
- {
- return new RENode.CharacterClassExpr.Char(lexer.getToken().charAt(0));
- }
- else
- {
- return null;
- }
- }
-}
Deleted:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpRenderer.java
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpRenderer.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/RegExpRenderer.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -1,304 +0,0 @@
-/*
- * Copyright (C) 2010 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.web.controller.regexp;
-
-import java.io.IOException;
-
-/**
- * Renders a {@link RENode} to its pattern representation.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public class RegExpRenderer
-{
-
- public final <A extends Appendable> A render(RENode re, A appendable) throws
IOException, NullPointerException
- {
- if (re == null)
- {
- throw new NullPointerException("No null disjunction accepted");
- }
- if (appendable == null)
- {
- throw new NullPointerException("No null appendable accepted");
- }
-
- //
- doRender(re, appendable);
-
- //
- return appendable;
- }
-
- protected void doRender(RENode re, Appendable appendable) throws IOException
- {
- if (re instanceof RENode.Disjunction)
- {
- doRender((RENode.Disjunction) re, appendable);
- }
- else if (re instanceof RENode.Alternative)
- {
- doRender((RENode.Alternative) re, appendable);
- }
- else if (re instanceof RENode.Expr)
- {
- doRender((RENode.Expr) re, appendable);
- }
- else
- {
- throw new AssertionError("Was not expecting node " + re);
- }
- }
-
- protected void doRender(RENode.Disjunction disjunction, Appendable appendable) throws
IOException, NullPointerException
- {
- RENode.Alternative alternative = disjunction.getAlternative();
- RENode.Disjunction next = disjunction.getNext();
- if (alternative != null)
- {
- doRender(alternative, appendable);
- if (next != null)
- {
- appendable.append('|');
- doRender(next, appendable);
- }
- }
- else if (next != null)
- {
- doRender(next, appendable);
- }
- }
-
- protected void doRender(RENode.Alternative alternative, Appendable appendable) throws
IOException, NullPointerException
- {
- doRender(alternative.getExp(), appendable);
- RENode.Alternative next = alternative.getNext();
- if (next != null)
- {
- doRender(next, appendable);
- }
- }
-
- protected void doRender(RENode.Expr expr, Appendable appendable) throws IOException,
NullPointerException
- {
- if (expr instanceof RENode.Atom)
- {
- doRender((RENode.Atom) expr, appendable);
- }
- else if (expr instanceof RENode.Group)
- {
- doRender((RENode.Group)expr, appendable);
- }
- else if (expr instanceof RENode.Assertion)
- {
- doRender((RENode.Assertion)expr, appendable);
- }
- else
- {
- throw new AssertionError("Was not expecting node " + expr);
- }
- }
-
- protected void doRender(Quantifier quantifier, Appendable appendable) throws
IOException
- {
- quantifier.toString(appendable);
- }
-
- protected void doRender(RENode.Assertion assertion, Appendable appendable) throws
IOException
- {
- if (assertion instanceof RENode.Assertion.Begin)
- {
- doRender((RENode.Assertion.Begin)assertion, appendable);
- }
- else if (assertion instanceof RENode.Assertion.End)
- {
- doRender((RENode.Assertion.End)assertion, appendable);
- }
- else
- {
- throw new AssertionError("Was not expecting node " + assertion);
- }
- }
-
- protected void doRender(RENode.Assertion.Begin expr, Appendable appendable) throws
IOException
- {
- appendable.append('^');
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.Assertion.End expr, Appendable appendable) throws
IOException
- {
- appendable.append('$');
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.Group expr, Appendable appendable) throws IOException
- {
- appendable.append(expr.getType().getOpen());
- this.doRender(expr.getDisjunction(), appendable);
- appendable.append(expr.getType().getClose());
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.Atom atom, Appendable appendable) throws IOException
- {
- if (atom instanceof RENode.Any)
- {
- doRender((RENode.Any) atom, appendable);
- }
- else if (atom instanceof RENode.Char)
- {
- doRender((RENode.Char)atom, appendable);
- }
- else if (atom instanceof RENode.CharacterClass)
- {
- doRender((RENode.CharacterClass)atom, appendable);
- }
- else
- {
- throw new AssertionError("Was not expecting node " + atom);
- }
- }
-
- protected void doRender(RENode.Char expr, Appendable appendable) throws IOException
- {
- Literal.escapeTo(expr.getValue(), appendable);
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.Any expr, Appendable appendable) throws IOException
- {
- appendable.append('.');
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.CharacterClass expr, Appendable appendable) throws
IOException
- {
- appendable.append("[");
- doRender(expr.getExpr(), appendable);
- appendable.append("]");
- if (expr.getQuantifier() != null)
- {
- doRender(expr.getQuantifier(), appendable);
- }
- }
-
- protected void doRender(RENode.CharacterClassExpr expr, Appendable appendable) throws
IOException, NullPointerException
- {
- if (expr instanceof RENode.CharacterClassExpr.Char)
- {
- doRender((RENode.CharacterClassExpr.Char) expr, appendable);
- }
- else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Range)
- {
- doRender((RENode.CharacterClassExpr.Range) expr, appendable);
- }
- else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.And)
- {
- doRender((RENode.CharacterClassExpr.And) expr, appendable);
- }
- else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Or)
- {
- doRender((RENode.CharacterClassExpr.Or) expr, appendable);
- }
- else if (expr instanceof RENode.CharacterClass.CharacterClassExpr.Not)
- {
- doRender((RENode.CharacterClassExpr.Not) expr, appendable);
- }
- else
- {
- throw new AssertionError();
- }
- }
-
- protected void doRender(RENode.CharacterClassExpr.Not expr, Appendable appendable)
throws IOException
- {
- boolean needBrace = false;
- for (RENode current = expr.getParent();current != null;current =
current.getParent())
- {
- if (current instanceof RENode.CharacterClassExpr.Or)
- {
- needBrace = true;
- break;
- }
- else if (current instanceof RENode.CharacterClassExpr.And)
- {
- needBrace = true;
- break;
- }
- else if (current instanceof RENode.CharacterClassExpr.Not)
- {
- needBrace = true;
- break;
- }
- }
- if (needBrace)
- {
- appendable.append("[");
- }
- appendable.append("^");
- doRender(expr.getNegated(), appendable);
- if (needBrace)
- {
- appendable.append(']');
- }
- }
-
- protected void doRender(RENode.CharacterClassExpr.Or expr, Appendable appendable)
throws IOException
- {
- doRender(expr.getLeft(), appendable);
- doRender(expr.getRight(), appendable);
- }
-
- protected void doRender(RENode.CharacterClassExpr.And expr, Appendable appendable)
throws IOException
- {
- doRender(expr.getLeft(), appendable);
- appendable.append("&&");
- doRender(expr.getRight(), appendable);
- }
-
- protected void doRender(RENode.CharacterClassExpr.Range expr, Appendable appendable)
throws IOException
- {
- doRender(expr.getFrom(), appendable);
- appendable.append('-');
- doRender(expr.getTo(), appendable);
- }
-
- protected void doRender(RENode.CharacterClassExpr.Char expr, Appendable appendable)
throws IOException
- {
- Literal.escapeTo(expr.getValue(), appendable);
- }
-}
Deleted:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/SubCharSequence.java
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/SubCharSequence.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/regexp/SubCharSequence.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2010 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.web.controller.regexp;
-
-/**
- * Should make it to org.gatein.common somehow.
- *
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public class SubCharSequence implements CharSequence
-{
-
- /** . */
- private final CharSequence s;
-
- /** . */
- private final int from;
-
- /** . */
- private final int to;
-
- public SubCharSequence(CharSequence s, int from, int to)
- {
- if (s == null)
- {
- throw new NullPointerException("No null string accepted");
- }
- if (from < 0)
- {
- throw new IllegalArgumentException("No negative lower bound
accepted");
- }
- if (to > s.length())
- {
- throw new IllegalArgumentException("Upper bound cannot be greater than the
sequence length");
- }
- if (from > to)
- {
- throw new IllegalArgumentException("Upper bound cannot be lesser than the
lower bound");
- }
-
- //
- this.s = s;
- this.from = from;
- this.to = to;
- }
-
- public int length()
- {
- return to - from;
- }
-
- public char charAt(int index)
- {
- if (index < 0)
- {
- throw new IndexOutOfBoundsException("Index cannot be negative");
- }
- index += from;
- if (index >= to)
- {
- throw new IndexOutOfBoundsException("Index cannot be negative");
- }
- return s.charAt(index);
- }
-
- public CharSequence subSequence(int start, int end)
- {
- if (start < 0)
- {
- throw new IndexOutOfBoundsException("The start argument cannot be
negative");
- }
- if (end < 0)
- {
- throw new IndexOutOfBoundsException("The start argument cannot be
negative");
- }
- if (start > end)
- {
- throw new IndexOutOfBoundsException("The start argument cannot greater than
the end argument");
- }
- end += from;
- if (end > to)
- {
- throw new IndexOutOfBoundsException("The end argument cannot greater than
the length");
- }
- return new SubCharSequence(s, from + start, end);
- }
-
- @Override
- public String toString()
- {
- return s.subSequence(from, to).toString();
- }
-}
Modified:
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PathParam.java
===================================================================
---
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PathParam.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PathParam.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -22,8 +22,8 @@
import org.exoplatform.web.controller.QualifiedName;
import org.exoplatform.web.controller.metadata.PathParamDescriptor;
import org.exoplatform.web.controller.regexp.RENode;
-import org.exoplatform.web.controller.regexp.RegExpParser;
-import org.exoplatform.web.controller.regexp.RegExpRenderer;
+import org.exoplatform.web.controller.regexp.REParser;
+import org.exoplatform.web.controller.regexp.RERenderer;
import org.exoplatform.web.controller.regexp.SyntaxException;
import java.io.IOException;
@@ -75,7 +75,7 @@
StringBuilder routingRegex = new StringBuilder();
try
{
- RegExpParser parser = new RegExpParser(regex);
+ REParser parser = new REParser(regex);
//
RENode.Disjunction routingDisjunction = parser.parseDisjunction();
@@ -84,13 +84,13 @@
RouteEscaper escaper = new RouteEscaper('/', '_');
escaper.visit(routingDisjunction);
}
- new RegExpRenderer().render(routingDisjunction, routingRegex);
+ new RERenderer().render(routingDisjunction, routingRegex);
//
parser.reset();
RENode.Disjunction renderingDisjunction = parser.parseDisjunction();
renderingRegex.append("^");
- new RegExpRenderer().render(renderingDisjunction, renderingRegex);
+ new RERenderer().render(renderingDisjunction, renderingRegex);
renderingRegex.append("$");
}
catch (IOException e)
Modified:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestParser.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestParser.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestParser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -41,10 +41,10 @@
private static class ParserTester
{
- private final RegExpParser parser;
+ private final REParser parser;
private ParserTester(CharSequence s)
{
- this.parser = new RegExpParser(s);
+ this.parser = new REParser(s);
}
ParserTester assertParseCharacterClass(String expectedValue)
{
Modified:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpAnalyser.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpAnalyser.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpAnalyser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -29,13 +29,13 @@
{
/** . */
- private RegExpRenderer renderer = new RegExpRenderer();
+ private RERenderer renderer = new RERenderer();
private void assertAnalyse(String expectedPattern, String pattern)
{
try
{
- RENode.Disjunction disjunction = new RegExpParser(pattern).parseDisjunction();
+ RENode.Disjunction disjunction = new REParser(pattern).parseDisjunction();
assertEquals(expectedPattern, renderer.render(disjunction, new
StringBuilder()).toString());
}
catch (Exception e)
Modified:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpParser.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpParser.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpParser.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -279,7 +279,7 @@
{
Stream stream = new Stream(s);
Lexer lexer = new Lexer(stream);
- RegExpParser parser = new RegExpParser(lexer);
+ REParser parser = new REParser(lexer);
parser.parse();
assertEquals(s.length(), stream.getIndex());
if (lexer.hasNext())
Modified:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpRenderer.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpRenderer.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestRegExpRenderer.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -37,7 +37,7 @@
String rendered;
if (re != null)
{
- RegExpRenderer renderer = new RegExpRenderer();
+ RERenderer renderer = new RERenderer();
rendered = renderer.render(re, new StringBuilder()).toString();
}
else
@@ -58,7 +58,7 @@
{
try
{
- RegExpParser parser = new RegExpParser(regexp);
+ REParser parser = new REParser(regexp);
RENode.Disjunction re = parser.parseDisjunction();
assertTrue(parser.isDone());
return re;
@@ -75,7 +75,7 @@
{
try
{
- RegExpParser parser = new RegExpParser(regexp);
+ REParser parser = new REParser(regexp);
RENode.Alternative re = parser.parseAlternative();
assertTrue(parser.isDone());
return re;
@@ -92,7 +92,7 @@
{
try
{
- RegExpParser parser = new RegExpParser(regexp);
+ REParser parser = new REParser(regexp);
RENode.Expr re = parser.parseExpression();
assertTrue(parser.isDone());
return re;
@@ -109,7 +109,7 @@
{
try
{
- RegExpParser parser = new RegExpParser(regexp);
+ REParser parser = new REParser(regexp);
RENode.CharacterClass re = parser.parseCharacterClass();
assertTrue(parser.isDone());
return re;
Deleted:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestSubCharSequence.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestSubCharSequence.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/regexp/TestSubCharSequence.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2010 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.web.controller.regexp;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public class TestSubCharSequence extends TestCase
-{
-
- private final CharSequence seq = new SubCharSequence("abcdef", 1, 5);
-
- public void testState()
- {
- assertEquals(4, seq.length());
- assertEquals('b', seq.charAt(0));
- assertEquals('c', seq.charAt(1));
- assertEquals('d', seq.charAt(2));
- assertEquals('e', seq.charAt(3));
- assertEquals("bcde", seq.toString());
- }
-
- public void testSubSequence()
- {
- CharSequence sub = seq.subSequence(1, 3);
- assertEquals(2, sub.length());
- assertEquals('c', sub.charAt(0));
- assertEquals('d', sub.charAt(1));
- assertEquals("cd", sub.toString());
- }
-
- public void testSubSequenceThrowsIOOBE()
- {
- assertSubSequenceThrowsIIOBE(-1, 3);
- assertSubSequenceThrowsIIOBE(1, 5);
- assertSubSequenceThrowsIIOBE(1, -1);
- assertSubSequenceThrowsIIOBE(5, 1);
- }
-
- private void assertSubSequenceThrowsIIOBE(int start, int end)
- {
- try
- {
- seq.subSequence(start, end);
- fail();
- }
- catch (IndexOutOfBoundsException e)
- {
- }
- }
-
- public void testCharAtThrowsIOOBE()
- {
- try
- {
- seq.charAt(-1);
- fail();
- }
- catch (IndexOutOfBoundsException e)
- {
- }
- try
- {
- seq.charAt(4);
- fail();
- }
- catch (IndexOutOfBoundsException e)
- {
- }
- }
-
- public void testCtorThrowsNPE()
- {
- try
- {
- new SubCharSequence(null, 1, 5);
- fail();
- }
- catch (NullPointerException e)
- {
- }
- }
-
- public void testCtorThrowsIAE()
- {
- assertCtorThrowsIAE("a", -1, 1);
- assertCtorThrowsIAE("a", 0, 2);
- assertCtorThrowsIAE("a", 1, 0);
- }
-
- private void assertCtorThrowsIAE(String s, int from, int to)
- {
- try
- {
- new SubCharSequence(s, from, to);
- fail();
- }
- catch (IllegalArgumentException e)
- {
- }
- }
-}
Modified:
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRouteEscaper.java
===================================================================
---
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRouteEscaper.java 2011-08-14
20:35:39 UTC (rev 7118)
+++
portal/trunk/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRouteEscaper.java 2011-08-14
20:46:07 UTC (rev 7119)
@@ -20,9 +20,9 @@
package org.exoplatform.web.controller.router;
import org.exoplatform.component.test.BaseGateInTest;
-import org.exoplatform.web.controller.regexp.RegExpRenderer;
+import org.exoplatform.web.controller.regexp.RERenderer;
import org.exoplatform.web.controller.regexp.RENode;
-import org.exoplatform.web.controller.regexp.RegExpParser;
+import org.exoplatform.web.controller.regexp.REParser;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -36,11 +36,11 @@
private void match(String pattern, String test, String expectedValue) throws
Exception
{
- RegExpParser parser = new RegExpParser(pattern);
+ REParser parser = new REParser(pattern);
RouteEscaper escaper = new RouteEscaper('/', '_');
RENode.Disjunction re = parser.parseDisjunction();
escaper.visit(re);
- Pattern p = Pattern.compile(new RegExpRenderer().render(re, new
StringBuilder()).toString());
+ Pattern p = Pattern.compile(new RERenderer().render(re, new
StringBuilder()).toString());
Matcher matcher = p.matcher(test);
assertTrue(matcher.find());
assertEquals(expectedValue, matcher.group());