[hibernate-commits] Hibernate SVN: r14409 - in search/trunk/src: java/org/hibernate/search/bridge/builtin and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Sun Mar 9 13:04:52 EDT 2008


Author: epbernard
Date: 2008-03-09 13:04:52 -0400 (Sun, 09 Mar 2008)
New Revision: 14409

Added:
   search/trunk/src/java/org/hibernate/search/bridge/builtin/ClassBridge.java
   search/trunk/src/java/org/hibernate/search/bridge/builtin/UriBridge.java
   search/trunk/src/java/org/hibernate/search/bridge/builtin/UrlBridge.java
Modified:
   search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
   search/trunk/src/test/org/hibernate/search/test/bridge/BridgeTest.java
   search/trunk/src/test/org/hibernate/search/test/bridge/Cloud.java
Log:
HSEARCH-164, HSEARCH-165 Class, URL, URI built-in bridges

Modified: search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java	2008-03-07 17:17:13 UTC (rev 14408)
+++ search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -6,6 +6,8 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.net.URL;
+import java.net.URI;
 
 import org.hibernate.HibernateException;
 import org.hibernate.AssertionFailure;
@@ -20,6 +22,8 @@
 import org.hibernate.search.bridge.builtin.ShortBridge;
 import org.hibernate.search.bridge.builtin.EnumBridge;
 import org.hibernate.search.bridge.builtin.BooleanBridge;
+import org.hibernate.search.bridge.builtin.UrlBridge;
+import org.hibernate.search.bridge.builtin.UriBridge;
 import org.hibernate.search.annotations.Resolution;
 import org.hibernate.search.annotations.Parameter;
 import org.hibernate.search.annotations.Field;
@@ -58,6 +62,12 @@
 
 	public static final TwoWayFieldBridge BOOLEAN = new TwoWayString2FieldBridgeAdaptor( new BooleanBridge() );
 
+	public static final TwoWayFieldBridge CLAZZ = new TwoWayString2FieldBridgeAdaptor( new org.hibernate.search.bridge.builtin.ClassBridge() );
+
+	public static final TwoWayFieldBridge Url = new TwoWayString2FieldBridgeAdaptor( new UrlBridge() );
+
+	public static final TwoWayFieldBridge Uri = new TwoWayString2FieldBridgeAdaptor( new UriBridge() );
+
 	public static final FieldBridge DATE_YEAR = new String2FieldBridgeAdaptor( DateBridge.DATE_YEAR );
 	public static final FieldBridge DATE_MONTH = new String2FieldBridgeAdaptor( DateBridge.DATE_MONTH );
 	public static final FieldBridge DATE_DAY = new String2FieldBridgeAdaptor( DateBridge.DATE_DAY );
@@ -83,6 +93,9 @@
 		builtInBridges.put( String.class.getName(), STRING );
 		builtInBridges.put( Boolean.class.getName(), BOOLEAN );
 		builtInBridges.put( boolean.class.getName(), BOOLEAN );
+		builtInBridges.put( Class.class.getName(), CLAZZ );
+		builtInBridges.put( URL.class.getName(), Url );
+		builtInBridges.put( URI.class.getName(), Uri );
 
 		builtInBridges.put( Date.class.getName(), DATE_MILLISECOND );
 	}

Added: search/trunk/src/java/org/hibernate/search/bridge/builtin/ClassBridge.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/builtin/ClassBridge.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/bridge/builtin/ClassBridge.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -0,0 +1,35 @@
+//$
+package org.hibernate.search.bridge.builtin;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+import org.hibernate.search.SearchException;
+import org.hibernate.annotations.common.util.StringHelper;
+import org.hibernate.annotations.common.util.ReflectHelper;
+
+/**
+ * Convert a Class back and forth
+ * 
+ * @author Emmanuel Bernard
+ */
+public class ClassBridge implements TwoWayStringBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) {
+			return null;
+		}
+		else {
+			try {
+				return ReflectHelper.classForName( stringValue, ClassBridge.class );
+			}
+			catch (ClassNotFoundException e) {
+				throw new SearchException("Unable to deserialize Class: " + stringValue, e);
+			}
+		}
+	}
+
+	public String objectToString(Object object) {
+		return object == null ?
+				null :
+				( (Class) object).getName();
+
+	}
+}

Added: search/trunk/src/java/org/hibernate/search/bridge/builtin/UriBridge.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/builtin/UriBridge.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/bridge/builtin/UriBridge.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -0,0 +1,36 @@
+//$
+package org.hibernate.search.bridge.builtin;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.hibernate.annotations.common.util.StringHelper;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.bridge.TwoWayStringBridge;
+
+/**
+ * Bridge for <code>URI</code>
+ *
+ * @author Emmanuel Bernard
+ */
+public class UriBridge implements TwoWayStringBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) {
+			return null;
+		}
+		else {
+			try {
+				return new URI( stringValue );
+			}
+			catch (URISyntaxException e) {
+				throw new SearchException( "Unable to build URI: " + stringValue, e );
+			}
+		}
+	}
+
+	public String objectToString(Object object) {
+		return object == null ?
+				null :
+				object.toString();
+	}
+}
\ No newline at end of file

Added: search/trunk/src/java/org/hibernate/search/bridge/builtin/UrlBridge.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/builtin/UrlBridge.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/bridge/builtin/UrlBridge.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -0,0 +1,36 @@
+//$
+package org.hibernate.search.bridge.builtin;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+
+import org.hibernate.search.bridge.TwoWayStringBridge;
+import org.hibernate.search.SearchException;
+import org.hibernate.annotations.common.util.StringHelper;
+
+/**
+ * Bridge for <code>URL</code>
+ *
+ * @author Emmanuel Bernard
+ */
+public class UrlBridge implements TwoWayStringBridge {
+	public Object stringToObject(String stringValue) {
+		if ( StringHelper.isEmpty( stringValue ) ) {
+			return null;
+		}
+		else {
+			try {
+				return new URL(stringValue);
+			}
+			catch (MalformedURLException e) {
+				throw new SearchException("Unable to build URL: " + stringValue, e);
+			}
+		}
+	}
+
+	public String objectToString(Object object) {
+		return object == null ?
+				null :
+				object.toString();
+	}
+}

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/BridgeTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2008-03-07 17:17:13 UTC (rev 14408)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/BridgeTest.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -6,6 +6,8 @@
 import java.util.GregorianCalendar;
 import java.util.Calendar;
 import java.util.TimeZone;
+import java.net.URI;
+import java.net.URL;
 
 import org.hibernate.Transaction;
 import org.hibernate.cfg.Configuration;
@@ -15,9 +17,13 @@
 import org.hibernate.search.FullTextSession;
 import org.hibernate.search.Search;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.analysis.SimpleAnalyzer;
+import org.apache.lucene.index.Term;
 
 /**
  * @author Emmanuel Bernard
@@ -37,6 +43,9 @@
         cloud.setString(null);
 		cloud.setType( CloudType.DOG );
 		cloud.setStorm( false );
+		cloud.setClazz( Cloud.class );
+		cloud.setUri( new URI("http://www.hibernate.org") );
+		cloud.setUrl( new URL("http://www.hibernate.org") );
 		org.hibernate.Session s = openSession();
         Transaction tx = s.beginTransaction();
         s.persist(cloud);
@@ -63,6 +72,18 @@
         result = session.createFullTextQuery(query).setProjection( "type" ).list();
         assertEquals( "Enum projection works", 1, result.size() ); //the query is dumb because restrictive
 
+		query = new TermQuery( new Term("clazz", Cloud.class.getName() ) );
+        result = session.createFullTextQuery(query).setProjection( "clazz" ).list();
+        assertEquals( "Clazz projection works", 1, result.size() );
+		assertEquals( "Clazz projection works", Cloud.class.getName(), ( (Class) ((Object[])result.get(0))[0] ).getName() );
+
+		BooleanQuery bQuery = new BooleanQuery();
+		bQuery.add( new TermQuery( new Term("uri", "http://www.hibernate.org" ) ), BooleanClause.Occur.MUST );
+		bQuery.add( new TermQuery( new Term("url", "http://www.hibernate.org" ) ), BooleanClause.Occur.MUST );
+
+		result = session.createFullTextQuery(bQuery).setProjection( "clazz" ).list();
+        assertEquals( "Clazz projection works", 1, result.size() );
+
 		s.delete( s.get( Cloud.class, cloud.getId() ) );
         tx.commit();
         s.close();

Modified: search/trunk/src/test/org/hibernate/search/test/bridge/Cloud.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/bridge/Cloud.java	2008-03-07 17:17:13 UTC (rev 14408)
+++ search/trunk/src/test/org/hibernate/search/test/bridge/Cloud.java	2008-03-09 17:04:52 UTC (rev 14409)
@@ -2,6 +2,8 @@
 package org.hibernate.search.test.bridge;
 
 import java.util.Date;
+import java.net.URL;
+import java.net.URI;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
@@ -44,7 +46,37 @@
     private String customStringBridge;
 	private CloudType type;
 	private boolean storm;
+	private Class clazz;
+	private URL url;
+	private URI uri;
 
+	@Field(index=Index.UN_TOKENIZED, store=Store.YES)
+	public URL getUrl() {
+		return url;
+	}
+
+	public void setUrl(URL url) {
+		this.url = url;
+	}
+
+	@Field(index=Index.UN_TOKENIZED, store=Store.YES)
+	public URI getUri() {
+		return uri;
+	}
+
+	public void setUri(URI uri) {
+		this.uri = uri;
+	}
+
+	@Field(index=Index.UN_TOKENIZED, store=Store.YES)
+	public Class getClazz() {
+		return clazz;
+	}
+
+	public void setClazz(Class clazz) {
+		this.clazz = clazz;
+	}
+
 	@Field(index=Index.TOKENIZED, store=Store.YES)
     @FieldBridge(impl = TruncateFieldBridge.class)
     public String getCustomFieldBridge() {




More information about the hibernate-commits mailing list