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]