package com.manning.hsia.dvdstore;
import com.manning.hsia.test.ch13.SearchTestCase;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.store.FSDirectoryProvider;
import org.testng.annotations.Test;
import java.io.*;
import java.util.List;
public class TestReadTextFile extends SearchTestCase {
@Test(groups="ch13")
public void testTextFile() throws Exception {
FullTextSession session = Search.getFullTextSession( openSession() );
Transaction tx = session.beginTransaction();
File f = new File( "ch13/src/com/manning/hsia/dvdstore/file1.txt" );
buildIndex( f.getAbsolutePath(), session, tx );
tx = session.beginTransaction();
try {
Query query = new TermQuery( new Term( "description", "salesman" ) );
org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery( query, Dvd.class );
List<Dvd> results = hibQuery.list();
assert results.size() == 1 : "wrong number of hits";
assert results.get( 0 ).getDescription().indexOf( "salesman" ) >= 0;
tx.commit();
}
finally {
session.close();
}
}
private void buildIndex( String filename, FullTextSession session, Transaction tx ) {
File in = new File( filename );
BufferedReader reader = null;
StringBuffer sb = new StringBuffer();
try {
String lineIn;
reader = new BufferedReader( new FileReader( in ) );
while (( lineIn = reader.readLine() ) != null) {
sb.append( lineIn );
}
Dvd dvd = new Dvd();
dvd.setDescription( sb.toString() );
dvd.setId( 1 );
session.save( dvd );
tx.commit();
}
catch (FileNotFoundException f) {
System.out.println( "unable to locate input file" );
}
catch (IOException io) {
io.printStackTrace();
}
finally {
if ( reader != null ) {
try {
reader.close();
}
catch (IOException io) {
System.out.println( "unable to close file reader" );
}
}
session.clear();
}
}
protected Class[] getMappings() {
return new Class[]{
Dvd.class
};
}
protected void configure( org.hibernate.cfg.Configuration cfg ) {
super.configure( cfg );
cfg.setProperty( "hibernate.search.default.directory_provider", FSDirectoryProvider.class.getName() );
cfg.setProperty( "hibernate.search.default.indexBase", locateBaseDir().getAbsolutePath() );
}
}