package railo.runtime.search.lucene2.docs; import java.io.IOException; import java.io.Reader; import org.apache.lucene.document.Document; import railo.commons.io.IOUtil; import railo.commons.io.res.Resource; import railo.commons.lang.StringUtil; import railo.runtime.op.Caster; /** A utility for making Lucene Documents from a File. */ public final class FileDocument { //private static final char FILE_SEPARATOR = System.getProperty("file.separator").charAt(0); private static final int SUMMERY_SIZE=200; /** Makes a document for a File. <p> The document has three fields: <ul> <li><code>path</code>--containing the pathname of the file, as a stored, tokenized field; <li><code>modified</code>--containing the last modified date of the file as a keyword field as encoded by <a href="lucene.document.DateField.html">DateField</a>; and <li><code>contents</code>--containing the full contents of the file, as a Reader field; * @param res * @return matching document * @throws IOException */ public static Document getDocument(Resource res,String charset) throws IOException { // make a new, empty document Document doc = new Document(); doc.add(FieldUtil.UnIndexed("mime-type", "text/plain")); String content=IOUtil.toString(res,charset); FieldUtil.setRaw(doc,content); //doc.add(FieldUtil.UnIndexed("raw", content)); doc.add(FieldUtil.Text("contents", content.toLowerCase())); doc.add(FieldUtil.UnIndexed("summary",StringUtil.max(content,SUMMERY_SIZE))); return doc; } public static Document getDocument(StringBuffer content, Reader r) throws IOException { // make a new, empty document Document doc = new Document(); FieldUtil.setMimeType(doc, "text/plain"); // String contents=IOUtil.toString(r); if(content!=null)content.append(contents); doc.add(FieldUtil.UnIndexed("size", Caster.toString(contents.length()))); FieldUtil.setContent(doc, contents); FieldUtil.setRaw(doc, contents); FieldUtil.setSummary(doc, StringUtil.max(contents,SUMMERY_SIZE),false); return doc; } private FileDocument() {} }