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() {