/******************************************************************************* * 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 Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * MetaMatrix, Inc - repackaging and updates for use as a metadata store *******************************************************************************/ package org.teiid.designer.core.index; import java.io.IOException; /** * 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. * * @since 8.0 */ 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() { 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; }