/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * MetaMatrix, Inc - repackaging and updates for use as a metadata store *******************************************************************************/ package org.teiid.internal.core.index; import java.io.IOException; import org.teiid.core.index.IDocument; import org.teiid.core.index.IEntryResult; import org.teiid.core.index.IQueryResult; /** * This class provides an input on an index, after it has been generated. * You can access all the files of an index via getNextFile(), getCurrentFile() * and moveToNextFile() (idem for the word entries). * The usage is the same for every subclass: creation (constructor), opening * (the open() method), usage, and closing (the close() method), to release the * data source used by this input. */ public abstract class IndexInput { protected int filePosition; protected WordEntry currentWordEntry; protected int wordPosition; // Cache the open state of the Index private boolean openState; public IndexInput() { super(); wordPosition= 1; filePosition= 1; } /** * clears the cache of this indexInput, if it keeps track of the information already read. */ public abstract void clearCache(); /** * Closes the IndexInput. For example, if the input is on a RandomAccessFile, * it calls the close() method of RandomAccessFile. */ public abstract void close() throws IOException; /** * Returns the current file the indexInput is pointing to in the index. */ public abstract IndexedFile getCurrentFile() throws IOException; /** * Returns the current file the indexInput is pointing to in the index. */ public WordEntry getCurrentWordEntry() throws IOException { if (!hasMoreWords()) return null; return currentWordEntry; } /** * Returns the position of the current file the input is pointing to in the index. */ public int getFilePosition() { return filePosition; } /** * Set the open state of the Index * @since 5.0 */ public void setOpen(boolean state) { this.openState = state; } /** * returns the open state of the index * @since 5.0 */ public boolean isOpen() { return this.openState; } /** * Returns the indexedFile corresponding to the given document number in the index the input * reads in, or null if such indexedFile does not exist. */ public abstract IndexedFile getIndexedFile(int fileNum) throws IOException; /** * Returns the indexedFile corresponding to the given document in the index the input * reads in (e.g. the indexedFile with the same path in this index), or null if such * indexedFile does not exist. */ public abstract IndexedFile getIndexedFile(IDocument document) throws IOException; /** * Returns the number of files in the index. */ public abstract int getNumFiles(); /** * Returns the number of unique words in the index. */ public abstract int getNumWords(); /** * Returns the Object the input is reading from. It can be an IIndex, * a File, ... */ public abstract Object getSource(); /** * Returns true if the input has not reached the end of the index for the files. */ public boolean hasMoreFiles() { return getFilePosition() <= getNumFiles(); } /** * Returns true if the input has not reached the end of the index for the files. */ public boolean hasMoreWords() { return wordPosition <= getNumWords(); } /** * Moves the pointer on the current file to the next file in the index. */ public abstract void moveToNextFile() throws IOException; /** * Moves the pointer on the current word to the next file in the index. */ public abstract void moveToNextWordEntry() throws IOException; /** * Open the Source where the input gets the information from. */ public abstract void open() throws IOException; /** * Returns the list of the files containing the given word in the index. */ public abstract IEntryResult[] queryEntriesPrefixedBy(char[] prefix) throws IOException; public abstract IQueryResult[] queryFilesReferringToPrefix(char[] prefix) throws IOException; /** * Returns the list of the files whose name contain the given word in the index. */ public abstract IQueryResult[] queryInDocumentNames(String word) throws IOException; /** * Set the pointer on the current file to the first file of the index. */ protected abstract void setFirstFile() throws IOException; /** * Set the pointer on the current word to the first word of the index. */ protected abstract void setFirstWord() throws IOException; }