www.pudn.com > 33_online_store.rar > IndexBuilder.java
package index;
import java.util.*;
import java.io.*;
import DebugLog;
public class IndexBuilder
{
public static DebugLog log;
static
{
log = DebugLog.getSharedLog();
}
/**
* Method to index a directory
*/
protected static void buildIndexForDir(File dir
,Vector files
,Hashtable entries)
{
String[] list;
File curFile;
int i,max;
list = dir.list();
log.log("Indexing Directory: "+dir);
max = list.length;
for(i=0;i')
{
inTag = false;
}
else if((Character.isWhitespace((char)cur)
||(cur == '.')
||(cur == ',')
||(cur == '[')
||(cur == ']')
||(cur == '{')
||(cur == '}')
||(cur == '(')
||(cur == ')')
||(cur == '=')
||(cur == ';')
||(cur == ':')
||(cur == '=')
||(cur == '-')
||(cur == '/')
||(cur == '\\'))
&& !inTag)
{
if(curWord.length()>0)
{
curString = curWord.toString().toLowerCase();
curWord.setLength(0);
if(!SkipTable.skip(curString))
{
entryForWord = (Vector) entries.get(curString);
if(entryForWord == null)
{
entryForWord = new Vector();
entries.put(curString,entryForWord);
}
newEntry = new IndexEntry();
newEntry.file = fileInd;
newEntry.occurences = 1;
if(!entryForWord.contains(newEntry))
{
entryForWord.addElement(newEntry);
}
else
{
int oldInd =
entryForWord.indexOf(newEntry);
IndexEntry oldEnt = (IndexEntry)
entryForWord.elementAt(oldInd);
oldEnt.occurences++;
}
}
}
}
else if(!inTag)
{
//Don't add the separator
//or quotes
if(cur == '|')
{
curWord.append('-');
}
else if((cur != '\"')
&&(cur != '\''))
{
curWord.append((char)cur);
}
}
}
if(curWord.length()>0)
{
curString = curWord.toString().toLowerCase();
curWord.setLength(0);
if(!SkipTable.skip(curString))
{
entryForWord = (Vector) entries.get(curString);
if(entryForWord == null)
{
entryForWord = new Vector();
entries.put(curString,entryForWord);
}
newEntry = new IndexEntry();
newEntry.file = fileInd;
newEntry.occurences = 1;
if(!entryForWord.contains(newEntry))
{
entryForWord.addElement(newEntry);
}
else
{
int oldInd =
entryForWord.indexOf(newEntry);
IndexEntry oldEnt = (IndexEntry)
entryForWord.elementAt(oldInd);
oldEnt.occurences++;
}
}
}
bufIn.close();
fileIn.close();
}
catch(Exception exp)
{
//skip this file
}
}
/**
* Private method write the index file
*/
protected static void writeIndex(File dir
,Vector files
,Hashtable entries)
{
FileWriter fileOut;
BufferedWriter bufOut;
PrintWriter printOut;
File curFile;
int i,max;
Enumeration words;
String curWord;
Vector entryForWord;
IndexEntry curEntry;
File file;
String dirPath,fullPath,relPath;
int len;
try
{
file = new File(dir,HTMLIndex.INDEX_FILE_NAME);
fileOut = new FileWriter(file);
bufOut = new BufferedWriter(fileOut);
printOut = new PrintWriter(bufOut);
dirPath = dir.getAbsolutePath();
len = dirPath.length();
if(File.separatorChar != dirPath.charAt(len-1)) len++;
//Print files in order
//Use relative paths incase dir moves
max = files.size();
for(i=0;irefTime)
{
retVal = true;
}
}
if(retVal == true) break;
}
return retVal;
}
/**
* Builds an index file for a directory
*/
public static void buildIndex(File dir)
{
if((dir == null)||!dir.isDirectory()) return;
Vector files = new Vector();
Hashtable entries = new Hashtable();
try
{
buildIndexForDir(dir,files,entries);
log.log("Writing Index");
writeIndex(dir,files,entries);
}
catch(Exception exp)
{
if(log != null) log.log(exp);
}
}
public static boolean indexNeedsRebuilding(File dir)
{
File file;
long refTime;
boolean retVal = true;
try
{
file = new File(dir,HTMLIndex.INDEX_FILE_NAME);
refTime = file.lastModified();
retVal = checkRebuildForDir(dir,refTime);
}
catch(Exception exp)
{
retVal = true;
}
return retVal;
}
}