You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/09/07 14:00:20 UTC

svn commit: r1166138 [11/12] - in /jackrabbit/sandbox/jackrabbit-mk: jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/batch/ jackrabbit-spi-commons/src/main/j...

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SelectorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SelectorImpl.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SelectorImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SelectorImpl.java Wed Sep  7 12:00:14 2011
@@ -16,13 +16,13 @@
  */
 package org.apache.jackrabbit.spi.commons.query.qom;
 
-import javax.jcr.query.qom.Selector;
-
-import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+
+import javax.jcr.query.qom.Selector;
 
 /**
- * <code>SelectorImpl</code>...
+ * {@code SelectorImpl}...
  */
 public class SelectorImpl extends SourceImpl implements Selector {
 
@@ -67,9 +67,7 @@ public class SelectorImpl extends Source
 
     //---------------------------< SourceImpl >---------------------------------
 
-    /**
-     * {@inheritDoc}
-     */ 
+    @Override
     public SelectorImpl[] getSelectors() {
         return new SelectorImpl[]{this};
     }
@@ -81,6 +79,7 @@ public class SelectorImpl extends Source
      *
      * @return the node type name; non-null
      */
+    @Override
     public String getNodeTypeName() {
         return getJCRName(nodeTypeName);
     }
@@ -93,6 +92,7 @@ public class SelectorImpl extends Source
      *
      * @return the selector name; non-null
      */
+    @Override
     public String getSelectorName() {
         return getJCRName(selectorName);
     }
@@ -100,11 +100,12 @@ public class SelectorImpl extends Source
     //------------------------< AbstractQOMNode >-------------------------------
 
     /**
-     * Accepts a <code>visitor</code> and calls the appropriate visit method
+     * Accepts a {@code visitor} and calls the appropriate visit method
      * depending on the type of this QOM node.
      *
      * @param visitor the visitor.
      */
+    @Override
     public Object accept(QOMTreeVisitor visitor, Object data) throws Exception {
         return visitor.visit(this, data);
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SourceImpl.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SourceImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/SourceImpl.java Wed Sep  7 12:00:14 2011
@@ -16,12 +16,12 @@
  */
 package org.apache.jackrabbit.spi.commons.query.qom;
 
-import javax.jcr.query.qom.Source;
-
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 
+import javax.jcr.query.qom.Source;
+
 /**
- * <code>SourceImpl</code>...
+ * {@code SourceImpl}...
  */
 public abstract class SourceImpl extends AbstractQOMNode implements Source {
 

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/StaticOperandImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/StaticOperandImpl.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/StaticOperandImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/StaticOperandImpl.java Wed Sep  7 12:00:14 2011
@@ -16,16 +16,14 @@
  */
 package org.apache.jackrabbit.spi.commons.query.qom;
 
-import javax.jcr.query.qom.StaticOperand;
-
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 
+import javax.jcr.query.qom.StaticOperand;
+
 /**
- * <code>StaticOperandImpl</code>...
+ * {@code StaticOperandImpl}...
  */
-public abstract class StaticOperandImpl
-        extends AbstractQOMNode
-        implements StaticOperand {
+public abstract class StaticOperandImpl extends AbstractQOMNode implements StaticOperand {
 
     public StaticOperandImpl(NamePathResolver resolver) {
         super(resolver);

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/UpperCaseImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/UpperCaseImpl.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/UpperCaseImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/UpperCaseImpl.java Wed Sep  7 12:00:14 2011
@@ -16,13 +16,13 @@
  */
 package org.apache.jackrabbit.spi.commons.query.qom;
 
+import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
+
 import javax.jcr.query.qom.DynamicOperand;
 import javax.jcr.query.qom.UpperCase;
 
-import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
-
 /**
- * <code>UpperCaseImpl</code>...
+ * {@code UpperCaseImpl}...
  */
 public class UpperCaseImpl extends DynamicOperandImpl implements UpperCase {
 
@@ -41,6 +41,7 @@ public class UpperCaseImpl extends Dynam
      *
      * @return the operand; non-null
      */
+    @Override
     public DynamicOperand getOperand() {
         return operand;
     }
@@ -48,11 +49,12 @@ public class UpperCaseImpl extends Dynam
     //------------------------< AbstractQOMNode >-------------------------------
 
     /**
-     * Accepts a <code>visitor</code> and calls the appropriate visit method
+     * Accepts a {@code visitor} and calls the appropriate visit method
      * depending on the type of this QOM node.
      *
      * @param visitor the visitor.
      */
+    @Override
     public Object accept(QOMTreeVisitor visitor, Object data) throws Exception {
         return visitor.visit(this, data);
     }
@@ -60,7 +62,7 @@ public class UpperCaseImpl extends Dynam
     //------------------------< Object >----------------------------------------
 
     public String toString() {
-        return "UPPER(" + operand + ")";
+        return "UPPER(" + operand + ')';
     }
 
 }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTContainsExpression.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTContainsExpression.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTContainsExpression.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTContainsExpression.java Wed Sep  7 12:00:14 2011
@@ -51,6 +51,7 @@ public class ASTContainsExpression exten
     /**
      * Accept the visitor. *
      */
+    @Override
     public Object jjtAccept(JCRSQLParserVisitor visitor, Object data) {
         return visitor.visit(this, data);
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTIdentifier.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTIdentifier.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTIdentifier.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTIdentifier.java Wed Sep  7 12:00:14 2011
@@ -39,6 +39,7 @@ public class ASTIdentifier extends Simpl
     }
 
   /** Accept the visitor. **/
+  @Override
   public Object jjtAccept(JCRSQLParserVisitor visitor, Object data) {
     return visitor.visit(this, data);
   }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTLiteral.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTLiteral.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTLiteral.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTLiteral.java Wed Sep  7 12:00:14 2011
@@ -51,6 +51,7 @@ public class ASTLiteral extends SimpleNo
     /**
      * Accept the visitor. *
      */
+    @Override
     public Object jjtAccept(JCRSQLParserVisitor visitor, Object data) {
         return visitor.visit(this, data);
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTPredicate.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTPredicate.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTPredicate.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/ASTPredicate.java Wed Sep  7 12:00:14 2011
@@ -22,7 +22,7 @@ public class ASTPredicate extends Simple
 
     private int operationType;
 
-    private boolean negate = false;
+    private boolean negate;
 
     private Name identifier;
 
@@ -39,7 +39,7 @@ public class ASTPredicate extends Simple
   }
 
     public void setOperationType(int type) {
-        this.operationType = type;
+        operationType = type;
     }
 
     public int getOperationType() {
@@ -47,11 +47,11 @@ public class ASTPredicate extends Simple
     }
 
     public void setNegate(boolean b) {
-        this.negate = b;
+        negate = b;
     }
 
     public boolean isNegate() {
-        return this.negate;
+        return negate;
     }
 
     public void setIdentifier(Name identifier) {
@@ -63,7 +63,7 @@ public class ASTPredicate extends Simple
     }
 
     public void setIdentifierOperand(String identifier) {
-        this.identifierOperand = identifier;
+        identifierOperand = identifier;
     }
 
     public String getIdentifierOperand() {
@@ -71,7 +71,7 @@ public class ASTPredicate extends Simple
     }
 
     public void setEscapeString(String esc) {
-        this.escapeString = esc;
+        escapeString = esc;
     }
 
     public String getEscapeString() {
@@ -79,6 +79,7 @@ public class ASTPredicate extends Simple
     }
 
   /** Accept the visitor. **/
+  @Override
   public Object jjtAccept(JCRSQLParserVisitor visitor, Object data) {
     return visitor.visit(this, data);
   }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/DefaultParserVisitor.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/DefaultParserVisitor.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/DefaultParserVisitor.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/DefaultParserVisitor.java Wed Sep  7 12:00:14 2011
@@ -18,86 +18,106 @@ package org.apache.jackrabbit.spi.common
 
 /**
  * Implements a {@link JCRSQLParserVisitor} with default method implementations.
- * All visit method simply return the <code>data</code> parameter.
+ * All visit method simply return the {@code data} parameter.
  */
 class DefaultParserVisitor implements JCRSQLParserVisitor {
 
+    @Override
     public Object visit(SimpleNode node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTQuery node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTSelectList node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTFromClause node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTWhereClause node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTPredicate node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTOrExpression node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTAndExpression node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTNotExpression node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTBracketExpression node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTLiteral node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTIdentifier node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTOrderByClause node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTContainsExpression node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTOrderSpec node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTAscendingOrderSpec node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTDescendingOrderSpec node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTLowerFunction node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTUpperFunction node, Object data) {
         return data;
     }
 
+    @Override
     public Object visit(ASTExcerptFunction node, Object data) {
         return data;
     }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/JCRSQLQueryBuilder.java Wed Sep  7 12:00:14 2011
@@ -77,7 +77,7 @@ public class JCRSQLQueryBuilder implemen
     /**
      * Map of reusable JCRSQL parser instances indexed by NamespaceResolver.
      */
-    private static Map parsers = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
+    private static final Map parsers = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
 
     /**
      * The root node of the sql query syntax tree
@@ -92,7 +92,7 @@ public class JCRSQLQueryBuilder implemen
     /**
      * To resolve QNames
      */
-    private NameResolver resolver;
+    private final NameResolver resolver;
 
     /**
      * Query node to gather the constraints defined in the WHERE clause
@@ -115,30 +115,30 @@ public class JCRSQLQueryBuilder implemen
     private final QueryNodeFactory factory;
 
     /**
-     * Creates a new <code>JCRSQLQueryBuilder</code>.
+     * Creates a new {@code JCRSQLQueryBuilder}.
      *
      * @param statement the root node of the SQL syntax tree.
      * @param resolver  a namespace resolver to use for names in the
-     *                  <code>statement</code>.
+     *                  {@code statement}.
      * @param factory   the query node factory.
      */
     private JCRSQLQueryBuilder(ASTQuery statement,
                                NameResolver resolver,
                                QueryNodeFactory factory) {
-        this.stmt = statement;
+        stmt = statement;
         this.resolver = resolver;
         this.factory = factory;
-        this.constraintNode =  factory.createAndQueryNode(null);
+        constraintNode =  factory.createAndQueryNode(null);
     }
 
     /**
-     * Creates a <code>QueryNode</code> tree from a SQL <code>statement</code>
-     * using the passed query node <code>factory</code>.
+     * Creates a {@code QueryNode} tree from a SQL {@code statement}
+     * using the passed query node {@code factory}.
      *
      * @param statement the SQL statement.
      * @param resolver  the namespace resolver to use.
-     * @return the <code>QueryNode</code> tree.
-     * @throws InvalidQueryException if <code>statement</code> is malformed.
+     * @return the {@code QueryNode} tree.
+     * @throws InvalidQueryException if {@code statement} is malformed.
      */
     public static QueryRootNode createQuery(String statement,
                                             NameResolver resolver,
@@ -188,10 +188,10 @@ public class JCRSQLQueryBuilder implemen
     }
 
     /**
-     * Parses the statement and returns the root node of the <code>QueryNode</code>
+     * Parses the statement and returns the root node of the {@code QueryNode}
      * tree.
      *
-     * @return the root node of the <code>QueryNode</code> tree.
+     * @return the root node of the {@code QueryNode} tree.
      */
     private QueryRootNode getRootNode() {
         if (root == null) {
@@ -202,11 +202,13 @@ public class JCRSQLQueryBuilder implemen
 
     //----------------< JCRSQLParserVisitor >------------------------------------
 
+    @Override
     public Object visit(SimpleNode node, Object data) {
         // do nothing, should never be called actually
         return data;
     }
 
+    @Override
     public Object visit(ASTQuery node, Object data) {
         root = factory.createQueryRootNode();
         root.setLocationNode(factory.createPathQueryNode(root));
@@ -217,7 +219,7 @@ public class JCRSQLQueryBuilder implemen
         // use //* if no path has been set
         PathQueryNode pathNode = root.getLocationNode();
         pathNode.setAbsolute(true);
-        if (pathConstraints.size() == 0) {
+        if (pathConstraints.isEmpty()) {
             LocationStepQueryNode step = factory.createLocationStepQueryNode(pathNode);
             step.setNameTest(null);
             step.setIncludeDescendants(true);
@@ -227,8 +229,8 @@ public class JCRSQLQueryBuilder implemen
                 while (pathConstraints.size() > 1) {
                     // merge path nodes
                     MergingPathQueryNode path = null;
-                    for (Iterator it = pathConstraints.iterator(); it.hasNext();) {
-                        path = (MergingPathQueryNode) it.next();
+                    for (Object pathConstraint : pathConstraints) {
+                        path = (MergingPathQueryNode) pathConstraint;
                         if (path.needsMerge()) {
                             break;
                         } else {
@@ -250,11 +252,11 @@ public class JCRSQLQueryBuilder implemen
             }
             MergingPathQueryNode path = (MergingPathQueryNode) pathConstraints.get(0);
             LocationStepQueryNode[] steps = path.getPathSteps();
-            for (int i = 0; i < steps.length; i++) {
+            for (LocationStepQueryNode step1 : steps) {
                 LocationStepQueryNode step = factory.createLocationStepQueryNode(pathNode);
-                step.setNameTest(steps[i].getNameTest());
-                step.setIncludeDescendants(steps[i].getIncludeDescendants());
-                step.setIndex(steps[i].getIndex());
+                step.setNameTest(step1.getNameTest());
+                step.setIncludeDescendants(step1.getIncludeDescendants());
+                step.setIndex(step1.getIndex());
                 pathNode.addPathStep(step);
             }
         }
@@ -280,15 +282,18 @@ public class JCRSQLQueryBuilder implemen
         return root;
     }
 
+    @Override
     public Object visit(ASTSelectList node, Object data) {
         final QueryRootNode root = (QueryRootNode) data;
 
         node.childrenAccept(new DefaultParserVisitor() {
+            @Override
             public Object visit(ASTIdentifier node, Object data) {
                 root.addSelectProperty(node.getName());
                 return data;
             }
 
+            @Override
             public Object visit(ASTExcerptFunction node, Object data) {
                 root.addSelectProperty(NameFactoryImpl.getInstance().create(Name.NS_REP_URI, "excerpt(.)"));
                 return data;
@@ -298,10 +303,12 @@ public class JCRSQLQueryBuilder implemen
         return data;
     }
 
+    @Override
     public Object visit(ASTFromClause node, Object data) {
         QueryRootNode root = (QueryRootNode) data;
 
         return node.childrenAccept(new DefaultParserVisitor() {
+            @Override
             public Object visit(ASTIdentifier node, Object data) {
                 if (!node.getName().equals(NameConstants.NT_BASE)) {
                     // node is either primary or mixin node type
@@ -312,10 +319,12 @@ public class JCRSQLQueryBuilder implemen
         }, root);
     }
 
+    @Override
     public Object visit(ASTWhereClause node, Object data) {
         return node.childrenAccept(this, constraintNode);
     }
 
+    @Override
     public Object visit(ASTPredicate node, Object data) {
         NAryQueryNode parent = (NAryQueryNode) data;
 
@@ -326,6 +335,7 @@ public class JCRSQLQueryBuilder implemen
             final Name[] tmp = new Name[2];
             final ASTLiteral[] value = new ASTLiteral[1];
             node.childrenAccept(new DefaultParserVisitor() {
+                @Override
                 public Object visit(ASTIdentifier node, Object data) {
                     if (tmp[0] == null) {
                         tmp[0] = node.getName();
@@ -335,16 +345,19 @@ public class JCRSQLQueryBuilder implemen
                     return data;
                 }
 
+                @Override
                 public Object visit(ASTLiteral node, Object data) {
                     value[0] = node;
                     return data;
                 }
 
+                @Override
                 public Object visit(ASTLowerFunction node, Object data) {
                     getIdentifier(node);
                     return data;
                 }
 
+                @Override
                 public Object visit(ASTUpperFunction node, Object data) {
                     getIdentifier(node);
                     return data;
@@ -403,7 +416,8 @@ public class JCRSQLQueryBuilder implemen
                         // backslash is the escape character we use internally
                         pattern.setValue(translateEscaping(pattern.getValue(), node.getEscapeString().charAt(0), '\\'));
                     } else {
-                        throw new IllegalArgumentException("ESCAPE string value must have length 1: '" + node.getEscapeString() + "'");
+                        throw new IllegalArgumentException("ESCAPE string value must have length 1: '" +
+                                node.getEscapeString() + '\'');
                     }
                 } else {
                     // no escape character specified.
@@ -453,6 +467,7 @@ public class JCRSQLQueryBuilder implemen
         return data;
     }
 
+    @Override
     public Object visit(ASTOrExpression node, Object data) {
         NAryQueryNode parent = (NAryQueryNode) data;
         OrQueryNode orQuery = factory.createOrQueryNode(parent);
@@ -465,6 +480,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTAndExpression node, Object data) {
         NAryQueryNode parent = (NAryQueryNode) data;
         AndQueryNode andQuery = factory.createAndQueryNode(parent);
@@ -477,6 +493,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTNotExpression node, Object data) {
         NAryQueryNode parent = (NAryQueryNode) data;
         NotQueryNode notQuery = factory.createNotQueryNode(parent);
@@ -489,6 +506,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTBracketExpression node, Object data) {
         // bracket expression only has influence on how the syntax tree
         // is created.
@@ -496,16 +514,19 @@ public class JCRSQLQueryBuilder implemen
         return node.childrenAccept(this, data);
     }
 
+    @Override
     public Object visit(ASTLiteral node, Object data) {
         // do nothing
         return data;
     }
 
+    @Override
     public Object visit(ASTIdentifier node, Object data) {
         // do nothing
         return data;
     }
 
+    @Override
     public Object visit(ASTOrderByClause node, Object data) {
         QueryRootNode root = (QueryRootNode) data;
 
@@ -515,6 +536,7 @@ public class JCRSQLQueryBuilder implemen
         return root;
     }
 
+    @Override
     public Object visit(ASTOrderSpec node, Object data) {
         OrderQueryNode order = (OrderQueryNode) data;
 
@@ -522,6 +544,7 @@ public class JCRSQLQueryBuilder implemen
 
         // collect identifier
         node.childrenAccept(new DefaultParserVisitor() {
+            @Override
             public Object visit(ASTIdentifier node, Object data) {
                 identifier[0] = node.getName();
                 return data;
@@ -543,17 +566,20 @@ public class JCRSQLQueryBuilder implemen
         return data;
     }
 
+    @Override
     public Object visit(ASTAscendingOrderSpec node, Object data) {
         // do nothing ascending is default anyway
         return data;
     }
 
+    @Override
     public Object visit(ASTDescendingOrderSpec node, Object data) {
         OrderQueryNode.OrderSpec spec = (OrderQueryNode.OrderSpec) data;
         spec.setAscending(false);
         return data;
     }
 
+    @Override
     public Object visit(ASTContainsExpression node, Object data) {
         NAryQueryNode parent = (NAryQueryNode) data;
         try {
@@ -573,6 +599,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTLowerFunction node, Object data) {
         RelationQueryNode parent = (RelationQueryNode) data;
         if (parent.getValueType() != QueryConstants.TYPE_STRING) {
@@ -583,6 +610,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTUpperFunction node, Object data) {
         RelationQueryNode parent = (RelationQueryNode) data;
         if (parent.getValueType() != QueryConstants.TYPE_STRING) {
@@ -593,6 +621,7 @@ public class JCRSQLQueryBuilder implemen
         return parent;
     }
 
+    @Override
     public Object visit(ASTExcerptFunction node, Object data) {
         // do nothing
         return data;
@@ -603,13 +632,13 @@ public class JCRSQLQueryBuilder implemen
     /**
      * Creates a new {@link org.apache.jackrabbit.spi.commons.query.RelationQueryNode}.
      *
-     * @param parent        the parent node for the created <code>RelationQueryNode</code>.
+     * @param parent        the parent node for the created {@code RelationQueryNode}.
      * @param propertyName  the property name for the relation.
      * @param operationType the operation type.
      * @param literal       the literal value for the relation or
-     *                      <code>null</code> if the relation does not have a
+     *                      {@code null} if the relation does not have a
      *                      literal (e.g. IS NULL).
-     * @return a <code>RelationQueryNode</code>.
+     * @return a {@code RelationQueryNode}.
      * @throws IllegalArgumentException if the literal value does not conform
      *                                  to its type. E.g. a malformed String representation of a date.
      */
@@ -673,7 +702,7 @@ public class JCRSQLQueryBuilder implemen
     }
 
     /**
-     * Creates <code>LocationStepQueryNode</code>s from a <code>path</code>.
+     * Creates {@code LocationStepQueryNode}s from a {@code path}.
      *
      * @param path      the path pattern
      * @param operation the type of the parent node
@@ -691,26 +720,17 @@ public class JCRSQLQueryBuilder implemen
 
         String[] names = path.split("/");
 
-        for (int i = 0; i < names.length; i++) {
-            if (names[i].length() == 0) {
-                if (i == 0) {
-                    // root
-                    pathNode.addPathStep(factory.createLocationStepQueryNode(pathNode));
-                } else {
-                    // descendant '//' -> invalid path
-                    // todo throw or ignore?
-                    // we currently do not throw and add location step for an
-                    // empty name (which is basically the root node)
-                    pathNode.addPathStep(factory.createLocationStepQueryNode(pathNode));
-                }
+        for (String name1 : names) {
+            if (name1.length() == 0) {
+                pathNode.addPathStep(factory.createLocationStepQueryNode(pathNode));
             } else {
-                int idx = names[i].indexOf('[');
+                int idx = name1.indexOf('[');
                 String name;
                 int index = LocationStepQueryNode.NONE;
                 if (idx > -1) {
                     // contains index
-                    name = names[i].substring(0, idx);
-                    String suffix = names[i].substring(idx);
+                    name = name1.substring(0, idx);
+                    String suffix = name1.substring(idx);
                     String indexStr = suffix.substring(1, suffix.length() - 1);
                     if (indexStr.equals("%")) {
                         // select all same name siblings
@@ -718,8 +738,9 @@ public class JCRSQLQueryBuilder implemen
                     } else {
                         try {
                             index = Integer.parseInt(indexStr);
-                        } catch (NumberFormatException e) {
-                            log.warn("Unable to parse index for path element: " + names[i]);
+                        }
+                        catch (NumberFormatException e) {
+                            log.warn("Unable to parse index for path element: " + name1);
                         }
                     }
                     if (name.equals("%")) {
@@ -729,7 +750,7 @@ public class JCRSQLQueryBuilder implemen
                     // no index specified
                     // - index defaults to 1 if there is an explicit name test
                     // - index defaults to NONE if name test is %
-                    name = names[i];
+                    name = name1;
                     if (name.equals("%")) {
                         name = null;
                     } else {
@@ -740,9 +761,11 @@ public class JCRSQLQueryBuilder implemen
                 if (name != null) {
                     try {
                         qName = resolver.getQName(name);
-                    } catch (NamespaceException e) {
+                    }
+                    catch (NamespaceException e) {
                         throw new IllegalArgumentException("Illegal name: " + name);
-                    } catch (NameException e) {
+                    }
+                    catch (NameException e) {
                         throw new IllegalArgumentException("Illegal name: " + name);
                     }
                 }
@@ -761,21 +784,21 @@ public class JCRSQLQueryBuilder implemen
     }
 
     /**
-     * Translates a pattern using the escape character <code>from</code> into
-     * a pattern using the escape character <code>to</code>.
+     * Translates a pattern using the escape character {@code from} into
+     * a pattern using the escape character {@code to}.
      *
      * @param pattern the pattern to translate
      * @param from    the currently used escape character.
      * @param to      the new escape character to use.
-     * @return the new pattern using the escape character <code>to</code>.
+     * @return the new pattern using the escape character {@code to}.
      */
     private static String translateEscaping(String pattern, char from, char to) {
         // if escape characters are the same OR pattern does not contain any
         // escape characters -> simply return pattern as is.
-        if (from == to || (pattern.indexOf(from) < 0 && pattern.indexOf(to) < 0)) {
+        if (from == to || pattern.indexOf(from) < 0 && pattern.indexOf(to) < 0) {
             return pattern;
         }
-        StringBuffer translated = new StringBuffer(pattern.length());
+        StringBuilder translated = new StringBuilder(pattern.length());
         boolean escaped = false;
         for (int i = 0; i < pattern.length(); i++) {
             if (pattern.charAt(i) == from) {
@@ -804,40 +827,40 @@ public class JCRSQLQueryBuilder implemen
     }
 
     /**
-     * Extends the <code>PathQueryNode</code> with merging capability. A
-     * <code>PathQueryNode</code> <code>n1</code> can be merged with another
-     * node <code>n2</code> in the following case:
+     * Extends the {@code PathQueryNode} with merging capability. A
+     * {@code PathQueryNode} {@code n1} can be merged with another
+     * node {@code n2} in the following case:
      * <p/>
-     * <code>n1</code> contains a location step at position <code>X</code> with
+     * {@code n1} contains a location step at position {@code X} with
      * a name test that matches any node and has the descending flag set. Where
-     * <code>X</code> &lt; number of location steps.
-     * <code>n2</code> contains no location step to match any node name and
+     * {@code X} &lt; number of location steps.
+     * {@code n2} contains no location step to match any node name and
      * the sequence of name tests is the same as the sequence of name tests
-     * of <code>n1</code>.
-     * The merged node then contains a location step at position <code>X</code>
-     * with the name test of the location step at position <code>X+1</code> and
+     * of {@code n1}.
+     * The merged node then contains a location step at position {@code X}
+     * with the name test of the location step at position {@code X+1} and
      * the descending flag set.
      * <p/>
      * The following path patterns:<br/>
-     * <code>/foo/%/bar</code> OR <code>/foo/bar</code><br/>
+     * {@code /foo/%/bar} OR {@code /foo/bar}<br/>
      * are merged into:<br/>
-     * <code>/foo//bar</code>.
+     * {@code /foo//bar}.
      * <p/>
      * The path patterns:<br/>
-     * <code>/foo/%</code> AND NOT <code>/foo/%/%</code><br/>
+     * {@code /foo/%} AND NOT {@code /foo/%/%}<br/>
      * are merged into:<br/>
-     * <code>/foo/*</code>
+     * {@code /foo/*}
      */
     private static class MergingPathQueryNode extends PathQueryNode {
 
         /**
          * The operation type of the parent node
          */
-        private int operation;
+        private final int operation;
 
         /**
-         * Creates a new <code>MergingPathQueryNode</code> with the operation
-         * tpye of a parent node. <code>operation</code> must be one of:
+         * Creates a new {@code MergingPathQueryNode} with the operation
+         * tpye of a parent node. {@code operation} must be one of:
          * {@link org.apache.jackrabbit.spi.commons.query.QueryNode#TYPE_OR},
          * {@link org.apache.jackrabbit.spi.commons.query.QueryNode#TYPE_AND} or
          * {@link org.apache.jackrabbit.spi.commons.query.QueryNode#TYPE_NOT}.
@@ -856,7 +879,7 @@ public class JCRSQLQueryBuilder implemen
         }
 
         /**
-         * Merges this node with a node from <code>nodes</code>. If a merge
+         * Merges this node with a node from {@code nodes}. If a merge
          * is not possible an NoSuchElementException is thrown.
          *
          * @param nodes the nodes to try to merge with.
@@ -876,9 +899,9 @@ public class JCRSQLQueryBuilder implemen
          * <p/>
          * Example:<br/>
          * The path patterns:<br/>
-         * <code>/foo/%</code> AND NOT <code>/foo/%/%</code><br/>
+         * {@code /foo/%} AND NOT {@code /foo/%/%}<br/>
          * are merged into:<br/>
-         * <code>/foo/*</code>
+         * {@code /foo/*}
          *
          * @param nodes the nodes to merge with.
          * @return the merged nodes.
@@ -904,24 +927,26 @@ public class JCRSQLQueryBuilder implemen
                 throw new NoSuchElementException("Merging not possible");
             }
             int size = operands.size();
-            LocationStepQueryNode n1 = (LocationStepQueryNode) operands.get(size - 1);
-            LocationStepQueryNode n2 = (LocationStepQueryNode) operands.get(size - 2);
+            LocationStepQueryNode n1 = operands.get(size - 1);
+            LocationStepQueryNode n2 = operands.get(size - 2);
             if (n1.getNameTest() != null || n2.getNameTest() != null
                     || !n1.getIncludeDescendants() || !n2.getIncludeDescendants()) {
                 throw new NoSuchElementException("Merging not possible");
             }
             // find a node to merge with
             MergingPathQueryNode matchedNode = null;
-            for (int i = 0; i < nodes.length; i++) {
-                if (nodes[i].operands.size() == operands.size() - 1) {
+            for (MergingPathQueryNode node : nodes) {
+                if (node.operands.size() == operands.size() - 1) {
                     boolean match = true;
                     for (int j = 0; j < operands.size() - 1 && match; j++) {
-                        LocationStepQueryNode step = (LocationStepQueryNode) operands.get(j);
-                        LocationStepQueryNode other = (LocationStepQueryNode) nodes[i].operands.get(j);
-                        match &= (step.getNameTest() == null) ? other.getNameTest() == null : step.getNameTest().equals(other.getNameTest());
+                        LocationStepQueryNode step = operands.get(j);
+                        LocationStepQueryNode other = node.operands.get(j);
+                        match &= step.getNameTest() == null
+                            ? other.getNameTest() == null
+                            : step.getNameTest().equals(other.getNameTest());
                     }
                     if (match) {
-                        matchedNode = nodes[i];
+                        matchedNode = node;
                         break;
                     }
                 }
@@ -931,7 +956,7 @@ public class JCRSQLQueryBuilder implemen
             }
             // change descendants flag to only match child nodes
             // that's the result of the merge.
-            ((LocationStepQueryNode) matchedNode.operands.get(matchedNode.operands.size() - 1)).setIncludeDescendants(false);
+            matchedNode.operands.get(matchedNode.operands.size() - 1).setIncludeDescendants(false);
             return nodes;
         }
 
@@ -941,9 +966,9 @@ public class JCRSQLQueryBuilder implemen
          * <p/>
          * Example:<br/>
          * The following path patterns:<br/>
-         * <code>/foo/%/bar</code> OR <code>/foo/bar</code><br/>
+         * {@code /foo/%/bar} OR {@code /foo/bar}<br/>
          * are merged into:<br/>
-         * <code>/foo//bar</code>.
+         * {@code /foo//bar}.
          *
          * @param nodes the node to merge.
          * @return the merged nodes.
@@ -969,19 +994,19 @@ public class JCRSQLQueryBuilder implemen
             }
 
             MergingPathQueryNode matchedNode = null;
-            for (int i = 0; i < nodes.length; i++) {
+            for (MergingPathQueryNode node : nodes) {
                 // loop over the steps and compare the names
-                if (nodes[i].operands.size() == compacted.operands.size()) {
+                if (node.operands.size() == compacted.operands.size()) {
                     boolean match = true;
                     Iterator compactedSteps = compacted.operands.iterator();
-                    Iterator otherSteps = nodes[i].operands.iterator();
+                    Iterator otherSteps = node.operands.iterator();
                     while (match && compactedSteps.hasNext()) {
                         LocationStepQueryNode n1 = (LocationStepQueryNode) compactedSteps.next();
                         LocationStepQueryNode n2 = (LocationStepQueryNode) otherSteps.next();
-                        match &= (n1.getNameTest() == null) ? n2.getNameTest() == null : n1.getNameTest().equals(n2.getNameTest());
+                        match &= n1.getNameTest() == null ? n2.getNameTest() == null : n1.getNameTest().equals(n2.getNameTest());
                     }
                     if (match) {
-                        matchedNode = nodes[i];
+                        matchedNode = node;
                         break;
                     }
                 }
@@ -997,15 +1022,14 @@ public class JCRSQLQueryBuilder implemen
         }
 
         /**
-         * Returns <code>true</code> if this node needs merging; <code>false</code>
+         * Returns {@code true} if this node needs merging; {@code false}
          * otherwise.
          *
-         * @return <code>true</code> if this node needs merging; <code>false</code>
+         * @return {@code true} if this node needs merging; {@code false}
          *         otherwise.
          */
         boolean needsMerge() {
-            for (Iterator it = operands.iterator(); it.hasNext();) {
-                LocationStepQueryNode step = (LocationStepQueryNode) it.next();
+            for (LocationStepQueryNode step : operands) {
                 if (step.getIncludeDescendants() && step.getNameTest() == null) {
                     return true;
                 }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryBuilder.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryBuilder.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryBuilder.java Wed Sep  7 12:00:14 2011
@@ -32,16 +32,17 @@ public class QueryBuilder implements Que
     /**
      * @inheritDoc
      */
-    public QueryRootNode createQueryTree(String statement,
-                                         NameResolver resolver,
-                                         QueryNodeFactory factory)
+    @Override
+    public QueryRootNode createQueryTree(String statement, NameResolver resolver, QueryNodeFactory factory)
             throws InvalidQueryException {
+
         return JCRSQLQueryBuilder.createQuery(statement, resolver, factory);
     }
 
     /**
      * @inheritDoc
      */
+    @Override
     public boolean canHandle(String language) {
         return Query.SQL.equals(language);
     }
@@ -50,6 +51,7 @@ public class QueryBuilder implements Que
      * This builder supports {@link Query#SQL}.
      * @inheritDoc
      */
+    @Override
     public String[] getSupportedLanguages() {
         return new String[]{Query.SQL};
     }
@@ -57,8 +59,8 @@ public class QueryBuilder implements Que
     /**
      * @inheritDoc
      */
-    public String toString(QueryRootNode root, NameResolver resolver)
-            throws InvalidQueryException {
+    @Override
+    public String toString(QueryRootNode root, NameResolver resolver) throws InvalidQueryException {
         return JCRSQLQueryBuilder.toString(root, resolver);
     }
 }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryFormat.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryFormat.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/QueryFormat.java Wed Sep  7 12:00:14 2011
@@ -16,16 +16,6 @@
  */
 package org.apache.jackrabbit.spi.commons.query.sql;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TimeZone;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
 import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
@@ -38,6 +28,7 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.spi.commons.query.NotQueryNode;
 import org.apache.jackrabbit.spi.commons.query.OrQueryNode;
 import org.apache.jackrabbit.spi.commons.query.OrderQueryNode;
+import org.apache.jackrabbit.spi.commons.query.OrderQueryNode.OrderSpec;
 import org.apache.jackrabbit.spi.commons.query.PathQueryNode;
 import org.apache.jackrabbit.spi.commons.query.PropertyFunctionQueryNode;
 import org.apache.jackrabbit.spi.commons.query.QueryConstants;
@@ -48,6 +39,15 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.spi.commons.query.TextsearchQueryNode;
 import org.apache.jackrabbit.util.ISO8601;
 
+import javax.jcr.NamespaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.query.InvalidQueryException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TimeZone;
+
 /**
  * Implements the query node tree serialization into a String.
  */
@@ -77,21 +77,21 @@ class QueryFormat implements QueryNodeVi
             throws RepositoryException {
         this.resolver = resolver;
         statement = root.accept(this, new StringBuffer()).toString();
-        if (exceptions.size() > 0) {
+        if (!exceptions.isEmpty()) {
             Exception e = (Exception) exceptions.get(0);
             throw new InvalidQueryException(e.getMessage(), e);
         }
     }
 
     /**
-     * Creates a SQL <code>String</code> representation of the QueryNode tree
-     * argument <code>root</code>.
+     * Creates a SQL {@code String} representation of the QueryNode tree
+     * argument {@code root}.
      *
      * @param root     the query node tree.
      * @param resolver to resolve QNames.
      * @return the SQL string representation of the QueryNode tree.
      * @throws InvalidQueryException the query node tree cannot be represented
-     *                               as a SQL <code>String</code>.
+     *                               as a SQL {@code String}.
      */
     public static String toString(QueryRootNode root, NameResolver resolver)
             throws InvalidQueryException {
@@ -114,6 +114,7 @@ class QueryFormat implements QueryNodeVi
 
     //-------------< QueryNodeVisitor interface >-------------------------------
 
+    @Override
     public Object visit(QueryRootNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         try {
@@ -124,9 +125,9 @@ class QueryFormat implements QueryNodeVi
                 sb.append(" *");
             } else {
                 String comma = "";
-                for (int i = 0; i < selectProps.length; i++) {
-                    sb.append(comma).append(" ");
-                    appendName(selectProps[i], resolver, sb);
+                for (Name selectProp : selectProps) {
+                    sb.append(comma).append(' ');
+                    appendName(selectProp, resolver, sb);
                     comma = ",";
                 }
             }
@@ -140,18 +141,18 @@ class QueryFormat implements QueryNodeVi
             LocationStepQueryNode[] steps = node.getLocationNode().getPathSteps();
             QueryNode[] predicates = steps[steps.length - 1].getPredicates();
             // are there any relevant predicates?
-            for (int i = 0; i < predicates.length; i++) {
-                if (predicates[i].getType() != QueryNode.TYPE_NODETYPE) {
+            for (QueryNode predicate : predicates) {
+                if (predicate.getType() != QueryNode.TYPE_NODETYPE) {
                     tmp.append(" WHERE ");
                 }
             }
             String and = "";
-            for (int i = 0; i < predicates.length; i++) {
-                if (predicates[i].getType() != QueryNode.TYPE_NODETYPE) {
+            for (QueryNode predicate : predicates) {
+                if (predicate.getType() != QueryNode.TYPE_NODETYPE) {
                     tmp.append(and);
                     and = " AND ";
                 }
-                predicates[i].accept(this, tmp);
+                predicate.accept(this, tmp);
             }
 
             // node types have been collected by now
@@ -159,13 +160,13 @@ class QueryFormat implements QueryNodeVi
             int ntCount = 0;
             for (Iterator it = nodeTypes.iterator(); it.hasNext(); ntCount++) {
                 Name nt = (Name) it.next();
-                sb.append(comma).append(" ");
+                sb.append(comma).append(' ');
                 appendName(nt, resolver, sb);
                 comma = ",";
             }
 
             if (ntCount == 0) {
-                sb.append(" ");
+                sb.append(' ');
                 sb.append(resolver.getJCRName(NameConstants.NT_BASE));
             }
 
@@ -199,6 +200,7 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(OrQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         boolean bracket = false;
@@ -208,21 +210,22 @@ class QueryFormat implements QueryNodeVi
             bracket = true;
         }
         if (bracket) {
-            sb.append("(");
+            sb.append('(');
         }
         String or = "";
         QueryNode[] operands = node.getOperands();
-        for (int i = 0; i < operands.length; i++) {
+        for (QueryNode operand : operands) {
             sb.append(or);
-            operands[i].accept(this, sb);
+            operand.accept(this, sb);
             or = " OR ";
         }
         if (bracket) {
-            sb.append(")");
+            sb.append(')');
         }
         return sb;
     }
 
+    @Override
     public Object visit(AndQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         boolean bracket = false;
@@ -230,14 +233,14 @@ class QueryFormat implements QueryNodeVi
             bracket = true;
         }
         if (bracket) {
-            sb.append("(");
+            sb.append('(');
         }
         String and = "";
         QueryNode[] operands = node.getOperands();
-        for (int i = 0; i < operands.length; i++) {
+        for (QueryNode operand : operands) {
             sb.append(and);
             int len = sb.length();
-            operands[i].accept(this, sb);
+            operand.accept(this, sb);
             // check if something has been written at all
             // might have been a node type query node
             if (sb.length() - len > 0) {
@@ -247,11 +250,12 @@ class QueryFormat implements QueryNodeVi
             }
         }
         if (bracket) {
-            sb.append(")");
+            sb.append(')');
         }
         return sb;
     }
 
+    @Override
     public Object visit(NotQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         QueryNode[] operands = node.getOperands();
@@ -262,6 +266,7 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(ExactQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         try {
@@ -269,22 +274,24 @@ class QueryFormat implements QueryNodeVi
         } catch (NamespaceException e) {
             exceptions.add(e);
         }
-        sb.append("='").append(node.getValue()).append("'");
+        sb.append("='").append(node.getValue()).append('\'');
         return sb;
     }
 
+    @Override
     public Object visit(NodeTypeQueryNode node, Object data) {
         nodeTypes.add(node.getValue());
         return data;
     }
 
+    @Override
     public Object visit(TextsearchQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         // escape quote
         String query = node.getQuery().replaceAll("'", "''");
         sb.append("CONTAINS(");
         if (node.getRelativePath() == null) {
-            sb.append("*");
+            sb.append('*');
         } else {
             if (node.getRelativePath().getLength() > 1
                     || !node.getReferencesProperty()) {
@@ -302,35 +309,36 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(PathQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         try {
             if (containsDescendantOrSelf(node)) {
-                sb.append("(");
+                sb.append('(');
                 sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
                 sb.append(" LIKE '");
                 LocationStepQueryNode[] steps = node.getPathSteps();
-                for (int i = 0; i < steps.length; i++) {
-                    if (steps[i].getNameTest() == null
-                            || steps[i].getNameTest().getLocalName().length() > 0) {
+                for (LocationStepQueryNode step : steps) {
+                    if (step.getNameTest() == null
+                            || step.getNameTest().getLocalName().length() > 0) {
                         sb.append('/');
                     }
-                    if (steps[i].getIncludeDescendants()) {
+                    if (step.getIncludeDescendants()) {
                         sb.append("%/");
                     }
-                    steps[i].accept(this, sb);
+                    step.accept(this, sb);
                 }
                 sb.append('\'');
                 sb.append(" OR ");
                 sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
                 sb.append(" LIKE '");
-                for (int i = 0; i < steps.length; i++) {
-                    if (steps[i].getNameTest() == null
-                            || steps[i].getNameTest().getLocalName().length() > 0) {
+                for (LocationStepQueryNode step : steps) {
+                    if (step.getNameTest() == null
+                            || step.getNameTest().getLocalName().length() > 0) {
                         sb.append('/');
                     }
-                    if (steps[i].getNameTest() != null) {
-                        steps[i].accept(this, sb);
+                    if (step.getNameTest() != null) {
+                        step.accept(this, sb);
                     }
                 }
                 sb.append("')");
@@ -339,12 +347,12 @@ class QueryFormat implements QueryNodeVi
                 sb.append(" LIKE '");
                 StringBuffer path = new StringBuffer();
                 LocationStepQueryNode[] steps = node.getPathSteps();
-                for (int i = 0; i < steps.length; i++) {
-                    if (steps[i].getNameTest() == null
-                            || steps[i].getNameTest().getLocalName().length() > 0) {
+                for (LocationStepQueryNode step : steps) {
+                    if (step.getNameTest() == null
+                            || step.getNameTest().getLocalName().length() > 0) {
                         path.append('/');
                     }
-                    steps[i].accept(this, path);
+                    step.accept(this, path);
                 }
                 sb.append(path);
                 sb.append('\'');
@@ -357,12 +365,12 @@ class QueryFormat implements QueryNodeVi
                 sb.append(resolver.getJCRName(NameConstants.JCR_PATH));
                 sb.append(" LIKE '");
                 LocationStepQueryNode[] steps = node.getPathSteps();
-                for (int i = 0; i < steps.length; i++) {
-                    if (steps[i].getNameTest() == null
-                            || steps[i].getNameTest().getLocalName().length() > 0) {
+                for (LocationStepQueryNode step : steps) {
+                    if (step.getNameTest() == null
+                            || step.getNameTest().getLocalName().length() > 0) {
                         sb.append('/');
                     }
-                    steps[i].accept(this, sb);
+                    step.accept(this, sb);
                 }
                 sb.append('\'');
             }
@@ -372,10 +380,11 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(LocationStepQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         if (node.getNameTest() == null) {
-            sb.append("%");
+            sb.append('%');
         } else {
             if (node.getNameTest().getLocalName().length() > 0) {
                 try {
@@ -397,18 +406,20 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(DerefQueryNode node, Object data) {
         exceptions.add(new InvalidQueryException("jcr:deref() function not supported in SQL"));
         return data;
     }
 
+    @Override
     public Object visit(RelationQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         try {
             StringBuffer propName = new StringBuffer();
             PathQueryNode relPath = node.getRelativePath();
             if (relPath == null) {
-                propName.append(".");
+                propName.append('.');
             } else if (relPath.getPathSteps().length > 1) {
                 exceptions.add(new InvalidQueryException("Child axis not supported in SQL"));
                 return data;
@@ -457,11 +468,11 @@ class QueryFormat implements QueryNodeVi
                 sb.append(propName);
                 sb.append(", ");
                 appendValue(node, sb);
-                sb.append(")");
+                sb.append(')');
             } else if (node.getOperation() == OPERATION_SPELLCHECK) {
                 sb.append("SPELLCHECK(");
                 appendValue(node, sb);
-                sb.append(")");
+                sb.append(')');
             } else {
                 exceptions.add(new InvalidQueryException("Invalid operation: " + node.getOperation()));
             }
@@ -475,6 +486,7 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(OrderQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         sb.append(" ORDER BY");
@@ -482,15 +494,15 @@ class QueryFormat implements QueryNodeVi
         if (specs.length > 0) {
             try {
                 String comma = "";
-                for (int i = 0; i < specs.length; i++) {
-                    sb.append(comma).append(" ");
-                    Path propPath = specs[i].getPropertyPath();
+                for (OrderSpec spec : specs) {
+                    sb.append(comma).append(' ');
+                    Path propPath = spec.getPropertyPath();
                     if (propPath.getLength() > 1) {
                         exceptions.add(new InvalidQueryException("SQL does not support relative paths in order by clause"));
                         return sb;
                     }
                     appendName(propPath.getName(), resolver, sb);
-                    if (!specs[i].isAscending()) {
+                    if (!spec.isAscending()) {
                         sb.append(" DESC");
                     }
                     comma = ",";
@@ -504,13 +516,14 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(PropertyFunctionQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         String functionName = node.getFunctionName();
         if (functionName.equals(PropertyFunctionQueryNode.LOWER_CASE)) {
-            sb.insert(0, "LOWER(").append(")");
+            sb.insert(0, "LOWER(").append(')');
         } else if (functionName.equals(PropertyFunctionQueryNode.UPPER_CASE)) {
-            sb.insert(0, "UPPER(").append(")");
+            sb.insert(0, "UPPER(").append(')');
         } else {
             exceptions.add(new InvalidQueryException("Unsupported function: " + functionName));
         }
@@ -520,16 +533,16 @@ class QueryFormat implements QueryNodeVi
     //------------------------< internal >--------------------------------------
 
     /**
-     * Appends the <code>name</code> to the <code>StringBuffer</code>
-     * <code>b</code> using the <code>NamespaceResolver</code>
-     * <code>resolver</code>. The <code>name</code> is put in double quotes
-     * if the local part of <code>name</code> contains a space character.
+     * Appends the {@code name} to the {@code StringBuffer}
+     * {@code b} using the {@code NamespaceResolver}
+     * {@code resolver}. The {@code name} is put in double quotes
+     * if the local part of {@code name} contains a space character.
      *
-     * @param name     the <code>Name</code> to print.
-     * @param resolver to resolve <code>name</code>.
-     * @param b        where to output the <code>name</code>.
-     * @throws NamespaceException if <code>name</code> contains a uri
-     *                                   that is not declared in <code>resolver</code>.
+     * @param name     the {@code Name} to print.
+     * @param resolver to resolve {@code name}.
+     * @param b        where to output the {@code name}.
+     * @throws NamespaceException if {@code name} contains a uri
+     *                                   that is not declared in {@code resolver}.
      */
     private static void appendName(Name name,
                                    NameResolver resolver,
@@ -551,11 +564,11 @@ class QueryFormat implements QueryNodeVi
         } else if (node.getValueType() == TYPE_DOUBLE) {
             b.append(node.getDoubleValue());
         } else if (node.getValueType() == TYPE_STRING) {
-            b.append("'").append(node.getStringValue().replaceAll("'", "''")).append("'");
+            b.append('\'').append(node.getStringValue().replaceAll("'", "''")).append('\'');
         } else if (node.getValueType() == TYPE_DATE || node.getValueType() == TYPE_TIMESTAMP) {
             Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
             cal.setTime(node.getDateValue());
-            b.append("TIMESTAMP '").append(ISO8601.format(cal)).append("'");
+            b.append("TIMESTAMP '").append(ISO8601.format(cal)).append('\'');
         } else {
             exceptions.add(new InvalidQueryException("Invalid type: " + node.getValueType()));
         }
@@ -563,19 +576,19 @@ class QueryFormat implements QueryNodeVi
     }
 
     /**
-     * Returns <code>true</code> if <code>path</code> contains exactly one
+     * Returns {@code true} if {@code path} contains exactly one
      * step with a descendant-or-self axis and an explicit name test; returns
-     * <code>false</code> otherwise.
+     * {@code false} otherwise.
      *
      * @param path the path node.
-     * @return <code>true</code> if <code>path</code> contains exactly one
+     * @return {@code true} if {@code path} contains exactly one
      *         step with a descendant-or-self axis.
      */
     private static boolean containsDescendantOrSelf(PathQueryNode path) {
         LocationStepQueryNode[] steps = path.getPathSteps();
         int count = 0;
-        for (int i = 0; i < steps.length; i++) {
-            if (steps[i].getNameTest() != null && steps[i].getIncludeDescendants()) {
+        for (LocationStepQueryNode step : steps) {
+            if (step.getNameTest() != null && step.getIncludeDescendants()) {
                 count++;
             }
         }
@@ -583,13 +596,13 @@ class QueryFormat implements QueryNodeVi
     }
 
     /**
-     * Returns <code>true</code> if <code>path</code> contains exactly one
+     * Returns {@code true} if {@code path} contains exactly one
      * location step which matches all node names. That is, matches any children
      * of a given node. That location step must be the last one in the sequence
      * of location steps.
      *
      * @param path the path node.
-     * @return <code>true</code> if the last step matches any node name.
+     * @return {@code true} if the last step matches any node name.
      */
     private static boolean containsAllChildrenMatch(PathQueryNode path) {
         LocationStepQueryNode[] steps = path.getPathSteps();

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryBuilder.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryBuilder.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryBuilder.java Wed Sep  7 12:00:14 2011
@@ -32,16 +32,17 @@ public class QueryBuilder implements Que
     /**
      * @inheritDoc
      */
-    public QueryRootNode createQueryTree(String statement,
-                                         NameResolver resolver,
-                                         QueryNodeFactory factory)
+    @Override
+    public QueryRootNode createQueryTree(String statement, NameResolver resolver, QueryNodeFactory factory)
             throws InvalidQueryException {
+
         return XPathQueryBuilder.createQuery(statement, resolver, factory);
     }
 
     /**
      * @inheritDoc
      */
+    @Override
     public boolean canHandle(String language) {
         return Query.XPATH.equals(language);
     }
@@ -50,6 +51,7 @@ public class QueryBuilder implements Que
      * This builder supports {@link Query#XPATH}.
      * @inheritDoc
      */
+    @Override
     public String[] getSupportedLanguages() {
         return new String[]{Query.XPATH};
     }
@@ -57,8 +59,8 @@ public class QueryBuilder implements Que
     /**
      * @inheritDoc
      */
-    public String toString(QueryRootNode root, NameResolver resolver)
-            throws InvalidQueryException {
+    @Override
+    public String toString(QueryRootNode root, NameResolver resolver) throws InvalidQueryException {
         return XPathQueryBuilder.toString(root, resolver);
     }
 }

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java?rev=1166138&r1=1166137&r2=1166138&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java Wed Sep  7 12:00:14 2011
@@ -16,17 +16,9 @@
  */
 package org.apache.jackrabbit.spi.commons.query.xpath;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.TimeZone;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.query.InvalidQueryException;
-
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.Path;
+import org.apache.jackrabbit.spi.Path.Element;
 import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
 import org.apache.jackrabbit.spi.commons.query.AndQueryNode;
@@ -38,6 +30,7 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.spi.commons.query.NotQueryNode;
 import org.apache.jackrabbit.spi.commons.query.OrQueryNode;
 import org.apache.jackrabbit.spi.commons.query.OrderQueryNode;
+import org.apache.jackrabbit.spi.commons.query.OrderQueryNode.OrderSpec;
 import org.apache.jackrabbit.spi.commons.query.PathQueryNode;
 import org.apache.jackrabbit.spi.commons.query.PropertyFunctionQueryNode;
 import org.apache.jackrabbit.spi.commons.query.QueryConstants;
@@ -49,6 +42,14 @@ import org.apache.jackrabbit.spi.commons
 import org.apache.jackrabbit.util.ISO8601;
 import org.apache.jackrabbit.util.ISO9075;
 
+import javax.jcr.NamespaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.query.InvalidQueryException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.TimeZone;
+
 /**
  * Implements the query node tree serialization into a String.
  */
@@ -73,21 +74,21 @@ class QueryFormat implements QueryNodeVi
             throws RepositoryException {
         this.resolver = resolver;
         statement = root.accept(this, new StringBuffer()).toString();
-        if (exceptions.size() > 0) {
+        if (!exceptions.isEmpty()) {
             Exception e = (Exception) exceptions.get(0);
             throw new InvalidQueryException(e.getMessage(), e);
         }
     }
 
     /**
-     * Creates a XPath <code>String</code> representation of the QueryNode tree
-     * argument <code>root</code>.
+     * Creates a XPath {@code String} representation of the QueryNode tree
+     * argument {@code root}.
      *
      * @param root     the query node tree.
      * @param resolver to resolve QNames.
      * @return the XPath string representation of the QueryNode tree.
      * @throws InvalidQueryException the query node tree cannot be represented
-     *                               as a XPath <code>String</code>.
+     *                               as a XPath {@code String}.
      */
     public static String toString(QueryRootNode root, NameResolver resolver)
             throws InvalidQueryException {
@@ -110,6 +111,7 @@ class QueryFormat implements QueryNodeVi
 
     //-------------< QueryNodeVisitor interface >-------------------------------
 
+    @Override
     public Object visit(QueryRootNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         node.getLocationNode().accept(this, data);
@@ -121,13 +123,14 @@ class QueryFormat implements QueryNodeVi
                 sb.append('(');
             }
             String pipe = "";
-            for (int i = 0; i < selectProps.length; i++) {
+            for (Name selectProp : selectProps) {
                 try {
                     sb.append(pipe);
                     sb.append('@');
-                    sb.append(resolver.getJCRName(encode(selectProps[i])));
+                    sb.append(resolver.getJCRName(encode(selectProp)));
                     pipe = "|";
-                } catch (NamespaceException e) {
+                }
+                catch (NamespaceException e) {
                     exceptions.add(e);
                 }
             }
@@ -141,6 +144,7 @@ class QueryFormat implements QueryNodeVi
         return data;
     }
 
+    @Override
     public Object visit(OrQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         boolean bracket = false;
@@ -148,42 +152,44 @@ class QueryFormat implements QueryNodeVi
             bracket = true;
         }
         if (bracket) {
-            sb.append("(");
+            sb.append('(');
         }
         String or = "";
         QueryNode[] operands = node.getOperands();
-        for (int i = 0; i < operands.length; i++) {
+        for (QueryNode operand : operands) {
             sb.append(or);
-            operands[i].accept(this, sb);
+            operand.accept(this, sb);
             or = " or ";
         }
         if (bracket) {
-            sb.append(")");
+            sb.append(')');
         }
         return sb;
     }
 
+    @Override
     public Object visit(AndQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         String and = "";
         QueryNode[] operands = node.getOperands();
-        for (int i = 0; i < operands.length; i++) {
+        for (QueryNode operand : operands) {
             sb.append(and);
-            operands[i].accept(this, sb);
+            operand.accept(this, sb);
             and = " and ";
         }
         return sb;
     }
 
+    @Override
     public Object visit(NotQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         QueryNode[] operands = node.getOperands();
         if (operands.length > 0) {
             try {
                 sb.append(resolver.getJCRName(XPathQueryBuilder.FN_NOT_10));
-                sb.append("(");
+                sb.append('(');
                 operands[0].accept(this, sb);
-                sb.append(")");
+                sb.append(')');
             } catch (NamespaceException e) {
                 exceptions.add(e);
             }
@@ -191,9 +197,10 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(ExactQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
-        sb.append("@");
+        sb.append('@');
         try {
             Name name = encode(node.getPropertyName());
             sb.append(resolver.getJCRName(name));
@@ -202,23 +209,25 @@ class QueryFormat implements QueryNodeVi
         } catch (NamespaceException e) {
             exceptions.add(e);
         }
-        sb.append("'");
+        sb.append('\'');
         return sb;
     }
 
+    @Override
     public Object visit(NodeTypeQueryNode node, Object data) {
         // handled in location step visit
         return data;
     }
 
+    @Override
     public Object visit(TextsearchQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         try {
             sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_CONTAINS));
-            sb.append("(");
+            sb.append('(');
             Path relPath = node.getRelativePath();
             if (relPath == null) {
-                sb.append(".");
+                sb.append('.');
             } else {
                 Path.Element[] elements = relPath.getElements();
                 String slash = "";
@@ -226,16 +235,16 @@ class QueryFormat implements QueryNodeVi
                     sb.append(slash);
                     slash = "/";
                     if (node.getReferencesProperty() && i == elements.length - 1) {
-                        sb.append("@");
+                        sb.append('@');
                     }
                     if (elements[i].getName().equals(RelationQueryNode.STAR_NAME_TEST)) {
-                        sb.append("*");
+                        sb.append('*');
                     } else {
                         Name n = encode(elements[i].getName());
                         sb.append(resolver.getJCRName(n));
                     }
                     if (elements[i].getIndex() != 0) {
-                        sb.append("[").append(elements[i].getIndex()).append("]");
+                        sb.append('[').append(elements[i].getIndex()).append(']');
                     }
                 }
             }
@@ -248,21 +257,23 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(PathQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         if (node.isAbsolute()) {
-            sb.append("/");
+            sb.append('/');
         }
         LocationStepQueryNode[] steps = node.getPathSteps();
         String slash = "";
-        for (int i = 0; i < steps.length; i++) {
+        for (LocationStepQueryNode step : steps) {
             sb.append(slash);
-            steps[i].accept(this, sb);
+            step.accept(this, sb);
             slash = "/";
         }
         return sb;
     }
 
+    @Override
     public Object visit(LocationStepQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         if (node.getIncludeDescendants()) {
@@ -270,6 +281,7 @@ class QueryFormat implements QueryNodeVi
         }
         final Name[] nodeType = new Name[1];
         node.acceptOperands(new DefaultQueryNodeVisitor() {
+            @Override
             public Object visit(NodeTypeQueryNode node, Object data) {
                 nodeType[0] = node.getValue();
                 return data;
@@ -281,7 +293,7 @@ class QueryFormat implements QueryNodeVi
         }
 
         if (node.getNameTest() == null) {
-            sb.append("*");
+            sb.append('*');
         } else {
             try {
                 if (node.getNameTest().getLocalName().length() == 0) {
@@ -301,25 +313,26 @@ class QueryFormat implements QueryNodeVi
             } catch (NamespaceException e) {
                 exceptions.add(e);
             }
-            sb.append(")");
+            sb.append(')');
         }
 
         if (node.getIndex() != LocationStepQueryNode.NONE) {
             sb.append('[').append(node.getIndex()).append(']');
         }
         QueryNode[] predicates = node.getPredicates();
-        for (int i = 0; i < predicates.length; i++) {
+        for (QueryNode predicate : predicates) {
             // ignore node type query nodes
-            if (predicates[i].getType() == QueryNode.TYPE_NODETYPE) {
+            if (predicate.getType() == QueryNode.TYPE_NODETYPE) {
                 continue;
             }
             sb.append('[');
-            predicates[i].accept(this, sb);
+            predicate.accept(this, sb);
             sb.append(']');
         }
         return sb;
     }
 
+    @Override
     public Object visit(DerefQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         try {
@@ -328,7 +341,7 @@ class QueryFormat implements QueryNodeVi
             sb.append(resolver.getJCRName(encode(node.getRefProperty())));
             sb.append(", '");
             if (node.getNameTest() == null) {
-                sb.append("*");
+                sb.append('*');
             } else {
                 sb.append(resolver.getJCRName(encode(node.getNameTest())));
             }
@@ -339,6 +352,7 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(RelationQueryNode node, Object data) throws RepositoryException {
         StringBuffer sb = (StringBuffer) data;
         try {
@@ -347,7 +361,7 @@ class QueryFormat implements QueryNodeVi
             // only encode if not position function
             PathQueryNode relPath = node.getRelativePath();
             if (relPath == null) {
-                propPath.append(".");
+                propPath.append('.');
             } else if (relPath.getNumOperands() > 0 && relPath.getPathSteps()[0].getNameTest().equals(XPathQueryBuilder.FN_POSITION_FULL)) {
                 propPath.append(resolver.getJCRName(XPathQueryBuilder.FN_POSITION_FULL));
             } else {
@@ -358,7 +372,7 @@ class QueryFormat implements QueryNodeVi
                     slash = "/";
                     if (i == steps.length - 1 && node.getOperation() != OPERATION_SIMILAR) {
                         // last step
-                        propPath.append("@");
+                        propPath.append('@');
                     }
                     visit(steps[i], propPath);
                 }
@@ -393,9 +407,9 @@ class QueryFormat implements QueryNodeVi
                 appendValue(node, sb);
             } else if (node.getOperation() == OPERATION_LIKE) {
                 sb.append(resolver.getJCRName(XPathQueryBuilder.JCR_LIKE));
-                sb.append("(").append(propPath).append(", ");
+                sb.append('(').append(propPath).append(", ");
                 appendValue(node, sb);
-                sb.append(")");
+                sb.append(')');
             } else if (node.getOperation() == OPERATION_LT_GENERAL) {
                 sb.append(propPath).append(" < ");
                 appendValue(node, sb);
@@ -410,19 +424,19 @@ class QueryFormat implements QueryNodeVi
                 appendValue(node, sb);
             } else if (node.getOperation() == OPERATION_NULL) {
                 sb.append(resolver.getJCRName(XPathQueryBuilder.FN_NOT));
-                sb.append("(").append(propPath).append(")");
+                sb.append('(').append(propPath).append(')');
             } else if (node.getOperation() == OPERATION_NOT_NULL) {
                 sb.append(propPath);
             } else if (node.getOperation() == OPERATION_SIMILAR) {
                 sb.append(resolver.getJCRName(XPathQueryBuilder.REP_SIMILAR));
-                sb.append("(").append(propPath).append(", ");
+                sb.append('(').append(propPath).append(", ");
                 appendValue(node, sb);
-                sb.append(")");
+                sb.append(')');
             } else if (node.getOperation() == OPERATION_SPELLCHECK) {
                 sb.append(resolver.getJCRName(XPathQueryBuilder.REP_SPELLCHECK));
-                sb.append("(");
+                sb.append('(');
                 appendValue(node, sb);
-                sb.append(")");
+                sb.append(')');
             } else {
                 exceptions.add(new InvalidQueryException("Invalid operation: " + node.getOperation()));
             }
@@ -432,30 +446,31 @@ class QueryFormat implements QueryNodeVi
         return sb;
     }
 
+    @Override
     public Object visit(OrderQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         sb.append(" order by");
         OrderQueryNode.OrderSpec[] specs = node.getOrderSpecs();
         String comma = "";
         try {
-            for (int i = 0; i < specs.length; i++) {
+            for (OrderSpec spec : specs) {
                 sb.append(comma);
-                Path propPath = specs[i].getPropertyPath();
-                Path.Element[] elements = propPath.getElements();
-                sb.append(" ");
+                Path propPath = spec.getPropertyPath();
+                Element[] elements = propPath.getElements();
+                sb.append(' ');
                 String slash = "";
                 for (int j = 0; j < elements.length; j++) {
                     sb.append(slash);
                     slash = "/";
-                    Path.Element element = elements[j];
+                    Element element = elements[j];
                     Name name = encode(element.getName());
                     if (j == elements.length - 1) {
                         // last
-                        sb.append("@");
+                        sb.append('@');
                     }
                     sb.append(resolver.getJCRName(name));
                 }
-                if (!specs[i].isAscending()) {
+                if (!spec.isAscending()) {
                     sb.append(" descending");
                 }
                 comma = ",";
@@ -466,16 +481,17 @@ class QueryFormat implements QueryNodeVi
         return data;
     }
 
+    @Override
     public Object visit(PropertyFunctionQueryNode node, Object data) {
         StringBuffer sb = (StringBuffer) data;
         String functionName = node.getFunctionName();
         try {
             if (functionName.equals(PropertyFunctionQueryNode.LOWER_CASE)) {
-                sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_LOWER_CASE) + "(");
-                sb.append(")");
+                sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_LOWER_CASE) + '(');
+                sb.append(')');
             } else if (functionName.equals(PropertyFunctionQueryNode.UPPER_CASE)) {
-                sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_UPPER_CASE) + "(");
-                sb.append(")");
+                sb.insert(0, resolver.getJCRName(XPathQueryBuilder.FN_UPPER_CASE) + '(');
+                sb.append(')');
             } else {
                 exceptions.add(new InvalidQueryException("Unsupported function: " + functionName));
             }
@@ -488,8 +504,8 @@ class QueryFormat implements QueryNodeVi
     //----------------------------< internal >----------------------------------
 
     /**
-     * Appends the value of a relation node to the <code>StringBuffer</code>
-     * <code>sb</code>.
+     * Appends the value of a relation node to the {@code StringBuffer}
+     * {@code sb}.
      *
      * @param node the relation node.
      * @param b    where to append the value.
@@ -503,7 +519,7 @@ class QueryFormat implements QueryNodeVi
         } else if (node.getValueType() == TYPE_DOUBLE) {
             b.append(node.getDoubleValue());
         } else if (node.getValueType() == TYPE_STRING) {
-            b.append("'").append(node.getStringValue().replaceAll("'", "''")).append("'");
+            b.append('\'').append(node.getStringValue().replaceAll("'", "''")).append('\'');
         } else if (node.getValueType() == TYPE_DATE || node.getValueType() == TYPE_TIMESTAMP) {
             Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
             cal.setTime(node.getDateValue());