package com.manning.hsia.dvdstore; import com.manning.hsia.test.ch13.SearchTestCase; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Query; import org.hibernate.Transaction; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.testng.annotations.Test; import java.util.List; public class TestXmlBridges extends SearchTestCase { private Query query; private Analyzer analyzer = new StandardAnalyzer(); @Test(groups="ch13") public void testSaxXmlBridge() throws Exception { FullTextSession session = Search.getFullTextSession( openSession() ); Transaction tx = session.beginTransaction(); try { buildCDIndex( session, tx ); tx = session.beginTransaction(); QueryParser parser = new QueryParser( "title", analyzer ); query = parser.parse( "burlesque" ); org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery( query, CD.class ); hibQuery.setProjection( FullTextQuery.DOCUMENT ); List<Object[]> results = hibQuery.list(); assert results.size() == 1 : "incorrect hit count"; Object[] obj = results.get( 0 ); Document doc = (Document) obj[0]; assert doc.get( "title" ).equals( "Empire Burlesque" ) : "incorrect title"; assert doc.get( "price" ).equals( "10.90" ) : "incorrect price"; for (Object element : session.createQuery( "from " + CD.class.getName() ).list()) session.delete( element ); tx.commit(); } finally { session.close(); } } @Test(groups="ch13") public void testDOMXmlBridge() throws Exception { FullTextSession session = Search.getFullTextSession( openSession() ); Transaction tx = session.beginTransaction(); try { buildCDDOMIndex( session, tx ); tx = session.beginTransaction(); QueryParser parser = new QueryParser( "title", analyzer ); query = parser.parse( "burlesque" ); org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery( query, CDDOM.class ); hibQuery.setProjection( FullTextQuery.DOCUMENT ); List<Object[]> results = hibQuery.list(); assert results.size() == 1 : "incorrect hit count"; Object[] obj = results.get( 0 ); Document doc = (Document) obj[0]; assert doc.get( "title" ).equals( "Empire Burlesque" ) : "incorrect title"; assert doc.get( "price" ).equals( "10.90" ) : "incorrect price"; for (Object element : session.createQuery( "from " + CDDOM.class.getName() ).list()) session.delete( element ); tx.commit(); } finally { session.close(); } } private void buildCDIndex( FullTextSession session, Transaction tx ) { tx = session.beginTransaction(); CD cd = new CD(); cd.setId( 1 ); cd.setTitle( "Empire Burlesque" ); cd.setArtist( "Bob Dylan" ); cd.setPriceData( "<CD YEAR=\"1985\"><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE></CD>" ); session.save( cd ); cd = new CD(); cd.setId( 2 ); cd.setTitle( "Hide your heart" ); cd.setArtist( "Bonnie Tylor" ); cd.setPriceData( "<CD YEAR=\"1988\"><COMPANY>CBS Records</COMPANY><PRICE>9.90</PRICE></CD>" ); session.save( cd ); tx.commit(); } private void buildCDDOMIndex( FullTextSession session, Transaction tx ) { tx = session.beginTransaction(); CDDOM cd = new CDDOM(); cd.setId( 1 ); cd.setTitle( "Empire Burlesque" ); cd.setArtist( "Bob Dylan" ); cd.setPriceData( "<CD YEAR=\"1985\"><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE></CD>" ); session.save( cd ); cd = new CDDOM(); cd.setId( 2 ); cd.setTitle( "Hide your heart" ); cd.setArtist( "Bonnie Tylor" ); cd.setPriceData( "<CD YEAR=\"1988\"><COMPANY>CBS Records</COMPANY><PRICE>9.90</PRICE></CD>" ); session.save( cd ); tx.commit(); } protected Class[] getMappings() { return new Class[]{ CD.class, CDDOM.class }; } }