Package com.esri.gpt.control.search.browse

Source Code of com.esri.gpt.control.search.browse.TocIndexAdapter

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. 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 com.esri.gpt.control.search.browse;
import com.esri.gpt.catalog.lucene.LuceneIndexAdapter;
import com.esri.gpt.catalog.lucene.Storeables;
import com.esri.gpt.framework.util.Val;

import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.MapFieldSelector;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
import org.apache.lucene.search.IndexSearcher;

/**
* Provides utilities for querying a Lucene index during TOC construction.
*/
public class TocIndexAdapter {
 
  /** instance variables ====================================================== */
  private LuceneIndexAdapter baseAdapter;
  private IndexSearcher      searcher;
 
  /** constructors ============================================================ */
 
  /** Default constructor */
  public TocIndexAdapter() {}
 
  /** methods ================================================================= */
 
  /**
   * Closes any open resources.
   */
  public void close() {
    if ((this.baseAdapter != null) && (this.searcher != null)) {
      this.baseAdapter.closeSearcher(this.searcher);
    }
  }
 
  /**
   * Gets the index searcher.
   * @param context the operation context
   * @return the index searcher
   * @throws CorruptIndexException if the index is corrupt
   * @throws IOException if an I/O exception occurs
   */
  public IndexSearcher getSearcher(TocContext context)
    throws CorruptIndexException, IOException {
    if (this.searcher != null) {
      return this.searcher;
    } else {
      if (this.baseAdapter == null) {
        this.baseAdapter = new LuceneIndexAdapter(context.getRequestContext());
      }
      this.searcher = this.baseAdapter.newSearcher();
      return this.searcher;
    }
  }
 
  /**
   * Returns the field values associated with a document
   * @param context the operation context
   * @param fieldName the field name
   * @param uuid the document uuid
   * @return the field values (null if not found)
   * @throws CorruptIndexException if the index is corrupt
   * @throws IOException if an I/O exception occurs
   */
  public String[] queryFieldByUuid(TocContext context, String fieldName, String uuid)
    throws CorruptIndexException, IOException {
    TermDocs termDocs = null;
    try {
      uuid = Val.chkStr(uuid);
      if (uuid.length() > 0) {
        IndexSearcher searcher = this.getSearcher(context);
        IndexReader reader = searcher.getIndexReader();
        MapFieldSelector selector = new MapFieldSelector(new String[]{fieldName});
        termDocs = reader.termDocs();
        termDocs.seek(new Term(Storeables.FIELD_UUID,uuid));
        if (termDocs.next()) {
          Document document = reader.document(termDocs.doc(),selector);
          return document.getValues(fieldName);
        }
      }
    } finally {
      try {if (termDocs != null) termDocs.close();} catch (Exception ef) {}
    }
    return null;
  }

}
TOP

Related Classes of com.esri.gpt.control.search.browse.TocIndexAdapter

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.