You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Gbenga Bello <rg...@yahoo.com> on 2004/10/17 18:41:16 UTC

Searching in Slide - SearchQuery Object and Request Element issue

Hello List,
Quite some time
I am trying to do search in slide 

First how best can I accomplish this?
What I am doing currently is to Create a Search Query and use the searchHelper class to carry out the search 
 
However when I try to create the searchquery object, a BadqueryException is encountered; which is of this form
 
org.apache.slide.search.BadQueryException: Required element <from> not supplied
 at org.apache.slide.search.basic.BasicQueryImpl.getScope(BasicQueryImpl.java:386)
 at org.apache.slide.search.basic.BasicSearchLanguage.parseQuery(BasicSearchLanguage.java:127)
 at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:256)
 at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:199)
 at org.apache.slide.search.SearchImpl.createSearchQuery(SearchImpl.java:175)
 at com.onespace.webdav.SearchforDocument.ExecuteQuery(SearchforDocument.java:140)
 at com.onespace.webdav.SearchforDocument.main(SearchforDocument.java:185)
 
I suspect that something is probably wrong with the way I am packaging the SearchRequest Element. Pls can you help point this out for me.
 
I will also appreciate links to discusions relevant to the error i am encountering, or probably a better approach to solving to doing search in slide.
Here is my code below.
 
I will be glad to hear from you today.
 
COGI
<><><>END<><><><>

package com.onespace.webdav;
/**
 * <p>Title: DMS Search Engine </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company:Creattion Nigeria Ltd. </p>
 * @author COGI
 * @version 1.0
 */
import java.io.*;
import java.util.*;
import javax.transaction.*;
import java.lang.SecurityException;
import java.security.Principal;
import junit.framework.TestCase;
import org.apache.slide.authenticate.*;
import org.apache.slide.common.*;
import org.apache.slide.content.*;
import org.apache.slide.lock.*;
import org.apache.slide.security.*;
import org.apache.slide.structure.*;
import org.apache.slide.search.*;
import org.apache.slide.store.impl.rdbms.JDBCStore;
import org.apache.slide.common.SlideException;
import org.apache.slide.webdav.util.WebdavUtils;
import org.apache.slide.webdav.util.resourcekind.*;
import org.apache.webdav.lib.methods.*;
import org.apache.slide.util.conf.ConfigurationException;
import org.apache.slide.common.NamespaceAccessToken;
import org.apache.slide.util.XMLValue;
import org.apache.slide.macro.Macro;
import org.apache.slide.macro.MacroParameters;
import org.apache.slide.macro.*;
import org.apache.slide.store.RevisionDescriptorsStore;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.output.XMLOutputter;
public class SearchforDocument extends TestCase{
  file://Helper Classes
  static private NamespaceAccessToken token;
  private Structure structure;
  private Security security;
  private Lock lock;
  private Content content;
  private SlideToken slideToken;
  file://Search
  private Search search;
  private Element element;
  public SearchforDocument(String name) {
    super(name);
    try {
      setUp();
    }
    catch (Exception ex) {
    }
  }
  protected void setUp() throws Exception {
            super.setUp();
            // Initialization
            String namespace = "jdbc_store";
            Domain.init("E:/tmp/Slide 2.0b1 Tomcat 5.0/slide/Domain.xml");
            this.token =
                    Domain.accessNamespace(new SecurityToken(
                                           new String()),namespace);
            this.structure = token.getStructureHelper();
            this.security  = token.getSecurityHelper();
            this.lock      = token.getLockHelper();
            this.content   = token.getContentHelper();
            this.search = token.getSearchHelper();
    }
    /**
     * @methodName CreateSearchRequest()
     * @param resourceURI
     * @return
     * @throws IOException
     */
  public Element CreateSearchRequest(String resourceURI) throws IOException {
           Namespace davNamespace = Namespace.getNamespace ("d", "DAV:");
            Element searchRequest = new Element ("searchRequest", davNamespace);
            Element basicSearch = new Element ("basicSearch", davNamespace);
            searchRequest.addContent (basicSearch);
            Element select = new Element ("select", davNamespace);
            basicSearch.addContent(select);
            Element prop = new Element ("prop", davNamespace);
            select.addContent(prop);
            prop.addContent(new Element ("getcontentlength", davNamespace));
            Element from = new Element ("from", davNamespace);
            basicSearch.addContent(from);
            Element scope = new Element ("scope", davNamespace);
            from.addContent(scope);
            Element href = new Element ("href", davNamespace);
            href.addContent(resourceURI);
            scope.addContent(href);
            Element where = new Element ("where", davNamespace);
            basicSearch.addContent(where);
            Element gt = new Element ("gt", davNamespace);
            where.addContent (gt);
            Element p2 = new Element ("prop", davNamespace);
            gt.addContent(p2);
            p2.addContent(new Element ("getcontentlength", davNamespace));
            Element literal = new Element ("literal", davNamespace);
            literal.addContent("10000");
            p2.addContent(literal);
            XMLOutputter out = new XMLOutputter ("  ", true);
            out.output (searchRequest, System.out);
            System.out.println("\n");
            return searchRequest;
  }
  /**
   *This mtd creates the SearchQuery object and call the search method of the SearchHelper class
   * @methodName ExecuteQuery()
   * @return SearchQueryResult
   */
  public SearchQueryResult ExecuteQuery (){
    CredentialsToken credentials = new CredentialsToken("root");
    SlideToken slideToken = new SlideTokenImpl(credentials);
    SearchLanguage []sLag = search.getSupportedLanguages();
    for (int i=0;i<sLag.length;i++)
      System.out.println("GrammarUri = "+ sLag[i].getGrammarUri());
    try {
      SearchQuery searchqry = search.createSearchQuery("DAV:",
          CreateSearchRequest("/files/"),
          slideToken, 1);
      SearchQueryResult searchqryResult = doSearch(searchqry,slideToken);
      return searchqryResult;
    }
    catch (IOException ex) {
      ex.printStackTrace();
      return null;
    }
    catch (BadQueryException ex) {
      System.err.println("Bad Query!");
      ex.printStackTrace();
      return null;
    }
  }
  /**
   * @methodName doSearch()
   * @param Squery
   * @param slideToken
   * @return SearchQueryResult
   */
  public SearchQueryResult doSearch (SearchQuery Squery, SlideToken slideToken){
    try {
      return search.search(slideToken, Squery);
    }
    catch (ServiceAccessException ex) {
      return null;
    }
  }
  /**
   * @methodName ListSearchResult();
   * @param result
   */
  public void ListSearchResult (SearchQueryResult result){
    Iterator It = result.iterator();
    while (It.hasNext()){
      String Item = (String)It.next();
      System.out.println(" "+Item);
    }
  }
  public static void main(String[] args) throws IOException{
    SearchforDocument searchforDocument1 = new SearchforDocument("xml");
    searchforDocument1.ExecuteQuery();
  }
}



		
---------------------------------
Do you Yahoo!?
Take Yahoo! Mail with you! Get it on your mobile phone.