/*******************************************************************************
* 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.util.ArrayList;
/**
* A simpleIndexInput is an input on an in memory Index.
*
* @since 8.0
*/
public class SimpleIndexInput extends IndexInput {
protected WordEntry[] sortedWordEntries;
protected IndexedFile currentFile;
protected IndexedFile[] sortedFiles;
protected InMemoryIndex index;
public SimpleIndexInput( InMemoryIndex index ) {
super();
this.index = index;
}
/**
* @see IndexInput#clearCache()
*/
@Override
public void clearCache() {
}
/**
* @see IndexInput#close()
*/
@Override
public void close() {
sortedFiles = null;
}
/**
* @see IndexInput#getCurrentFile()
*/
@Override
public IndexedFile getCurrentFile() {
if (!hasMoreFiles()) return null;
return currentFile;
}
/**
* @see IndexInput#getIndexedFile(int)
*/
@Override
public IndexedFile getIndexedFile( int fileNum ) {
for (int i = 0; i < sortedFiles.length; i++)
if (sortedFiles[i].getFileNumber() == fileNum) return sortedFiles[i];
return null;
}
/**
* @see IndexInput#getIndexedFile(IDocument)
*/
@Override
public IndexedFile getIndexedFile( IDocument document ) {
String name = document.getName();
for (int i = index.getNumFiles(); i >= 1; i--) {
IndexedFile file = getIndexedFile(i);
if (name.equals(file.getPath())) return file;
}
return null;
}
/**
* @see IndexInput#getNumFiles()
*/
@Override
public int getNumFiles() {
return index.getNumFiles();
}
/**
* @see IndexInput#getNumWords()
*/
@Override
public int getNumWords() {
return sortedWordEntries.length;
}
/**
* @see IndexInput#getSource()
*/
@Override
public Object getSource() {
return index;
}
public void init() {
index.init();
}
/**
* @see IndexInput#moveToNextFile()
*/
@Override
public void moveToNextFile() {
filePosition++;
if (!hasMoreFiles()) {
return;
}
currentFile = sortedFiles[filePosition - 1];
}
/**
* @see IndexInput#moveToNextWordEntry()
*/
@Override
public void moveToNextWordEntry() {
wordPosition++;
if (hasMoreWords()) currentWordEntry = sortedWordEntries[wordPosition - 1];
}
/**
* @see IndexInput#open()
*/
@Override
public void open() {
sortedWordEntries = index.getSortedWordEntries();
sortedFiles = index.getSortedFiles();
filePosition = 1;
wordPosition = 1;
setFirstFile();
setFirstWord();
}
@Override
public IEntryResult[] queryEntriesPrefixedBy( char[] prefix ) {
return null;
}
@Override
public IQueryResult[] queryFilesReferringToPrefix( char[] prefix ) {
return null;
}
/**
* @see IndexInput#queryInDocumentNames(String)
*/
@Override
public IQueryResult[] queryInDocumentNames( String word ) {
setFirstFile();
ArrayList matches = new ArrayList();
while (hasMoreFiles()) {
IndexedFile file = getCurrentFile();
if (file.getPath().indexOf(word) != -1) matches.add(file.getPath());
moveToNextFile();
}
IQueryResult[] match = new IQueryResult[matches.size()];
matches.toArray(match);
return match;
}
/**
* @see IndexInput#setFirstFile()
*/
@Override
protected void setFirstFile() {
filePosition = 1;
if (sortedFiles.length > 0) {
currentFile = sortedFiles[0];
}
}
/**
* @see IndexInput#setFirstWord()
*/
@Override
protected void setFirstWord() {
wordPosition = 1;
if (sortedWordEntries.length > 0) currentWordEntry = sortedWordEntries[0];
}
}