KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > alfresco > jcr > query > QueryManagerImpl


1 /*
2  * Copyright (C) 2005 Alfresco, Inc.
3  *
4  * Licensed under the Mozilla Public License version 1.1
5  * with a permitted attribution clause. You may obtain a
6  * copy of the License at
7  *
8  * http://www.alfresco.org/legal/license.txt
9  *
10  * Unless required by applicable law or agreed to in writing,
11  * software distributed under the License is distributed on an
12  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific
14  * language governing permissions and limitations under the
15  * License.
16  */

17 package org.alfresco.jcr.query;
18
19 import java.lang.reflect.Constructor JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.Map JavaDoc;
22
23 import javax.jcr.Node;
24 import javax.jcr.RepositoryException;
25 import javax.jcr.query.InvalidQueryException;
26 import javax.jcr.query.Query;
27 import javax.jcr.query.QueryManager;
28
29 import org.alfresco.jcr.dictionary.JCRNamespace;
30 import org.alfresco.jcr.session.SessionImpl;
31 import org.alfresco.service.namespace.QName;
32
33
34 /**
35  * Alfresco implementation of JCR Query Manager
36  *
37  * @author David Caruana
38  */

39 public class QueryManagerImpl implements QueryManager
40 {
41     public static QName JCRPATH_COLUMN = QName.createQName(JCRNamespace.JCR_URI, "path");
42     public static QName JCRSCORE_COLUMN = QName.createQName(JCRNamespace.JCR_URI, "score");
43     
44     /** supported query languages */
45     private static Map JavaDoc<String JavaDoc, Class JavaDoc<? extends QueryImpl>> supportedLanguages = new HashMap JavaDoc<String JavaDoc, Class JavaDoc<? extends QueryImpl>>();
46     static
47     {
48         supportedLanguages.put(Query.XPATH, XPathQueryImpl.class);
49     }
50
51     private SessionImpl session;
52     
53     /**
54      * Construct
55      *
56      * @param session session
57      */

58     public QueryManagerImpl(SessionImpl session)
59     {
60         this.session = session;
61     }
62     
63     /* (non-Javadoc)
64      * @see javax.jcr.query.QueryManager#createQuery(java.lang.String, java.lang.String)
65      */

66     public Query createQuery(String JavaDoc statement, String JavaDoc language) throws InvalidQueryException, RepositoryException
67     {
68         // is the language known?
69
if (!isSupportedLanguage(language))
70         {
71             throw new InvalidQueryException("Query language " + language + " is not supported");
72         }
73
74         // construct the query
75
Class JavaDoc<? extends QueryImpl> queryClass = supportedLanguages.get(language);
76         try
77         {
78             Constructor JavaDoc<? extends QueryImpl> constructor = queryClass.getConstructor(new Class JavaDoc[] { SessionImpl.class, String JavaDoc.class } );
79             QueryImpl queryImpl = constructor.newInstance(new Object JavaDoc[] { session, statement } );
80             queryImpl.isValidStatement();
81             return queryImpl.getProxy();
82         }
83         catch (InstantiationException JavaDoc e)
84         {
85             throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")");
86         }
87         catch (IllegalAccessException JavaDoc e)
88         {
89             throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")");
90         }
91         catch (Exception JavaDoc e)
92         {
93             throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")");
94         }
95     }
96
97     /* (non-Javadoc)
98      * @see javax.jcr.query.QueryManager#getQuery(javax.jcr.Node)
99      */

100     public Query getQuery(Node node) throws InvalidQueryException, RepositoryException
101     {
102         throw new InvalidQueryException("Persistent queries are not supported by the Repository.");
103     }
104
105     /* (non-Javadoc)
106      * @see javax.jcr.query.QueryManager#getSupportedQueryLanguages()
107      */

108     public String JavaDoc[] getSupportedQueryLanguages() throws RepositoryException
109     {
110         return supportedLanguages.keySet().toArray(new String JavaDoc[supportedLanguages.size()]);
111     }
112
113     /**
114      * Is supported language?
115      *
116      * @param language language to check
117      * @return true => supported
118      */

119     private boolean isSupportedLanguage(String JavaDoc language)
120     {
121         return supportedLanguages.containsKey(language);
122     }
123     
124 }
125
Popular Tags