Package com.sun.xmlsearch.xml.qe

Source Code of com.sun.xmlsearch.xml.qe.QueryResults$QueryHitIteratorImpl

/*************************************************************************
*
*  $RCSfile: QueryResults.java,v $
*
*  $Revision: 1.1 $
*
*  last change: $Author: abi $ $Date: 2000/11/30 18:03:51 $
*
*  The Contents of this file are made available subject to the terms of
*  either of the following licenses
*
*         - GNU Lesser General Public License Version 2.1
*         - Sun Industry Standards Source License Version 1.1
*
*  Sun Microsystems Inc., October, 2000
*
*  GNU Lesser General Public License Version 2.1
*  =============================================
*  Copyright 2000 by Sun Microsystems, Inc.
*  901 San Antonio Road, Palo Alto, CA 94303, USA
*
*  This library is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public
*  License version 2.1, as published by the Free Software Foundation.
*
*  This library is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*  Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public
*  License along with this library; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
*  MA  02111-1307  USA
*
*
*  Sun Industry Standards Source License Version 1.1
*  =================================================
*  The contents of this file are subject to the Sun Industry Standards
*  Source License Version 1.1 (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.openoffice.org/license.html.
*
*  Software provided under this License is provided on an "AS IS" basis,
*  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING,
*  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
*  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
*  See the License for the specific provisions governing your rights and
*  obligations concerning the Software.
*
*  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
*  Copyright: 2000 by Sun Microsystems, Inc.
*
*  All Rights Reserved.
*
*  Contributor(s): _______________________________________
*
*
************************************************************************/

package com.sun.xmlsearch.xml.qe;

import com.sun.xmlsearch.util.PrefixTranslator;
import java.io.*;

public final class QueryResults implements Externalizable {
    private QueryHitData[] _queryHits;
    private String         _docType;
    private String[]       _prefixTranslations; // (prefix, replacement)*
    private int _size;    // cached size

    public QueryResults() { /* for Externalizable */ }
 
    public QueryResults(String[] prefixTranslations, String docType,
      QueryHitData[] hits) {
  _prefixTranslations = prefixTranslations;
  _docType = docType;
  _queryHits = hits;
    }
 
    public boolean isNonEmpty() {
  return _queryHits != null && _queryHits.length > 0 &&
      _queryHits[0] != null;
    }

    public QueryHitIterator makeQueryHitIterator() {
  return new QueryHitIteratorImpl();
    }
 
    public void translate() {
  PrefixTranslator translator =
      PrefixTranslator.makePrefixTranslator(_prefixTranslations);
  _size = 0;
  if (_queryHits != null)
      while (_size < _queryHits.length && _queryHits[_size] != null)
    _queryHits[_size++].setDocumentType(_docType);
  if (translator != null)
      for (int i = 0; i < _size; i++)
    _queryHits[i].translate(translator);
    }


    /**************************************************************************/
    /*                A.Bille                                                 */

    public int getNextNonZero( int currentRow )
    {
    int idx = currentRow + 1;
      if( _queryHits != null )
      {
         while( idx < _queryHits.length && _queryHits[idx] == null )
             ++idx;
            if( idx == _queryHits.length )
               return -1;
             return idx;
    }
      return -1;
    }

    public int getNonZeroCount()
    {
      int count = 0;
       if( _queryHits != null )
          for( int i = 0; i < _queryHits.length; ++i )
            if( _queryHits[i] != null ) ++count;

        return count;
    }

    /**************************************************************************/



    public int size() {
  return _size;
    }

    public QueryHitData getHit(int index) {
  return _queryHits[index];
    }

    public void readExternal(ObjectInput in)
  throws ClassNotFoundException, IOException {
  final int nHits = in.readInt();
  if (nHits > 0) {
      _queryHits = new QueryHitData[nHits];
      for (int i = 0; i < nHits; i++)
    (_queryHits[i] = new QueryHitData()).readExternal(in);
      _prefixTranslations = (String[]) in.readObject();
      _docType = (String) in.readObject();
  }
  else {
      _prefixTranslations = null;
      _queryHits = null;
      _docType = null;
  }
    }

    public void writeExternal(ObjectOutput out) throws IOException {
  if (_queryHits != null) {
      final int length = _queryHits.length;
      if (length > 0) {
    int nHits = 0;
    while (_queryHits[nHits] != null && ++nHits < length)
        ;
    if (nHits > 0) {
        out.writeInt(nHits);
        for (int i = 0; i < nHits; i++)
      _queryHits[i].writeExternal(out);
        out.writeObject(_prefixTranslations);
        out.writeObject(_docType);
        return;
    }
      }
  }
  // else
  out.writeInt(0);
    }

    private final class QueryHitIteratorImpl implements QueryHitIterator {
  private int _index;
  private double _penalty;

  public QueryHitIteratorImpl() {
      _penalty = _queryHits[_index = 0].getPenalty();
  }
     
  public QueryHitData getHit() {
      return _queryHits[_index];
  }
   
  /** advances; returns true iff next exists */
  public boolean next() {
      if (++_index < _queryHits.length && _queryHits[_index] != null) {
    _penalty = _queryHits[_index].getPenalty();
    return true;
      }
      else {
    _penalty = Double.MAX_VALUE;
    return false;
      }
  }

  public double getPenalty() {
      return _penalty;
  }
   
  public boolean betterThan(QueryHitIterator other) {
      return _penalty < other.getPenalty();
  }
    } // end of QueryHitIteratorImpl
}
TOP

Related Classes of com.sun.xmlsearch.xml.qe.QueryResults$QueryHitIteratorImpl

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.