[prev in list] [next in list] [prev in thread] [next in thread]
List: jboss-cvs-commits
Subject: [jboss-cvs] jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql ASTSum.java ASTAvg.java ASTMax.java ASTMi
From: Alexey Loubyansky <loubyansky () users ! sourceforge ! net>
Date: 2003-09-30 13:33:35
[Download RAW message or body]
User: loubyansky
Date: 03/09/30 06:33:34
Modified: src/main/org/jboss/ejb/plugins/cmp/ejbql Tag: Branch_3_2
BasicVisitor.java JBossQLParser.jjt
Added: src/main/org/jboss/ejb/plugins/cmp/ejbql Tag: Branch_3_2
ASTSum.java ASTAvg.java ASTMax.java ASTMin.java
Log:
new JBossQL functions: MAX, MIN, AVG, SUM; some optimizations
Revision Changes Path
No revision
No revision
1.4.2.5 +203 -85 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/BasicVisitor.java
Index: BasicVisitor.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/BasicVisitor.java,v
retrieving revision 1.4.2.4
retrieving revision 1.4.2.5
diff -u -r1.4.2.4 -r1.4.2.5
--- BasicVisitor.java 18 Sep 2003 18:30:27 -0000 1.4.2.4
+++ BasicVisitor.java 30 Sep 2003 13:33:34 -0000 1.4.2.5
@@ -4,28 +4,33 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
-
+
package org.jboss.ejb.plugins.cmp.ejbql;
import org.jboss.ejb.plugins.cmp.jdbc.SQLUtil;
/**
* This a basic abstract syntax tree visitor. It simply converts the tree
- * back into ejbql. This is useful for testing and extensions, as most
+ * back into ejbql. This is useful for testing and extensions, as most
* extensions translate just a few elements of the tree.
*
* @author <a href="mailto:dain@daingroup.com">Dain Sundstrom</a>
- * @version $Revision: 1.4.2.4 $
- */
-public class BasicVisitor implements JBossQLParserVisitor {
- public Object visit(SimpleNode node, Object data) {
+ * @version $Revision: 1.4.2.5 $
+ */
+public class BasicVisitor implements JBossQLParserVisitor
+{
+ public Object visit(SimpleNode node, Object data)
+ {
return data;
}
- public Object visit(ASTEJBQL node, Object data) {
- StringBuffer buf = (StringBuffer)data;
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
+ public Object visit(ASTEJBQL node, Object data)
+ {
+ StringBuffer buf = (StringBuffer)data;
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
buf.append(' ');
}
node.jjtGetChild(i).jjtAccept(this, data);
@@ -33,11 +38,14 @@
return data;
}
- public Object visit(ASTFrom node, Object data) {
+ public Object visit(ASTFrom node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.FROM);
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
buf.append(SQLUtil.COMMA);
}
node.jjtGetChild(i).jjtAccept(this, data);
@@ -45,7 +53,8 @@
return data;
}
- public Object visit(ASTCollectionMemberDeclaration node, Object data) {
+ public Object visit(ASTCollectionMemberDeclaration node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.IN).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -54,7 +63,8 @@
return data;
}
- public Object visit(ASTRangeVariableDeclaration node, Object data) {
+ public Object visit(ASTRangeVariableDeclaration node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ');
@@ -62,24 +72,29 @@
return data;
}
- public Object visit(ASTSelect node, Object data) {
+ public Object visit(ASTSelect node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.SELECT);
node.jjtGetChild(0).jjtAccept(this, data);
return data;
}
- public Object visit(ASTWhere node, Object data) {
+ public Object visit(ASTWhere node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.WHERE);
node.jjtGetChild(0).jjtAccept(this, data);
return data;
}
- public Object visit(ASTOr node, Object data) {
+ public Object visit(ASTOr node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
buf.append(SQLUtil.OR);
}
node.jjtGetChild(i).jjtAccept(this, data);
@@ -87,10 +102,13 @@
return data;
}
- public Object visit(ASTAnd node, Object data) {
+ public Object visit(ASTAnd node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
buf.append(SQLUtil.AND);
}
node.jjtGetChild(i).jjtAccept(this, data);
@@ -98,14 +116,16 @@
return data;
}
- public Object visit(ASTNot node, Object data) {
+ public Object visit(ASTNot node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.NOT);
node.jjtGetChild(0).jjtAccept(this, data);
return data;
}
- public Object visit(ASTConditionalParenthetical node, Object data) {
+ public Object visit(ASTConditionalParenthetical node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -113,10 +133,12 @@
return data;
}
- public Object visit(ASTBetween node, Object data) {
+ public Object visit(ASTBetween node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.BETWEEN);
@@ -126,15 +148,18 @@
return data;
}
- public Object visit(ASTIn node, Object data) {
+ public Object visit(ASTIn node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.IN).append('(');
node.jjtGetChild(1).jjtAccept(this, data);
- for(int i=2; i < node.jjtGetNumChildren(); i++) {
+ for(int i = 2; i < node.jjtGetNumChildren(); i++)
+ {
buf.append(SQLUtil.COMMA);
node.jjtGetChild(i).jjtAccept(this, data);
}
@@ -142,48 +167,57 @@
return data;
}
- public Object visit(ASTLike node, Object data) {
+ public Object visit(ASTLike node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.LIKE);
node.jjtGetChild(1).jjtAccept(this, data);
- if(node.jjtGetNumChildren()==3) {
+ if(node.jjtGetNumChildren() == 3)
+ {
buf.append(SQLUtil.ESCAPE);
node.jjtGetChild(2).jjtAccept(this, data);
}
return data;
}
-
- public Object visit(ASTNullComparison node, Object data) {
+
+ public Object visit(ASTNullComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(SQLUtil.IS);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.NULL);
return data;
}
- public Object visit(ASTIsEmpty node, Object data) {
+ public Object visit(ASTIsEmpty node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(SQLUtil.IS);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.EMPTY);
return data;
}
- public Object visit(ASTMemberOf node, Object data) {
+ public Object visit(ASTMemberOf node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.not) {
+ if(node.not)
+ {
buf.append(SQLUtil.NOT);
}
buf.append(SQLUtil.MEMBER_OF);
@@ -191,7 +225,8 @@
return data;
}
- public Object visit(ASTStringComparison node, Object data) {
+ public Object visit(ASTStringComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ').append(node.opp).append(' ');
@@ -199,17 +234,20 @@
return data;
}
- public Object visit(ASTBooleanComparison node, Object data) {
+ public Object visit(ASTBooleanComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.jjtGetNumChildren()==2) {
+ if(node.jjtGetNumChildren() == 2)
+ {
buf.append(' ').append(node.opp).append(' ');
node.jjtGetChild(1).jjtAccept(this, data);
}
return data;
}
- public Object visit(ASTDatetimeComparison node, Object data) {
+ public Object visit(ASTDatetimeComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ').append(node.opp).append(' ');
@@ -217,7 +255,8 @@
return data;
}
- public Object visit(ASTEntityComparison node, Object data) {
+ public Object visit(ASTEntityComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ').append(node.opp).append(' ');
@@ -225,7 +264,8 @@
return data;
}
- public Object visit(ASTValueClassComparison node, Object data) {
+ public Object visit(ASTValueClassComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ').append(node.opp).append(' ');
@@ -233,7 +273,8 @@
return data;
}
- public Object visit(ASTArithmeticComparison node, Object data) {
+ public Object visit(ASTArithmeticComparison node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(' ').append(node.opp).append(' ');
@@ -241,36 +282,44 @@
return data;
}
- public Object visit(ASTPlusMinus node, Object data) {
+ public Object visit(ASTPlusMinus node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
- buf.append(' ').append(node.opps.get(i-1)).append(' ');
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
+ buf.append(' ').append(node.opps.get(i - 1)).append(' ');
}
node.jjtGetChild(i).jjtAccept(this, data);
}
return data;
}
- public Object visit(ASTMultDiv node, Object data) {
+ public Object visit(ASTMultDiv node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
- buf.append(' ').append(node.opps.get(i-1)).append(' ');
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
+ buf.append(' ').append(node.opps.get(i - 1)).append(' ');
}
node.jjtGetChild(i).jjtAccept(this, data);
}
return data;
}
- public Object visit(ASTNegation node, Object data) {
+ public Object visit(ASTNegation node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append('-');
node.jjtGetChild(0).jjtAccept(this, data);
return data;
}
- public Object visit(ASTArithmeticParenthetical node, Object data) {
+ public Object visit(ASTArithmeticParenthetical node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -278,7 +327,8 @@
return data;
}
- public Object visit(ASTStringParenthetical node, Object data) {
+ public Object visit(ASTStringParenthetical node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -286,7 +336,8 @@
return data;
}
- public Object visit(ASTConcat node, Object data) {
+ public Object visit(ASTConcat node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.CONCAT).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -296,7 +347,8 @@
return data;
}
- public Object visit(ASTSubstring node, Object data) {
+ public Object visit(ASTSubstring node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.SUBSTRING).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -308,7 +360,8 @@
return data;
}
- public Object visit(ASTLCase node, Object data) {
+ public Object visit(ASTLCase node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.LCASE).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -316,7 +369,8 @@
return data;
}
- public Object visit(ASTUCase node, Object data) {
+ public Object visit(ASTUCase node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.UCASE).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -324,7 +378,8 @@
return data;
}
- public Object visit(ASTLength node, Object data) {
+ public Object visit(ASTLength node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.LENGTH).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -332,13 +387,15 @@
return data;
}
- public Object visit(ASTLocate node, Object data) {
+ public Object visit(ASTLocate node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.LOCATE).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
buf.append(SQLUtil.COMMA);
node.jjtGetChild(1).jjtAccept(this, data);
- if(node.jjtGetNumChildren()==3) {
+ if(node.jjtGetNumChildren() == 3)
+ {
buf.append(SQLUtil.COMMA);
node.jjtGetChild(2).jjtAccept(this, data);
}
@@ -346,7 +403,8 @@
return data;
}
- public Object visit(ASTAbs node, Object data) {
+ public Object visit(ASTAbs node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.ABS).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -354,7 +412,8 @@
return data;
}
- public Object visit(ASTSqrt node, Object data) {
+ public Object visit(ASTSqrt node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.SQRT).append('(');
node.jjtGetChild(0).jjtAccept(this, data);
@@ -362,7 +421,8 @@
return data;
}
- public Object visit(ASTCount node, Object data) {
+ public Object visit(ASTCount node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.COUNT).append('(');
ASTPath path = (ASTPath)node.jjtGetChild(0);
@@ -371,12 +431,55 @@
return data;
}
- public Object visit(ASTOrderBy node, Object data) {
+ public Object visit(ASTMax node, Object data)
+ {
+ StringBuffer buf = (StringBuffer)data;
+ buf.append(SQLUtil.MAX).append('(');
+ ASTPath path = (ASTPath)node.jjtGetChild(0);
+ path.children[0].jjtAccept(this, data);
+ buf.append(')');
+ return data;
+ }
+
+ public Object visit(ASTMin node, Object data)
+ {
+ StringBuffer buf = (StringBuffer)data;
+ buf.append(SQLUtil.MIN).append('(');
+ ASTPath path = (ASTPath)node.jjtGetChild(0);
+ path.children[0].jjtAccept(this, data);
+ buf.append(')');
+ return data;
+ }
+
+ public Object visit(ASTAvg node, Object data)
+ {
+ StringBuffer buf = (StringBuffer)data;
+ buf.append(SQLUtil.AVG).append('(');
+ ASTPath path = (ASTPath)node.jjtGetChild(0);
+ path.children[0].jjtAccept(this, data);
+ buf.append(')');
+ return data;
+ }
+
+ public Object visit(ASTSum node, Object data)
+ {
+ StringBuffer buf = (StringBuffer)data;
+ buf.append(SQLUtil.SUM).append('(');
+ ASTPath path = (ASTPath)node.jjtGetChild(0);
+ path.children[0].jjtAccept(this, data);
+ buf.append(')');
+ return data;
+ }
+
+ public Object visit(ASTOrderBy node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(SQLUtil.ORDERBY);
- for(int i=0; i < node.jjtGetNumChildren(); i++) {
- if(i > 0) {
+ for(int i = 0; i < node.jjtGetNumChildren(); i++)
+ {
+ if(i > 0)
+ {
buf.append(SQLUtil.COMMA);
}
node.jjtGetChild(i).jjtAccept(this, data);
@@ -384,74 +487,89 @@
return data;
}
- public Object visit(ASTOrderByPath node, Object data) {
+ public Object visit(ASTOrderByPath node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
node.jjtGetChild(0).jjtAccept(this, data);
- if(node.ascending) {
+ if(node.ascending)
+ {
buf.append(SQLUtil.ASC);
- } else {
+ }
+ else
+ {
buf.append(SQLUtil.DESC);
}
return data;
}
- public Object visit(ASTPath node, Object data) {
+ public Object visit(ASTPath node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.getPath());
return data;
}
- public Object visit(ASTIdentifier node, Object data) {
+ public Object visit(ASTIdentifier node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.identifier);
return data;
}
- public Object visit(ASTAbstractSchema node, Object data) {
+ public Object visit(ASTAbstractSchema node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.abstractSchemaName);
return data;
}
- public Object visit(ASTParameter node, Object data) {
+ public Object visit(ASTParameter node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append("?").append(node.number);
return data;
}
- public Object visit(ASTExactNumericLiteral node, Object data) {
+ public Object visit(ASTExactNumericLiteral node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.literal);
return data;
}
- public Object visit(ASTApproximateNumericLiteral node, Object data) {
+ public Object visit(ASTApproximateNumericLiteral node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.literal);
return data;
}
- public Object visit(ASTStringLiteral node, Object data) {
+ public Object visit(ASTStringLiteral node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.value);
return data;
}
- public Object visit(ASTBooleanLiteral node, Object data) {
+ public Object visit(ASTBooleanLiteral node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
buf.append(node.value);
return data;
}
- public Object visit(ASTLimitOffset node, Object data) {
+ public Object visit(ASTLimitOffset node, Object data)
+ {
StringBuffer buf = (StringBuffer)data;
int child = 0;
- if (node.hasOffset) {
+ if(node.hasOffset)
+ {
buf.append(SQLUtil.OFFSET);
node.jjtGetChild(child++).jjtAccept(this, data);
}
- if (node.hasLimit) {
+ if(node.hasLimit)
+ {
buf.append(SQLUtil.LIMIT);
node.jjtGetChild(child++).jjtAccept(this, data);
}
1.6.2.6 +21 -1 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/JBossQLParser.jjt
Index: JBossQLParser.jjt
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/JBossQLParser.jjt,v
retrieving revision 1.6.2.5
retrieving revision 1.6.2.6
diff -u -r1.6.2.5 -r1.6.2.6
--- JBossQLParser.jjt 18 Sep 2003 18:30:27 -0000 1.6.2.5
+++ JBossQLParser.jjt 30 Sep 2003 13:33:34 -0000 1.6.2.6
@@ -47,7 +47,7 @@
*
* @author <a href="mailto:dain@daingroup.com">Dain Sundstrom</a>
* @author <a href="mailto:alex@jboss.org">Alex Loubyansky</a>
- * @version $Revision: 1.6.2.5 $
+ * @version $Revision: 1.6.2.6 $
*/
public class JBossQLParser {
private Catalog catalog;
@@ -649,6 +649,22 @@
(
<COUNT> <LPAREN> SingleValuedPath() <RPAREN>
) #Count
+|
+ (
+ <MAX> <LPAREN> SingleValuedPath() <RPAREN>
+ ) #Max
+|
+ (
+ <MIN> <LPAREN> SingleValuedPath() <RPAREN>
+ ) #Min
+|
+ (
+ <AVG> <LPAREN> SingleValuedPath() <RPAREN>
+ ) #Avg
+|
+ (
+ <SUM> <LPAREN> SingleValuedPath() <RPAREN>
+ ) #Sum
////////////////////////////////////////////////////////////////////////////
}
@@ -906,6 +922,10 @@
| < BETWEEN: "BETWEEN" >
| < CONCAT: "CONCAT" >
| < COUNT: "COUNT" >
+| < MAX: "MAX" >
+| < MIN: "MIN" >
+| < AVG: "AVG" >
+| < SUM: "SUM" >
| < DISTINCT: "DISTINCT" >
| < EMPTY: "EMPTY" >
| < ESCAPE: "ESCAPE" >
No revision
No revision
1.1.2.1 +46 -0 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Attic/ASTSum.java
1.1.2.1 +46 -0 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Attic/ASTAvg.java
1.1.2.1 +46 -0 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Attic/ASTMax.java
1.1.2.1 +46 -0 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Attic/ASTMin.java
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
jboss-cvs-commits mailing list
jboss-cvs-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-cvs-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic