Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2008-07-29


Author LoginPost Reply
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)
@@(protected) @@
+// $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@(protected)
+ */
+public interface SearchConfiguration {
+  /**
+   * Returns an iterator over the list of indexed classes
+   *
+   * @return iterator of indexed classes.
+   */
+  Iterator<Class<?>> getClassMappings();
+
+  /**
+   * Returns a {@(protected).
+   * 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)
@@(protected) @@
+// $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

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.