|
From: Lars H. <lh...@us...> - 2005-03-06 17:28:56
|
Update of /cvsroot/tmapi-utils/tmapi-utils/src/org/tmapiutils/query/tolog/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25446/src/org/tmapiutils/query/tolog/memory Added Files: PreparedQueryImpl.java QueryEvaluatorImpl.java Log Message: Initial tolog import --- NEW FILE: PreparedQueryImpl.java --- /* Copyright (c) 2000-2004 The TM4J Project. All rights reserved. The license for this source code can be found in the file LICENSE.TXT with this distribution or at http://tm4j.org/LICENSE.txt */ /* *$Header: /cvsroot/tmapi-utils/tmapi-utils/src/org/tmapiutils/query/tolog/memory/PreparedQueryImpl.java,v 1.1 2005/03/06 17:28:46 lheuer Exp $ */ package org.tmapiutils.query.tolog.memory; import org.tmapiutils.query.tolog.TologResultsSet; import org.tmapiutils.query.tolog.PreparedQuery; import org.tmapiutils.query.tolog.TologProcessingException; import org.tmapiutils.query.tolog.parser.TologQuery; /** * @author Kal * * Describe PreparedQueryImpl here. */ public class PreparedQueryImpl implements PreparedQuery { private TologQuery m_query; public PreparedQueryImpl(TologQuery q) { m_query = q; rewrite(); } /** * Rewrite the query for optimisation purposes */ private void rewrite() { // TODO Implement query rewriting optimisation strategy. } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.PreparedQuery#getQueryString() */ public String getQueryString() { return m_query.toString(); } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.PreparedQuery#execute() */ public TologResultsSet execute() throws TologProcessingException { return m_query.execute(); } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.PreparedQuery#execute(java.lang.Object[]) */ public TologResultsSet execute(Object[] params) throws TologProcessingException { return m_query.execute(params); } } /* * $Log: PreparedQueryImpl.java,v $ * Revision 1.1 2005/03/06 17:28:46 lheuer * Initial tolog import * * Revision 1.4 2004/06/20 14:12:30 kal_ahmed * Copied TologRsultsSet interface and TologFragmentBuilder implementation from org.tm4j.tolog to this package. * * Revision 1.3 2004/06/16 21:21:43 kal_ahmed * Tolog queries may now contain replaceable references specified in an Object array parameter to the QueryEvaluator at evaluation time. * * Revision 1.2 2004/06/09 21:12:18 kal_ahmed * Added standard source file header and footer. * */ --- NEW FILE: QueryEvaluatorImpl.java --- /* Copyright (c) 2000-2004 The TM4J Project. All rights reserved. The license for this source code can be found in the file LICENSE.TXT with this distribution or at http://tm4j.org/LICENSE.txt */ /* *$Header: /cvsroot/tmapi-utils/tmapi-utils/src/org/tmapiutils/query/tolog/memory/QueryEvaluatorImpl.java,v 1.1 2005/03/06 17:28:46 lheuer Exp $ */ package org.tmapiutils.query.tolog.memory; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import org.tmapiutils.query.tolog.TologResultsSet; import org.tmapiutils.query.tolog.PreparedQuery; import org.tmapiutils.query.tolog.QueryEvaluator; import org.tmapiutils.query.tolog.TologParserException; import org.tmapiutils.query.tolog.TologProcessingException; import org.tmapiutils.query.tolog.parser.Predicate; import org.tmapiutils.query.tolog.parser.TologLexer; import org.tmapiutils.query.tolog.parser.TologParser; import org.tmapiutils.query.tolog.parser.TologQuery; import org.tmapiutils.query.tolog.parser.TologRule; import org.tmapiutils.query.tolog.predicates.AssociationPredicate; import org.tmapiutils.query.tolog.predicates.AssociationRolePredicate; import org.tmapiutils.query.tolog.predicates.BaseLocatorPredicate; import org.tmapiutils.query.tolog.predicates.DirectInstanceOfPredicate; import org.tmapiutils.query.tolog.predicates.InstanceOfPredicate; import org.tmapiutils.query.tolog.predicates.OccurrencePredicate; import org.tmapiutils.query.tolog.predicates.ReifiesPredicate; import org.tmapiutils.query.tolog.predicates.ResourcePredicate; import org.tmapiutils.query.tolog.predicates.RolePlayerPredicate; import org.tmapiutils.query.tolog.predicates.ScopePredicate; import org.tmapiutils.query.tolog.predicates.SourceLocatorsPredicate; import org.tmapiutils.query.tolog.predicates.SubjectLocatorPredicate; import org.tmapiutils.query.tolog.predicates.SubjectIdentifierPredicate; import org.tmapiutils.query.tolog.predicates.TopicMapPredicate; import org.tmapiutils.query.tolog.predicates.TopicPredicate; import org.tmapiutils.query.tolog.predicates.TopicNamePredicate; import org.tmapiutils.query.tolog.predicates.TypePredicate; import org.tmapiutils.query.tolog.predicates.ValueLikePredicate; import org.tmapiutils.query.tolog.predicates.ValuePredicate; import org.tmapiutils.query.tolog.predicates.VariantPredicate; import org.tmapi.core.TopicMap; import antlr.ANTLRException; /** * @author Kal * * Describe QueryEvaluatorImpl here. */ public class QueryEvaluatorImpl implements QueryEvaluator { private TopicMap m_tm; private Map m_rulesByName = null; private Map m_rulesByPrefix = null; private Map m_predicatesByName = null; public QueryEvaluatorImpl(TopicMap tm) { m_rulesByName = new HashMap(); m_rulesByPrefix = new HashMap(); m_predicatesByName = new HashMap(); initialisePredicates(); setTopicMap(tm); } /** * Loads the default built-in predicates */ private void initialisePredicates() { registerPredicateClass(AssociationPredicate.PREDICATE_NAME, AssociationPredicate.class); registerPredicateClass(AssociationRolePredicate.PREDICATE_NAME, AssociationRolePredicate.class); registerPredicateClass(BaseLocatorPredicate.PREDICATE_NAME, BaseLocatorPredicate.class); registerPredicateClass(DirectInstanceOfPredicate.PREDICATE_NAME, DirectInstanceOfPredicate.class); registerPredicateClass(InstanceOfPredicate.PREDICATE_NAME, InstanceOfPredicate.class); registerPredicateClass(OccurrencePredicate.PREDICATE_NAME, OccurrencePredicate.class); registerPredicateClass(ReifiesPredicate.PREDICATE_NAME, ReifiesPredicate.class); registerPredicateClass(ResourcePredicate.PREDICATE_NAME, ResourcePredicate.class); registerPredicateClass(RolePlayerPredicate.PREDICATE_NAME, RolePlayerPredicate.class); registerPredicateClass(ScopePredicate.PREDICATE_NAME, ScopePredicate.class); registerPredicateClass(SourceLocatorsPredicate.PREDICATE_NAME, SourceLocatorsPredicate.class); registerPredicateClass(SubjectLocatorPredicate.PREDICATE_NAME, SubjectLocatorPredicate.class); registerPredicateClass(SubjectIdentifierPredicate.PREDICATE_NAME, SubjectIdentifierPredicate.class); registerPredicateClass(TopicMapPredicate.PREDICATE_NAME, TopicMapPredicate.class); registerPredicateClass(TopicPredicate.PREDICATE_NAME, TopicPredicate.class); registerPredicateClass(TopicNamePredicate.PREDICATE_NAME, TopicNamePredicate.class); registerPredicateClass(TypePredicate.PREDICATE_NAME, TypePredicate.class); registerPredicateClass(ValueLikePredicate.PREDICATE_NAME, ValueLikePredicate.class); registerPredicateClass(ValuePredicate.PREDICATE_NAME, ValuePredicate.class); registerPredicateClass(VariantPredicate.PREDICATE_NAME, VariantPredicate.class); } public void setTopicMap(TopicMap tm) { m_tm = tm; } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#addRulesModule(java.io.InputStream, java.lang.String) */ public void addRulesModule(InputStream src, String prefix) throws IOException, TologParserException { try { TologParser p = new TologParser(new TologLexer(src)); p.setTopicMap(m_tm); p.setRules(m_rulesByName); p.setPredicates(m_predicatesByName); p.setPrefix(prefix); p.module(); m_rulesByName.putAll(p.getRules()); if (prefix != null) m_rulesByPrefix.put(prefix, p.getRules()); } catch (ANTLRException ex) { throw new TologParserException("Parser error reading module.", ex); } } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#addRule(java.lang.String) */ public void addRule(String rule) throws TologParserException { try { TologParser p = new TologParser(new TologLexer(new StringReader(rule))); p.setTopicMap(m_tm); p.setRules(m_rulesByName); p.setPredicates(m_predicatesByName); TologRule r = p.rule(); m_rulesByName.put(r.getName(), r); m_predicatesByName.put(r.getName(), TologRule.class); } catch (ANTLRException ex) { throw new TologParserException("Parser error in rule string.", ex); } } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#prepareQuery(java.lang.String) */ public PreparedQuery prepareQuery(String queryString) throws TologParserException, TologProcessingException { try { TologParser p = new TologParser(new TologLexer(new StringReader(queryString))); p.setTopicMap(m_tm); p.setPredicates(m_predicatesByName); p.setRules(m_rulesByName); p.setPrefixRules(m_rulesByPrefix); TologQuery q = p.query(); PreparedQuery pq = new PreparedQueryImpl(q); return pq; } catch (ANTLRException ex) { throw new TologParserException("Error parsing query string.", ex); } } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#execute(java.lang.String) */ public TologResultsSet execute(String queryString) throws TologParserException, TologProcessingException { PreparedQuery pq = prepareQuery(queryString); return pq.execute(); } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#execute(java.lang.String, java.lang.Object[]) */ public TologResultsSet execute(String queryString, Object[] queryParams) throws TologParserException, TologProcessingException { PreparedQuery pq = prepareQuery(queryString); return pq.execute(queryParams); } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#registerPredicateClass(java.lang.String, java.lang.Class) */ public void registerPredicateClass( String predicateName, Class predicateClass) throws IllegalArgumentException { if (!Predicate.class.isAssignableFrom(predicateClass)) { throw new IllegalArgumentException("Class does not implement the " + Predicate.class.getName() + " interface."); } m_predicatesByName.put(predicateName, predicateClass); } /* (non-Javadoc) * @see org.tmapiutils.query.tolog.QueryEvaluator#getRegisteredPredicates() */ public Map getRegisteredPredicates() { return m_predicatesByName; } } /* * $Log: QueryEvaluatorImpl.java,v $ * Revision 1.1 2005/03/06 17:28:46 lheuer * Initial tolog import * * Revision 1.12 2004/11/02 16:03:38 kal_ahmed * Fixed reported bug with processing external tolog modules. * * Revision 1.11 2004/08/17 14:55:28 kal_ahmed * Fixed naming of subject-locator and subject-identifier predicate implementations (Bug#1010670). * * Revision 1.10 2004/06/20 14:12:30 kal_ahmed * Copied TologRsultsSet interface and TologFragmentBuilder implementation from org.tm4j.tolog to this package. * * Revision 1.9 2004/06/16 21:21:43 kal_ahmed * Tolog queries may now contain replaceable references specified in an Object array parameter to the QueryEvaluator at evaluation time. * * Revision 1.8 2004/06/14 21:31:16 kal_ahmed * Added TopicNamePredicate to builtins. * * Revision 1.7 2004/06/13 19:44:30 kal_ahmed * Added a fix and test for handling recursive rules definitions. * * Revision 1.6 2004/06/13 17:17:59 kal_ahmed * Added registration of builtin predicates. Fixed rule expansion code to handle player/role pairs correctly. * * Revision 1.5 2004/06/10 17:09:34 kal_ahmed * Added reifies and instance-of predicates. * * Revision 1.4 2004/06/10 08:18:35 kal_ahmed * Added OccurrencePredicate to default extensions. * * Revision 1.3 2004/06/09 22:15:08 kal_ahmed * Fixed parser to disallow player:role pairs in predicates other than dynamic association predicates. Fixed initialisation of extension predicates. Added DirectInstanceOfPredicate extension to in-memory query evaluator. * * Revision 1.2 2004/06/09 21:12:18 kal_ahmed * Added standard source file header and footer. * */ |