Package org.archive.wayback.resourceindex

Source Code of org.archive.wayback.resourceindex.CompositeSearchResultSource

/*
*  This file is part of the Wayback archival access software
*   (http://archive-access.sourceforge.net/projects/wayback/).
*
*  Licensed to the Internet Archive (IA) by one or more individual
*  contributors.
*
*  The IA licenses this file to You 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.archive.wayback.resourceindex;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.archive.util.iterator.CloseableIterator;
import org.archive.wayback.core.CaptureSearchResult;
import org.archive.wayback.exception.ResourceIndexNotAvailableException;
import org.archive.wayback.resourceindex.cdx.CDXIndex;
import org.archive.wayback.util.CompositeSortedIterator;

/**
* SearchResultSource that aggregates results from multiple SearchResultSources.
*
* @author brad
* @version $Date$, $Revision$
*/
public class CompositeSearchResultSource implements SearchResultSource {

  protected List<SearchResultSource> sources;

  /**
   * Constructor
   */
  public CompositeSearchResultSource() {
    sources = new ArrayList<SearchResultSource>();
  }

  /**
   * add a SearchResultSource to this composite
   *
   * @param source
   *            to be added
   */
  public void addSource(SearchResultSource source) {
    sources.add(source);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.archive.wayback.resourceindex.SearchResultSource#getPrefixIterator(java.lang.String)
   */
  public CloseableIterator<CaptureSearchResult> getPrefixIterator(String prefix)
      throws ResourceIndexNotAvailableException {

    Comparator<CaptureSearchResult> comparator = new SearchResultComparator();
    CompositeSortedIterator<CaptureSearchResult> itr = new CompositeSortedIterator<CaptureSearchResult>(comparator);
   
    int added = 0;
    ResourceIndexNotAvailableException lastExc = null;
   
    for (int i = 0; i < sources.size(); i++) {
      SearchResultSource source = sources.get(i);
     
      try {
        itr.addComponent(source.getPrefixIterator(prefix));
        added++;
      } catch (ResourceIndexNotAvailableException e) {
        if (source instanceof ZipNumClusterSearchResultSource) {
          if (((ZipNumClusterSearchResultSource)source).getCluster().isRequired()) {
            throw e;
          }
        }
       
        lastExc = e;
      }
    }
   
    if ((lastExc != null) && (added == 0)) {
      try {
        itr.close();
      } catch (IOException io) {
       
      }
      throw lastExc;
    }
   
    return itr;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.archive.wayback.resourceindex.SearchResultSource#getPrefixReverseIterator(java.lang.String)
   */
  public CloseableIterator<CaptureSearchResult> getPrefixReverseIterator(
      String prefix) throws ResourceIndexNotAvailableException {

    Comparator<CaptureSearchResult> comparator = new SearchResultComparator(true);
    CompositeSortedIterator<CaptureSearchResult> itr =
      new CompositeSortedIterator<CaptureSearchResult>(comparator);
    for (int i = 0; i < sources.size(); i++) {
      itr.addComponent(sources.get(i).getPrefixReverseIterator(prefix));
    }
    return itr;
  }

  /* (non-Javadoc)
   * @see org.archive.wayback.resourceindex.SearchResultSource#cleanup(org.archive.wayback.util.CleanableIterator)
   */
  public void cleanup(CloseableIterator<CaptureSearchResult> c) throws IOException{
    c.close();
  }

  /**
   * @return null -- only present for Spring
   */
  public List<String> getCDXSources() {
    return null;
  }
 
  /**
   * Sets the list of files searched for queries against this
   * SearchResultSource to the list of paths cdxs
   * @param cdxs
   */
  public void setCDXSources(List<String> cdxs) {
    sources = new ArrayList<SearchResultSource>();
    for(int i = 0; i < cdxs.size(); i++) {
      CDXIndex index = new CDXIndex();
      index.setPath(cdxs.get(i));
      addSource(index);
    }
  }
 
  /**
   * @param sources the sources to set
   */
  public void setSources(List<SearchResultSource> sources) {
    this.sources = sources;
  }

  /**
   * @return the sources
   */
  public List<SearchResultSource> getSources() {
    return sources;
  }

  public void shutdown() throws IOException {
    for(SearchResultSource source : sources) {
      source.shutdown();
    }
  }
}
TOP

Related Classes of org.archive.wayback.resourceindex.CompositeSearchResultSource

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.