Package com.caucho.doc.javadoc

Source Code of com.caucho.doc.javadoc.Query

/*
* Copyright (c) 1998-2003 Caucho Technology -- all rights reserved
*
* Caucho Technology permits redistribution, modification and use
* of this file in source and binary form ("the Software") under the
* Caucho Developer Source License ("the License").  The following
* conditions must be met:
*
* 1. Each copy or derived work of the Software must preserve the copyright
*    notice and this notice unmodified.
*
* 2. Redistributions of the Software in source or binary form must include
*    an unmodified copy of the License, normally in a plain ASCII text
*
* 3. The names "Resin" or "Caucho" are trademarks of Caucho Technology and
*    may not be used to endorse products derived from this software.
*    "Resin" or "Caucho" may not appear in the names of products derived
*    from this software.
*
* This Software is provided "AS IS," without a warranty of any kind.
* ALL EXPRESS OR IMPLIED REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
*
* CAUCHO TECHNOLOGY AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY LICENSEE OR ANY THIRD PARTY AS A RESULT OF USING OR
* DISTRIBUTING SOFTWARE. IN NO EVENT WILL CAUCHO OR ITS LICENSORS BE LIABLE
* FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
* CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
* REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
* INABILITY TO USE SOFTWARE, EVEN IF HE HAS BEEN ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGES.
*
* @author Sam
*/

package com.caucho.doc.javadoc;

import com.caucho.log.Log;
import com.caucho.util.CharBuffer;
import com.caucho.util.L10N;

import java.sql.SQLException;

import java.util.LinkedList;
import java.util.logging.Logger;

import javax.naming.NamingException;

/**
* A query to be created and used from jsp.
*/
public class Query {
  static protected final Logger log = Log.open(Query.class);
  static final L10N L = new L10N(Query.class);

  private final static int LIMIT_DEFAULT = 15;
  private final static int LIMIT_MAX = 250;

  private Store _store;

  private String _query;
  private int _offset;
  private int _limit = LIMIT_DEFAULT;

  private LinkedList<JavadocItem> _results;

  public Query()
    throws NamingException
  {
    _store =  Store.getInstance();
  }

  protected void reset()
  {
    _results = null;
  }

  /**
   * The store that this Query should use.
   */
  public void setStore(Store store)
  {
    _store = store;
  }

  /**
   * The query string submitted by the user.
   */
  public void setQuery(String query)
  {
    _query = safeString(query);

    if (_query != null) {
      // turn com/caucho/vfs/Path.html#method() style submissions
      // into appropriate ones

      CharBuffer cb = new CharBuffer(_query);

      // take .html out
      int di = cb.indexOf(".html");
      if (di > -1)
        cb.delete(di,di+5);


      // take all (...) out
      while  ( (di = cb.indexOf('(')) > -1) {
        int di2 = cb.indexOf(')',di);
        if (di2 > di)
          cb.delete(di,di2+1);
      }

      for (int i = 0; i < cb.length(); i++) {
        char ch = cb.charAt(i);
        if (i > 0 && ch == '/'  || ch == '\\' || ch == '#')
          cb.setCharAt(i,'.');
      }

      _query = cb.toString();
    }

    reset();
  }

  /**
   * The query string submitted by the user.
   */
  public String getQuery()
  {
    return _query;
  }

  /**
   * An offset into the search results, for previous/next page
   * functionality.
   */
  public void setOffset(String offset)
  {
    _offset = safeParseInt(offset,_offset);
    reset();
  }

  /**
   * An offset into the search results, for previous/next page
   * functionality.
   */
  public int getOffset()
  {
    return _offset;
  }

  /**
   * A limit on the number of search results to return for one page.
   */
  public void setLimit(String limit)
  {
    _limit = safeParseInt(limit,_limit);
    if (_limit > LIMIT_MAX)
      _limit = LIMIT_MAX;
    reset();
  }

  /**
   * A limit on the number of search results to return for one page.
   */
  public int getLimit()
  {
    return _limit;
  }

  /**
   * Do the query and return the results.
   */
  public LinkedList<JavadocItem> getResults()
    throws SQLException
  {
    if (_results != null)
      return _results;

    if (_query == null)
      _results = new LinkedList<JavadocItem>();
    else
      _results = _store.query(_query,_offset,_limit);

    return _results;
  }

  /**
   * True if there is a next page.
   */
  public boolean getIsNextPage()
  {
    return _results != null && _results.size() == _limit;
  }

  /**
   * The offset to be used for a link to the next set of results.
   */
  public int getNextPageOffset()
  {
    return _offset + _limit;
  }

  /**
   * True if there is a previous page
   */
  public boolean getIsPreviousPage()
  {
    return _offset > 0;
  }

  /**
   * The offset to be used for a link to the previous set of results, null
   * if there is no next page.
   */
  public int getPreviousPageOffset()
  {
    int r = _offset - _limit;
    if (r < 0)
      r = 0;
    return r;
  }

  public String toString()
  {
    return _query;
  }

  private static String safeString(String s, String deflt)
  {
    if (s == null || s.length() == 0)
      return deflt;
    else
      return s;
  }

  private static String safeString(String s)
  {
    return safeString(s,null);
  }

  private static int safeParseInt(String s, int deflt)
  {
    if (s == null || s.length() == 0)
      return deflt;
    else {
      try {
        return Integer.parseInt(s);
      } catch (Exception ex) {
        return deflt;
      }
    }
  }

}
TOP

Related Classes of com.caucho.doc.javadoc.Query

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.