[hibernate-commits] Hibernate SVN: r14986 - search/trunk/src/java/org/hibernate/search/cfg.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jul 29 13:32:59 EDT 2008


Author: hardy.ferentschik
Date: 2008-07-29 13:32:59 -0400 (Tue, 29 Jul 2008)
New Revision: 14986

Added:
   search/trunk/src/java/org/hibernate/search/cfg/SearchConfiguration.java
   search/trunk/src/java/org/hibernate/search/cfg/SearchConfigurationFromHibernateCore.java
Log:
Resurrected SearchConfiguration and SearchConfigurationFromHibernateCore

Added: search/trunk/src/java/org/hibernate/search/cfg/SearchConfiguration.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/cfg/SearchConfiguration.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/cfg/SearchConfiguration.java	2008-07-29 17:32:59 UTC (rev 14986)
@@ -0,0 +1,57 @@
+// $Id: SearchConfiguration.java 14954 2008-07-17 20:43:10Z sannegrinovero $
+package org.hibernate.search.cfg;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+
+/**
+ * Provides configuration to Hibernate Search
+ *
+ * @author Navin Surtani  - navin at surtani.org
+ */
+public interface SearchConfiguration {
+	/**
+	 * Returns an iterator over the list of indexed classes
+	 *
+	 * @return iterator of indexed classes.
+	 */
+	Iterator<Class<?>> getClassMappings();
+
+	/**
+	 * Returns a {@link java.lang.Class} from a String parameter.
+	 * TODO: should it be Iteratable
+	 * @param name
+	 * @return java.lang.Class
+	 */
+
+	Class<?> getClassMapping(String name);
+
+	/**
+	 * Gets a configuration property from its name
+	 * or null if not present
+	 *
+	 * @param propertyName - as a String.
+	 * @return the property as a String
+	 */
+	String getProperty(String propertyName);
+
+	/**
+	 * Gets properties as a java.util.Properties object.
+	 *
+	 * @return a java.util.Properties object.
+	 * @see java.util.Properties object
+	 */
+	Properties getProperties();
+
+	/**
+	 * Returns a reflection manager if already available in the environment
+	 * null otherwise
+	 *
+     * @return ReflectionManager
+	 */
+	ReflectionManager getReflectionManager();
+
+
+}


Property changes on: search/trunk/src/java/org/hibernate/search/cfg/SearchConfiguration.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: search/trunk/src/java/org/hibernate/search/cfg/SearchConfigurationFromHibernateCore.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/cfg/SearchConfigurationFromHibernateCore.java	                        (rev 0)
+++ search/trunk/src/java/org/hibernate/search/cfg/SearchConfigurationFromHibernateCore.java	2008-07-29 17:32:59 UTC (rev 14986)
@@ -0,0 +1,95 @@
+// $Id: SearchConfigurationFromHibernateCore.java 14954 2008-07-17 20:43:10Z sannegrinovero $
+package org.hibernate.search.cfg;
+
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.NoSuchElementException;
+
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.mapping.PersistentClass;
+
+/**
+ * Search configuration implementation wrapping an Hibernate Core configuration
+ *
+ * @author Emmanuel Bernard
+ */
+public class SearchConfigurationFromHibernateCore implements SearchConfiguration {
+	private final org.hibernate.cfg.Configuration cfg;
+	private ReflectionManager reflectionManager;
+
+	public SearchConfigurationFromHibernateCore(org.hibernate.cfg.Configuration cfg) {
+		if ( cfg == null ) throw new NullPointerException( "Configuration is null" );
+		this.cfg = cfg;
+	}
+
+	public Iterator<Class<?>> getClassMappings() {
+		return new ClassIterator( cfg.getClassMappings() );
+	}
+
+	public Class<?> getClassMapping(String name) {
+		return cfg.getClassMapping( name ).getMappedClass();
+	}
+
+	public String getProperty(String propertyName) {
+		return cfg.getProperty( propertyName );
+	}
+
+	public Properties getProperties() {
+		return cfg.getProperties();
+	}
+
+	public ReflectionManager getReflectionManager() {
+		if ( reflectionManager == null ) {
+			try {
+				//TODO introduce a ReflectionManagerHolder interface to avoid reflection
+				//I want to avoid hard link between HAN and Validator for such a simple need
+				//reuse the existing reflectionManager one when possible
+				reflectionManager =
+						(ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
+
+			}
+			catch (Exception e) {
+				reflectionManager = new JavaReflectionManager();
+			}
+		}
+		return reflectionManager;
+	}
+
+	private static class ClassIterator implements Iterator<Class<?>> {
+		private Iterator hibernatePersistentClassIterator;
+		private Class<?> future;
+		private Class<?> current;
+
+		private ClassIterator(Iterator hibernatePersistentClassIterator) {
+			this.hibernatePersistentClassIterator = hibernatePersistentClassIterator;
+		}
+
+		public boolean hasNext() {
+			//we need to read the next non null one. getMappedClass() can return null and should be ignored
+			if ( future != null) return true;
+			do {
+				if ( ! hibernatePersistentClassIterator.hasNext() ) {
+					future = null;
+					return false;
+				}
+				final PersistentClass pc = (PersistentClass) hibernatePersistentClassIterator.next();
+				future = pc.getMappedClass();
+			}
+			while ( future == null );
+			return true;
+		}
+
+		public Class<?> next() {
+			//run hasNext to init the next element
+			if ( ! hasNext() ) throw new NoSuchElementException();
+			Class<?> result = future;
+			future = null;
+			return result;
+		}
+
+		public void remove() {
+			throw new UnsupportedOperationException( "Cannot modify Hibenrate Core metadata" );
+		}
+	}
+}


Property changes on: search/trunk/src/java/org/hibernate/search/cfg/SearchConfigurationFromHibernateCore.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the hibernate-commits mailing list