luetzkendorf    2004/11/29 10:38:18

  Modified:    src/stores/org/apache/slide/index/lucene/expressions
                        BetweenExpression.java ContainsExpression.java
                        EqExpression.java GtExpression.java
                        IsCollectionExpression.java
                        IsDefinedExpression.java IsPrincipalExpression.java
                        LikeExpression.java LtExpression.java
                        PropcontainsExpression.java
                        PropertyContainsExpression.java
  Added:       src/stores/org/apache/slide/index/lucene/expressions
                        AbstractLuceneExpression.java
  Removed:     src/stores/org/apache/slide/index/lucene/expressions
                        AbstractExpression.java
  Log:
  Renamed AbstractExpression
  
  Revision  Changes    Path
  1.5       +6 -6      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/BetweenExpression.java
  
  Index: BetweenExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/BetweenExpression.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BetweenExpression.java    30 Oct 2004 12:52:11 -0000      1.4
  +++ BetweenExpression.java    29 Nov 2004 18:38:16 -0000      1.5
  @@ -52,7 +52,7 @@
    *  </S:between>
    * </pre>
    */
  -public class BetweenExpression extends AbstractExpression
  +public class BetweenExpression extends AbstractLuceneExpression
   {
   
       public BetweenExpression(Index index, Element element, boolean inclusive)
  @@ -75,8 +75,8 @@
                        
IndexConfiguration.getDateValue(literal2.getTextTrim()));
           } 
           else if 
(index.getConfiguration().isIntProperty(prop.getNamespaceURI(), 
prop.getName())) { 
  -            value1 = 
IndexConfiguration.intToIndexString(Long.parseLong(literal1.getTextTrim()));
  -            value2 = 
IndexConfiguration.intToIndexString(Long.parseLong(literal2.getTextTrim()));
  +            value1 = 
config.intToIndexString(Long.parseLong(literal1.getTextTrim()));
  +            value2 = 
config.intToIndexString(Long.parseLong(literal2.getTextTrim()));
           } 
           else {
               value1 = literal1.getTextTrim();
  
  
  
  1.2       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/ContainsExpression.java
  
  Index: ContainsExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/ContainsExpression.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ContainsExpression.java   8 Nov 2004 09:45:47 -0000       1.1
  +++ ContainsExpression.java   29 Nov 2004 18:38:16 -0000      1.2
  @@ -43,7 +43,7 @@
   /**
    * Implements the <code>contains</code> expression.
    */
  -public class ContainsExpression extends AbstractExpression
  +public class ContainsExpression extends AbstractLuceneExpression
   {
   
       public ContainsExpression(Index index, Element element, boolean negated)
  
  
  
  1.5       +5 -5      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/EqExpression.java
  
  Index: EqExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/EqExpression.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EqExpression.java 30 Oct 2004 12:52:11 -0000      1.4
  +++ EqExpression.java 29 Nov 2004 18:38:16 -0000      1.5
  @@ -34,7 +34,7 @@
   /**
    * Implements <code>eq</code> and <code>not-eq</code>.
    */
  -public class EqExpression extends AbstractExpression
  +public class EqExpression extends AbstractLuceneExpression
   {
   
       public EqExpression(Index index, Element element, boolean negated)
  @@ -52,7 +52,7 @@
               value = 
config.dateToIndexString(IndexConfiguration.getDateValue(literal.getTextTrim()));
           } 
           else if 
(index.getConfiguration().isIntProperty(prop.getNamespaceURI(), 
prop.getName())) { 
  -            value = 
IndexConfiguration.intToIndexString(Long.parseLong(literal.getTextTrim()));
  +            value = 
config.intToIndexString(Long.parseLong(literal.getTextTrim()));
           } 
           else {
               value = literal.getTextTrim();
  
  
  
  1.6       +5 -5      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/GtExpression.java
  
  Index: GtExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/GtExpression.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- GtExpression.java 1 Nov 2004 17:47:27 -0000       1.5
  +++ GtExpression.java 29 Nov 2004 18:38:16 -0000      1.6
  @@ -35,7 +35,7 @@
   /**
    * Implements <code>gt</code> and <code>gte</code> expression.
    */
  -public class GtExpression extends AbstractExpression
  +public class GtExpression extends AbstractLuceneExpression
   {
       public GtExpression(Index index, Element element, boolean inclusive) 
           throws BadQueryException 
  @@ -55,7 +55,7 @@
               upperBound = Index.DATE_UPPER_BOUND;
           } 
           else if 
(index.getConfiguration().isIntProperty(prop.getNamespaceURI(), 
prop.getName())) { 
  -            value = 
IndexConfiguration.intToIndexString(Long.parseLong(literal.getTextTrim()));
  +            value = 
config.intToIndexString(Long.parseLong(literal.getTextTrim()));
               upperBound = Index.INT_UPPER_BOUND;
           } 
           else {
  
  
  
  1.3       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsCollectionExpression.java
  
  Index: IsCollectionExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsCollectionExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IsCollectionExpression.java       1 Nov 2004 17:47:27 -0000       1.2
  +++ IsCollectionExpression.java       29 Nov 2004 18:38:16 -0000      1.3
  @@ -33,7 +33,7 @@
    * Implements the <code>is-collection</code> and the 
<code>not-is-collection</code>
    * expression. 
    */
  -public class IsCollectionExpression extends AbstractExpression
  +public class IsCollectionExpression extends AbstractLuceneExpression
   {
       public IsCollectionExpression(Index index, boolean negated)
       {
  
  
  
  1.5       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsDefinedExpression.java
  
  Index: IsDefinedExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsDefinedExpression.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- IsDefinedExpression.java  1 Nov 2004 17:47:27 -0000       1.4
  +++ IsDefinedExpression.java  29 Nov 2004 18:38:16 -0000      1.5
  @@ -35,7 +35,7 @@
    * Implements the <code>is-defined</code> and the <code>not-is-defined</code>
    * expression.
    */
  -public class IsDefinedExpression extends AbstractExpression
  +public class IsDefinedExpression extends AbstractLuceneExpression
   {
   
       public IsDefinedExpression(Index index, Element element, boolean 
negated) 
  
  
  
  1.3       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsPrincipalExpression.java
  
  Index: IsPrincipalExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/IsPrincipalExpression.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IsPrincipalExpression.java        1 Nov 2004 17:47:27 -0000       1.2
  +++ IsPrincipalExpression.java        29 Nov 2004 18:38:16 -0000      1.3
  @@ -33,7 +33,7 @@
    * Implements the <code>is-pricipal</code> and the 
<code>not-is-pricipal</code>
    * expression. 
    */
  -public class IsPrincipalExpression extends AbstractExpression
  +public class IsPrincipalExpression extends AbstractLuceneExpression
   {
       public IsPrincipalExpression(Index index, boolean negated)
       {
  
  
  
  1.4       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LikeExpression.java
  
  Index: LikeExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LikeExpression.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- LikeExpression.java       1 Nov 2004 17:47:27 -0000       1.3
  +++ LikeExpression.java       29 Nov 2004 18:38:16 -0000      1.4
  @@ -37,7 +37,7 @@
    * Implements the <code>like</code> operator.
    * 
    */
  -public class LikeExpression extends AbstractExpression
  +public class LikeExpression extends AbstractLuceneExpression
   {
   
       public LikeExpression(Index index, Element element, boolean negated) 
  
  
  
  1.5       +5 -5      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LtExpression.java
  
  Index: LtExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/LtExpression.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- LtExpression.java 1 Nov 2004 17:47:27 -0000       1.4
  +++ LtExpression.java 29 Nov 2004 18:38:16 -0000      1.5
  @@ -36,7 +36,7 @@
   /**
    * Implements <code>lt</code> and <code>lte</code> expression.
    */
  -public class LtExpression extends AbstractExpression
  +public class LtExpression extends AbstractLuceneExpression
   {
       
       public LtExpression(Index index, Element element, boolean inclusive) 
  @@ -60,7 +60,7 @@
               lowerBound = Index.DATE_LOWER_BOUND;
           } 
           else if 
(index.getConfiguration().isIntProperty(prop.getNamespaceURI(), 
prop.getName())) { 
  -            value = 
IndexConfiguration.intToIndexString(Long.parseLong(literal.getTextTrim()));
  +            value = 
config.intToIndexString(Long.parseLong(literal.getTextTrim()));
               lowerBound = Index.INT_LOWER_BOUND;
           } 
           else {
  
  
  
  1.4       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropcontainsExpression.java
  
  Index: PropcontainsExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropcontainsExpression.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PropcontainsExpression.java       1 Nov 2004 17:47:27 -0000       1.3
  +++ PropcontainsExpression.java       29 Nov 2004 18:38:16 -0000      1.4
  @@ -37,7 +37,7 @@
    * <p>This expression is actually a <code>substring</code> expression.  
    * 
    */
  -public class PropcontainsExpression extends AbstractExpression
  +public class PropcontainsExpression extends AbstractLuceneExpression
   {
   
       public PropcontainsExpression(Index index, Element element, boolean 
negated) 
  
  
  
  1.4       +4 -4      
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropertyContainsExpression.java
  
  Index: PropertyContainsExpression.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/PropertyContainsExpression.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PropertyContainsExpression.java   1 Nov 2004 17:47:27 -0000       1.3
  +++ PropertyContainsExpression.java   29 Nov 2004 18:38:16 -0000      1.4
  @@ -44,7 +44,7 @@
    * Implements the <code>property-contains</code> expression, that works
    * exacly like <code>contains</code> but on properties.
    */
  -public class PropertyContainsExpression extends AbstractExpression
  +public class PropertyContainsExpression extends AbstractLuceneExpression
   {
   
       public PropertyContainsExpression(Index index, Element element, boolean 
negated)
  
  
  
  1.1                  
jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java
  
  Index: AbstractLuceneExpression.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-slide/src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java,v
 1.1 2004/11/29 18:38:16 luetzkendorf Exp $
   * $Revision: 1.1 $
   * $Date: 2004/11/29 18:38:16 $
   *
   * ====================================================================
   *
   * Copyright 1999-2004 The Apache Software Foundation
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   */
  package org.apache.slide.index.lucene.expressions;
  
  import java.io.IOException;
  import java.util.List;
  import java.util.StringTokenizer;
  
  import org.apache.lucene.document.Document;
  import org.apache.lucene.index.Term;
  import org.apache.lucene.search.BooleanQuery;
  import org.apache.lucene.search.Hits;
  import org.apache.lucene.search.IndexSearcher;
  import org.apache.lucene.search.Query;
  import org.apache.lucene.search.RangeQuery;
  import org.apache.lucene.search.TermQuery;
  import org.apache.slide.common.SlideException;
  import org.apache.slide.content.NodeProperty;
  import org.apache.slide.index.lucene.Index;
  import org.apache.slide.index.lucene.LuceneExpressionFactory;
  import org.apache.slide.search.BadQueryException;
  import org.apache.slide.search.InvalidQueryException;
  import org.apache.slide.search.InvalidScopeException;
  import org.apache.slide.search.QueryScope;
  import org.apache.slide.search.RequestedResource;
  import org.apache.slide.search.SearchException;
  import org.apache.slide.search.basic.BasicResultSetImpl;
  import org.apache.slide.search.basic.ComparableResourceImpl;
  import org.apache.slide.search.basic.IBasicExpression;
  import org.apache.slide.search.basic.IBasicExpressionFactory;
  import org.apache.slide.search.basic.IBasicQuery;
  import org.apache.slide.search.basic.IBasicResultSet;
  import org.apache.slide.structure.ObjectNode;
  import org.apache.slide.structure.SubjectNode;
  import org.apache.slide.util.logger.Logger;
  import org.jdom.Element;
  
  
  /**
   * 
   */
  public abstract class AbstractLuceneExpression implements IBasicExpression
  {
  
      static final String LOG_CHANNEL = 
"org.apache.slide.index.lucene.expressions";
      
      protected LuceneExpressionFactory factory;
      protected Index index;
      private IBasicResultSet resultSet = null;
      
      private Query query;
      
      public AbstractLuceneExpression(Index index) {
          this.index = index;
      }
  
      protected final void setQuery(Query query) {
          this.query = query;
      }
      protected final Query getQuery() {
          return this.query;
      }
  
      public IBasicExpressionFactory getFactory()
      {
          return factory;
      }
  
      public void setFactory(IBasicExpressionFactory factory)
      {
          this.factory = (LuceneExpressionFactory)factory;
      }
  
      
      public IBasicResultSet execute() throws SearchException
      {
          if (this.resultSet != null) {
              return this.resultSet;
          }
          
          Query luceneQuery = this.getQuery();
          
          IBasicQuery q = factory.getQuery();
          String scope = q.getSearchToken().getSlideContext().getSlidePath(
                  q.getScope().getHref());
          if (scope.endsWith("/") && scope.length() > 1) {
              scope = scope.substring(0, scope.length()-1);
          }
  
          // add a scope restriction, this allows negated queries too
          BooleanQuery booleanQuery = new BooleanQuery();
          booleanQuery.add(new TermQuery(new Term(Index.SCOPE_FIELD_NAME, 
scope)), 
                  true, false);
          booleanQuery.add(luceneQuery, true, false);
          // add depth restriction
          switch (q.getScope().getDepth() ) {
              case QueryScope.DEPTH_INFINITY:
                  break;
              case QueryScope.DEPTH_0:
                  booleanQuery.add(new TermQuery(new 
Term(Index.DEPTH_FIELD_NAME, 
                          
index.getConfiguration().intToIndexString(getDepth(scope)))), 
                          true, false);
                  break;
              case QueryScope.DEPTH_1:
              default:
                  booleanQuery.add(new RangeQuery(
                          new Term(Index.DEPTH_FIELD_NAME, 
                                  
index.getConfiguration().intToIndexString(getDepth(scope))), 
                          new Term(Index.DEPTH_FIELD_NAME,
                                  
index.getConfiguration().intToIndexString(getDepth(scope)+q.getScope().getDepth())),
                          true), 
                       true, false);
  
                      
          }
          luceneQuery = booleanQuery;
  
          IndexSearcher searcher = null;
          try {
              index.getLogger().log("start query execution: " + 
                      luceneQuery.toString(), LOG_CHANNEL, Logger.DEBUG);
              long start = System.currentTimeMillis();
      
              searcher = this.index.getSearcher();
              Hits hits = searcher.search(luceneQuery);
              
              index.getLogger().log("finished: " + hits.length() + " hits (" + 
                      (System.currentTimeMillis() - start) + "ms)" , 
LOG_CHANNEL, Logger.DEBUG);
  
              IBasicResultSet result = new BasicResultSetImpl(false);
  
              for (int i = 0, l = hits.length(); i < l; i++) {
                  Document doc = hits.doc(i);
                  String uri = doc.get(Index.URI_FIELD_NAME);
                  RequestedResource resource = createResource(uri);
                  result.add(resource);
              }
              
              this.resultSet = result;
              return result;
          } catch (InvalidScopeException e) {
              throw e;
          } catch (SearchException e) {
              throw e;
          } catch (IOException e) {
              throw new SearchException(e);
          } finally {
              if (searcher != null) {
                  try {
                      searcher.close();
                  } catch (IOException e1) {
                      // ignore
                  }
              }
          }
      }
      
      private int getDepth(String path) {
          StringTokenizer tokenizer = new StringTokenizer(path, "/");
          return tokenizer.countTokens();
      }
      
      protected Query negateQuery(Query query) {
          BooleanQuery booleanQuery = new BooleanQuery();
          booleanQuery.add(
                  new TermQuery(new Term(Index.SCOPE_FIELD_NAME, "/")), 
                  true, false);
          booleanQuery.add(
                  query, 
                  false, true);
          return booleanQuery;
      }
  
      protected RequestedResource createResource(String uri) throws 
SearchException
      {
          ObjectNode node = new SubjectNode(uri); // this will return the root
                                                  // folder
          RequestedResource resource = null;
          IBasicQuery query = factory.getQuery();
          
          try {
              resource = new ComparableResourceImpl(node, 
query.getSearchToken(),
                      query.getScope(), factory.getPropertyProvider());
          } catch (SlideException e) {
              throw new SearchException(e);
          }
          return resource;
      }
  
      protected static Element getFirstElement(Element node)
      {
          List children = node.getChildren();
          
          for (int i = 0; i < children.size(); i++) {
              if (children.get(i) instanceof Element) {
                  return (Element)children.get(i); 
              }
          }
          return null;
      }
      
      /**
       * Returns the first <code>D:prop</code> element. 
       * @param operator
       * @return Element 
       * @throws BadQueryException if element not found
       */
      public static Element getPropertyElement(Element operator) throws 
BadQueryException
      {
          Element prop = operator.getChild("prop", 
                  NodeProperty.NamespaceCache.DEFAULT_NAMESPACE);
          if (prop == null) throw new InvalidQueryException("Missing prop 
element"); 
          
          prop = getFirstElement(prop);
          if (prop == null) throw new InvalidQueryException("Empty prop element 
given");
          return prop;
      }
      /**
       * Retruns the first <code>D:literal</code> element.
       * @param operator
       * @return
       * @throws BadQueryException if element not found
       */
      protected Element getLiteralElement(Element operator) throws 
BadQueryException
      {
          Element literal = operator.getChild("literal", 
                  NodeProperty.NamespaceCache.DEFAULT_NAMESPACE);
          if (literal == null) throw new InvalidQueryException("Missing literal 
element");
          return literal;
      }    
  
      protected Element getLiteral2Element(Element operator) throws 
BadQueryException
      {
          List children = operator.getChildren("literal", 
                  NodeProperty.NamespaceCache.DEFAULT_NAMESPACE);
          if (children.size() > 1) {
              return (Element)children.get(1);
          } else {
              throw new InvalidQueryException("Missing second literal element");
          }
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to