Index: src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilderRegistry.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilderRegistry.java (revision 427141)
+++ src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilderRegistry.java (working copy)
@@ -22,8 +22,12 @@
import javax.imageio.spi.ServiceRegistry;
import javax.jcr.query.InvalidQueryException;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Iterator;
+import java.util.Set;
/**
* Implements a central access to QueryTreeBuilder instances.
@@ -39,17 +43,26 @@
* List of QueryTreeBuilder instances known to the classloader.
*/
private static final List BUILDERS = new ArrayList();
+
+ /**
+ * Set of languages known to the registered builders.
+ */
+ private static final Set LANGUAGES;
static {
+ Set languages = new HashSet();
try {
Iterator it = ServiceRegistry.lookupProviders(QueryTreeBuilder.class,
QueryTreeBuilderRegistry.class.getClassLoader());
while (it.hasNext()) {
- BUILDERS.add(it.next());
+ QueryTreeBuilder qtb = (QueryTreeBuilder)it.next();
+ BUILDERS.add(qtb);
+ languages.addAll(Arrays.asList(qtb.getSupportedLanguages()));
}
} catch (Error e) {
log.warn("Unable to load providers for QueryTreeBuilder: " + e);
}
+ LANGUAGES = Collections.unmodifiableSet(languages);
}
/**
@@ -70,4 +83,16 @@
}
throw new InvalidQueryException("Unsupported language: " + language);
}
-}
+
+ /**
+ * Returns the set of query languages supported by all registered
+ * {@link QueryTreeBuilder} implementations.
+ *
+ * @return String array containing the names of the supported languages.
+ */
+ public static String[] getSupportedLanguages() {
+ return (String[])LANGUAGES.toArray(EMPTY);
+ }
+
+ private static final String[] EMPTY = new String[0];
+}
\ No newline at end of file
Index: src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilder.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilder.java (revision 427141)
+++ src/main/java/org/apache/jackrabbit/core/query/QueryTreeBuilder.java (working copy)
@@ -46,6 +46,13 @@
* false otherwise.
*/
boolean canHandle(String language);
+
+ /**
+ * Returns the set of query languages supported by this builder.
+ *
+ * @return String array containing the names of the supported languages.
+ */
+ String[] getSupportedLanguages();
/**
* Creates a String representation of the query node tree in the syntax this
Index: src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java (revision 427141)
+++ src/main/java/org/apache/jackrabbit/core/query/xpath/QueryBuilder.java (working copy)
@@ -47,8 +47,20 @@
/**
* @inheritDoc
*/
+ public String[] getSupportedLanguages() {
+ return LANGUAGES;
+ }
+
+ /**
+ * @inheritDoc
+ */
public String toString(QueryRootNode root, NamespaceResolver resolver)
throws InvalidQueryException {
return XPathQueryBuilder.toString(root, resolver);
}
+
+ /**
+ * This builder supports {@link Query#XPATH}
+ */
+ private String[] LANGUAGES = new String[] { Query.XPATH };
}
Index: src/main/java/org/apache/jackrabbit/core/query/sql/QueryBuilder.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/sql/QueryBuilder.java (revision 427141)
+++ src/main/java/org/apache/jackrabbit/core/query/sql/QueryBuilder.java (working copy)
@@ -47,8 +47,20 @@
/**
* @inheritDoc
*/
+ public String[] getSupportedLanguages() {
+ return LANGUAGES;
+ }
+
+ /**
+ * @inheritDoc
+ */
public String toString(QueryRootNode root, NamespaceResolver resolver)
throws InvalidQueryException {
return JCRSQLQueryBuilder.toString(root, resolver);
}
+
+ /**
+ * This builder supports {@link Query#SQL}
+ */
+ private String[] LANGUAGES = new String[] { Query.SQL };
}
Index: src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java (revision 427141)
+++ src/main/java/org/apache/jackrabbit/core/query/QueryManagerImpl.java (working copy)
@@ -37,9 +37,7 @@
/**
* Defines all supported query languages
*/
- private static final String[] SUPPORTED_QUERIES = new String[]{
- Query.SQL, Query.XPATH
- };
+ private static final String[] SUPPORTED_QUERIES = QueryTreeBuilderRegistry.getSupportedLanguages();
/**
* List of all supported query languages