[prev in list] [next in list] [prev in thread] [next in thread] 

List:       slide-dev
Subject:    DO NOT REPLY [Bug 35539]  New:  -
From:       bugzilla () apache ! org
Date:       2005-06-29 11:13:10
Message-ID: 20050629111310.127D813 () ajax ! apache ! org
[Download RAW message or body]

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=35539>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=35539

           Summary: New feature - version-aware Lucene searching
           Product: Slide
           Version: Nightly
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Search
        AssignedTo: slide-dev@jakarta.apache.org
        ReportedBy: tomekem@poczta.fm


For now Slide doesn't perform version-aware Lucene searching. It indexes text
for all file revisions, searches all revisions but only one revision is returned
in query result. It is due to use of Set and ComparableResourceImpl classes.
ComparableResourceImpl uses only URL to compare objects but Set objects must be
unique and query result is constrained.

I added revision support to ComparableResource class. With my patch it stores
revision number for resources and revision number is significiant for comparing
issues. Query result contains set of ComparableResourceImpl objects with
revision information.

Tomek Majchrzak

--- src/share/org/apache/slide/search/RequestedResource.java        2005-06-24
12:33:58.000000000 +0200
+++ src/share/org/apache/slide/search/RequestedResource.java?rev=1.10    
2005-06-29 10:00:18.465256424 +0200
@@ -28,7 +28,6 @@
 import org.apache.slide.common.PropertyName;

 import org.apache.slide.content.NodeProperty;
-import org.apache.slide.content.NodeRevisionNumber;

 import java.util.Iterator;

@@ -48,14 +47,7 @@
      * @throws     SlideException
      */
     public String getUri() throws SlideException;
-
-     /**
-     * Returns the revision number of the resource.
-     *
-     * @return     the revision number of resource
-     */
-        public NodeRevisionNumber getRevisionNumber();
-
+
     /**
      * Returns the property with the given <code>name</code> and
      * <code>namespace</code>.

share/org/apache/slide/search/basic/ComparableResourceImpl.java

---
src/share/org/apache/slide/search/basic/ComparableResourceImpl.java?rev=1.17
2005-06-24 13:02:32.000000000 +0200
+++ src/share/org/apache/slide/search/basic/ComparableResourceImpl.java
2005-06-29 11:31:28.000000000 +0200
@@ -39,6 +39,7 @@
 import org.apache.slide.content.NodeRevisionContent;
 import org.apache.slide.content.NodeRevisionDescriptor;
 import org.apache.slide.content.NodeRevisionDescriptors;
+import org.apache.slide.content.NodeRevisionNumber;
 import org.apache.slide.search.CompareHint;
 import org.apache.slide.search.PropertyProvider;
 import org.apache.slide.search.QueryScope;
@@ -114,13 +115,31 @@
     public ComparableResourceImpl (ObjectNode objectNode, SearchToken
searchToken, QueryScope scope, PropertyProvider propertyProvider)
         throws SlideException
     {
-        this (objectNode, searchToken.getSlideToken(),
searchToken.getContentHelper(), scope, propertyProvider);
-        this.searchToken = searchToken;
+        this (objectNode, searchToken, scope, propertyProvider, null);
     }
     
+	/**
+	* Constructs a RequestedResource.
+	*
+	* @param objectNode        the ObjectNode for this resource
+	* @param searchToken       the SearchToken for this request
+	* @param scope             the scope of the query.
+	* @param propertyProvider  the  PropertyProvider to use (may be
+	*                          <code>null</code>).
+	* @param revisionNumber		the revision number of this resource
+	*
+	* @throws BadQueryException
+	*/
+	public ComparableResourceImpl (ObjectNode objectNode, SearchToken searchToken,
QueryScope scope, PropertyProvider propertyProvider, NodeRevisionNumber
revisionNumber) 
+		throws SlideException
+	{
+		this (objectNode, searchToken.getSlideToken(),
searchToken.getContentHelper(), scope, propertyProvider, revisionNumber);
+		this.searchToken = searchToken;
+	}
+
     
     // private boolean isCollection;
-    
+
     /**
      * Constructs a RequestedResource.
      *
@@ -130,10 +149,11 @@
      * @param scope             the scope of the query.
      * @param propertyProvider  the  PropertyProvider to use (may be
      *                          <code>null</code>).
+	  * @param revisionNumber		the revision number of this resource
      *
      * @throws BadQueryException
      */
-    public ComparableResourceImpl (ObjectNode objectNode, SlideToken
slideToken, Content contentHelper, QueryScope scope, PropertyProvider
propertyProvider) throws SlideException {
+    public ComparableResourceImpl (ObjectNode objectNode, SlideToken
slideToken, Content contentHelper, QueryScope scope, PropertyProvider
propertyProvider, NodeRevisionNumber revisionNumber) throws SlideException {
         
         this.objectNode = objectNode;
         this.contentHelper = contentHelper;
@@ -146,9 +166,12 @@
                 contentHelper.retrieve (slideToken, objectNode.getUri());
             
             try {
-                revisionDescriptor =
-                    contentHelper.retrieve (slideToken, revisionDescriptors);
-                
+					if (revisionNumber == null)
+               	 revisionDescriptor =
+                  	  contentHelper.retrieve (slideToken, revisionDescriptors);
+					else
+						revisionDescriptor =
+								contentHelper.retrieve (slideToken, revisionDescriptors, revisionNumber);
             }
             catch (org.apache.slide.content.RevisionDescriptorNotFoundException
e) {
                 // The object doesn't have any revision, we create a dummy
@@ -310,6 +333,15 @@
     public String getUri() {
         return getInternalHref();
     }
+
+  /**
+     * Returns the revision number of the resource.
+     *
+     * @return     the revision number of the resource.
+     */
+	public NodeRevisionNumber getRevisionNumber() {
+		return revisionDescriptor.getRevisionNumber();
+	}
     
     /**
      * Returns the property with the given <code>propertyName</code>.
@@ -452,8 +484,9 @@
         Comparable otherValue = (Comparable) otherResource.getThisValue
(hint.getPropName(), hint.getPropNamespace());
         Comparable thisValue = (Comparable) getThisValue (hint.getPropName(),
hint.getPropNamespace());
         
-        if (getInternalHref().equals (otherResource.getInternalHref()))
-            result = 0;
+			if (getInternalHref().equals (otherResource.getInternalHref()) &&
+			
(getRevisionNumber().equals(((ComparableResource)otherResource).getRevisionNumber())))
+            	result = 0;
             
         else if (thisValue != null && otherValue != null) {
             result = thisValue.compareTo(otherValue);
@@ -653,7 +686,7 @@
         } catch (SlideException e) {}
 
         if (getUri().equals (otherUri))
-            return true;
+				return
getRevisionNumber().equals(((ComparableResource)otherObject).getRevisionNumber());
         else
             return false;
     }

--- src/share/org/apache/slide/search/basic/OrderBy.java?rev=1.11      
2005-06-28 08:45:46.000000000 +0200
+++ src/share/org/apache/slide/search/basic/OrderBy.java    2005-06-23
13:45:08.000000000 +0200
@@ -203,7 +203,8 @@
             ComparableResource r2 = (ComparableResource)o2;

             int result = 0;
-            if (r1.getInternalHref().equals (r2.getInternalHref())) {
+            if (r1.getInternalHref().equals (r2.getInternalHref()) &&
+                                      
r1.getRevisionNumber().equals(r2.getRevisionNumber())) {
                 result = 0;
             }
             else {

--- src/stores/org/apache/slide/index/lucene/Index.java?rev=1.12 2005-06-28
08:49:28.000000000 +0200
+++ src/stores/org/apache/slide/index/lucene/Index.java     2005-06-23
12:45:34.000000000 +0200
@@ -65,6 +65,7 @@
 {
     public static final String KEY_FIELD_NAME = "SLIDE_KEY";
     public static final String URI_FIELD_NAME = "SLIDE_URI";
+    public static final String REVISION_FIELD_NAME = "SLIDE_REVISION";
     public static final String SCOPE_FIELD_NAME = "SLIDE_SCOPE";
     public static final String DEPTH_FIELD_NAME = "SLIDE_DEPTH";
     public static final String VERSION_FIELD_NAME = "SLIDE_VERSION";
@@ -221,6 +222,7 @@
         doc.add(unstoredString(Index.KEY_FIELD_NAME,
                 configuration.generateKey(uri, descriptor.getRevisionNumber())));
         doc.add(storedString(Index.URI_FIELD_NAME, uri));
+        doc.add(storedString(Index.REVISION_FIELD_NAME,
descriptor.getRevisionNumber().toString()));

         // scopes
         StringTokenizer tokenizer = new StringTokenizer(uri, "/");
@@ -305,6 +307,7 @@
         doc.add(unstoredString(Index.KEY_FIELD_NAME,
                 configuration.generateKey(uri, descriptor.getRevisionNumber())));
         doc.add(storedString(Index.URI_FIELD_NAME, uri));
+        doc.add(storedString(Index.REVISION_FIELD_NAME,
descriptor.getRevisionNumber().toString()));

         // scopes
         StringTokenizer tokenizer = new StringTokenizer(uri, "/");

---
src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java?rev=1.2
      2005-06-28 08:51:24.000000000 +0200
+++
src/stores/org/apache/slide/index/lucene/expressions/AbstractLuceneExpression.java
     2005-06-23 12:46:30.000000000 +0200
@@ -53,6 +53,7 @@
 import org.apache.slide.structure.ObjectNode;
 import org.apache.slide.structure.SubjectNode;
 import org.apache.slide.util.logger.Logger;
+import org.apache.slide.content.NodeRevisionNumber;
 import org.jdom.Element;


@@ -156,7 +157,9 @@
             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);
+                                        String number =
doc.get(Index.REVISION_FIELD_NAME);
+                                        NodeRevisionNumber nodeNumber = new
NodeRevisionNumber(number);
+                RequestedResource resource = createResource(uri, nodeNumber);
                 result.add(resource);
             }

@@ -199,7 +202,7 @@
         return new TermQuery(new Term(Index.SCOPE_FIELD_NAME, "/"));
     }

-    protected RequestedResource createResource(String uri) throws SearchException
+    protected RequestedResource createResource(String uri, NodeRevisionNumber
nodeNumber) throws SearchException
     {
         ObjectNode node = new SubjectNode(uri); // this will return the root
                                                 // folder
@@ -208,7 +211,7 @@

         try {
             resource = new ComparableResourceImpl(node, query.getSearchToken(),
-                    query.getScope(), factory.getPropertyProvider());
+                    query.getScope(), factory.getPropertyProvider(), nodeNumber);
         } catch (SlideException e) {
             throw new SearchException(e);
         }

---
src/webdav/server/org/apache/slide/webdav/util/ResourceWithProvidedProperties.java?rev=1.8
2005-06-29 12:29:31.706156920 +0200
+++
src/webdav/server/org/apache/slide/webdav/util/ResourceWithProvidedProperties.java
     2005-06-24 12:42:49.000000000 +0200
@@ -33,6 +33,7 @@
 import org.apache.slide.content.NodeProperty;
 import org.apache.slide.content.NodeRevisionDescriptor;
 import org.apache.slide.content.NodeRevisionDescriptors;
+import org.apache.slide.content.NodeRevisionNumber;
 import org.apache.slide.search.PropertyProvider;
 import org.apache.slide.search.RequestedResource;

@@ -89,7 +90,16 @@
     public String getUri() {
         return revisionDescriptors.getOriginalUri();
     }
-
+
+     /**
+     * Returns the revision number of the resource.
+     *
+     * @return     the revision number of the resource.
+     */
+       public NodeRevisionNumber getRevisionNumber() {
+               return revisionDescriptor.getRevisionNumber();
+       }
+
     /**
      * Returns the property with the given <code>propertyName</code>.
      *

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic