1 17 package org.alfresco.jcr.query; 18 19 import java.lang.reflect.Constructor ; 20 import java.util.HashMap ; 21 import java.util.Map ; 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 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 45 private static Map <String , Class <? extends QueryImpl>> supportedLanguages = new HashMap <String , Class <? extends QueryImpl>>(); 46 static 47 { 48 supportedLanguages.put(Query.XPATH, XPathQueryImpl.class); 49 } 50 51 private SessionImpl session; 52 53 58 public QueryManagerImpl(SessionImpl session) 59 { 60 this.session = session; 61 } 62 63 66 public Query createQuery(String statement, String language) throws InvalidQueryException, RepositoryException 67 { 68 if (!isSupportedLanguage(language)) 70 { 71 throw new InvalidQueryException("Query language " + language + " is not supported"); 72 } 73 74 Class <? extends QueryImpl> queryClass = supportedLanguages.get(language); 76 try 77 { 78 Constructor <? extends QueryImpl> constructor = queryClass.getConstructor(new Class [] { SessionImpl.class, String .class } ); 79 QueryImpl queryImpl = constructor.newInstance(new Object [] { session, statement } ); 80 queryImpl.isValidStatement(); 81 return queryImpl.getProxy(); 82 } 83 catch (InstantiationException e) 84 { 85 throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")"); 86 } 87 catch (IllegalAccessException e) 88 { 89 throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")"); 90 } 91 catch (Exception e) 92 { 93 throw new RepositoryException("Failed to create query " + statement + " (language: " + language + ")"); 94 } 95 } 96 97 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 108 public String [] getSupportedQueryLanguages() throws RepositoryException 109 { 110 return supportedLanguages.keySet().toArray(new String [supportedLanguages.size()]); 111 } 112 113 119 private boolean isSupportedLanguage(String language) 120 { 121 return supportedLanguages.containsKey(language); 122 } 123 124 } 125 | Popular Tags |