[jboss-cvs] jboss-seam/src/main/org/jboss/seam/framework ...
Gavin King
gavin.king at jboss.com
Thu Oct 5 15:43:59 EDT 2006
User: gavin
Date: 06/10/05 15:43:59
Modified: src/main/org/jboss/seam/framework ManagedEntity.java
ManagedHibernateEntity.java ManagedObject.java
Query.java
Log:
association handling in framework
more robust configuration
Revision Changes Path
1.4 +21 -45 jboss-seam/src/main/org/jboss/seam/framework/ManagedEntity.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ManagedEntity.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/ManagedEntity.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- ManagedEntity.java 28 Sep 2006 01:47:33 -0000 1.3
+++ ManagedEntity.java 5 Oct 2006 19:43:59 -0000 1.4
@@ -6,10 +6,7 @@
import javax.faces.convert.Converter;
import javax.persistence.EntityManager;
-import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Intercept;
-import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.util.Reflections;
/**
@@ -22,14 +19,11 @@
*
*/
@Intercept(NEVER)
-public class ManagedEntity
+public class ManagedEntity extends ManagedObject
{
private EntityManager entityManager;
private Object id;
- private String entityClassName;
- private Class<?> entityClass;
private String idClass;
- private Object instance;
private String idConverterId;
private Converter idConverter;
@@ -53,54 +47,26 @@
this.id = id;
}
- public String getEntityClass()
- {
- return entityClassName;
- }
-
- public void setEntityClass(String entityClass)
- {
- this.entityClassName = entityClass;
- }
-
- @Create
- public void initEntityClass() throws Exception
- {
- entityClass = Reflections.classForName(entityClassName);
- }
-
- @Unwrap @Transactional
- public Object getInstance() throws Exception
+ @Override
+ protected void initInstance() throws Exception
{
if ( id==null || "".equals(id) )
{
- if (instance==null)
- {
- instance = createInstance();
- }
+ super.initInstance();
}
else
{
- if (instance==null)
- {
//we cache the instance so that it does not "disappear"
//after remove() is called on the instance
//is this really a Good Idea??
getEntityManager().joinTransaction();
- instance =loadInstance( getConvertedId() );
- }
- }
- return instance;
+ instance = loadInstance( getConvertedId() );
}
-
- protected Object createInstance() throws Exception
- {
- return entityClass.newInstance();
}
protected Object loadInstance(Object id)
{
- return getEntityManager().find(entityClass, id);
+ return getEntityManager().find( getObjectClass(), id );
}
//////////// TODO: copy/paste from ManagedHibernateEntity ///////////////////
@@ -165,4 +131,14 @@
this.idClass = idClass;
}
+ public Class<?> getEntityClass()
+ {
+ return getObjectClass();
+ }
+
+ public void setEntityClass(Class<?> entityClass)
+ {
+ setObjectClass(entityClass);
+ }
+
}
1.3 +13 -36 jboss-seam/src/main/org/jboss/seam/framework/ManagedHibernateEntity.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ManagedHibernateEntity.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/ManagedHibernateEntity.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- ManagedHibernateEntity.java 28 Sep 2006 01:47:33 -0000 1.2
+++ ManagedHibernateEntity.java 5 Oct 2006 19:43:59 -0000 1.3
@@ -6,9 +6,6 @@
import javax.faces.convert.Converter;
import org.hibernate.Session;
-import org.jboss.seam.annotations.Create;
-import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.util.Reflections;
/**
@@ -20,14 +17,11 @@
* @author Gavin King
*
*/
-public class ManagedHibernateEntity
+public class ManagedHibernateEntity extends ManagedObject
{
private Session session;
private Serializable id;
- private String entityClassName;
- private Class entityClass;
private String idClass;
- private Object instance;
private String idConverterId;
private Converter idConverter;
@@ -51,53 +45,36 @@
this.id = id;
}
- public String getEntityClass()
+ public Class getEntityClass()
{
- return entityClassName;
+ return getObjectClass();
}
- public void setEntityClass(String entityClass)
+ public void setEntityClass(Class<?> entityClass)
{
- this.entityClassName = entityClass;
+ setObjectClass(entityClass);
}
- @Create
- public void initEntityClass() throws Exception
- {
- entityClass = Reflections.classForName(entityClassName);
- }
- @Unwrap @Transactional
- public Object getInstance() throws Exception
+ @Override
+ public void initInstance() throws Exception
{
if ( id==null || "".equals(id) )
{
- if (instance==null)
- {
- instance = createInstance();
- }
+ super.initInstance();
}
else
{
- if (instance==null)
- {
//we cache the instance so that it does not "disappear"
//after remove() is called on the instance
//is this really a Good Idea??
instance = loadInstance( getConvertedId() );
}
}
- return instance;
- }
-
- protected Object createInstance() throws Exception
- {
- return entityClass.newInstance();
- }
protected Object loadInstance(Serializable id)
{
- return getSession().get(entityClass, id);
+ return getSession().get( getObjectClass(), id );
}
////////////TODO: copy/paste from ManagedEntity ///////////////////
1.2 +74 -9 jboss-seam/src/main/org/jboss/seam/framework/ManagedObject.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ManagedObject.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/ManagedObject.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- ManagedObject.java 27 Sep 2006 17:48:51 -0000 1.1
+++ ManagedObject.java 5 Oct 2006 19:43:59 -0000 1.2
@@ -2,8 +2,15 @@
import static org.jboss.seam.InterceptionType.NEVER;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+
import org.jboss.seam.annotations.Intercept;
+import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.Unwrap;
+import org.jboss.seam.core.Expressions;
+import org.jboss.seam.core.Expressions.ValueBinding;
import org.jboss.seam.util.Reflections;
/**
@@ -15,33 +22,91 @@
@Intercept(NEVER)
public class ManagedObject
{
- private String objectClass;
- private Object instance;
+ private Class<?> objectClass;
+ protected Object instance;
+
+ private Map<String, String> initialFieldValues;
+ private Map<String, String> initialPropertyValues;
- public String getObjectClass()
+ public Class getObjectClass()
{
return objectClass;
}
- public void setObjectClass(String entityClass)
+ public void setObjectClass(Class<?> objectClass)
{
- this.objectClass = entityClass;
+ this.objectClass = objectClass;
}
- @Unwrap
- public Object getInstance() throws Exception
+ @Unwrap @Transactional
+ public final Object getInstance() throws Exception
{
if (instance==null)
{
- Class<?> clazz = Reflections.classForName(objectClass);
- instance = clazz.newInstance();
+ initInstance();
}
return instance;
}
+ protected void initInstance() throws Exception
+ {
+ instance = createInstance();
+ initialize(instance);
+ }
+
public void setInstance(Object instance)
{
this.instance = instance;
}
+ protected Object createInstance() throws Exception
+ {
+ return objectClass.newInstance();
+ }
+
+ protected void initialize(Object instance) throws Exception
+ {
+ if (initialFieldValues!=null)
+ {
+ for ( Map.Entry<String, String> initializer: initialFieldValues.entrySet() )
+ {
+ Object value = Expressions.instance().createValueBinding( initializer.getValue() ).getValue();
+ Field field = Reflections.getField( objectClass, initializer.getKey() );
+ if ( !field.isAccessible() ) field.setAccessible(true);
+ Reflections.set(field, instance, value);
+ }
+ }
+ if (initialPropertyValues!=null)
+ {
+ for ( Map.Entry<String, String> initializer: initialPropertyValues.entrySet() )
+ {
+ ValueBinding valueBinding = Expressions.instance().createValueBinding( initializer.getValue() );
+ Object value = valueBinding.getValue();
+ Method method = Reflections.getSetterMethod( objectClass, initializer.getKey() );
+ if ( !method.isAccessible() ) method.setAccessible(true);
+ Reflections.invoke(method, instance, value);
+ }
+ }
+ }
+
+ public Map<String, String> getInitialFieldValues()
+ {
+ return initialFieldValues;
+ }
+
+ public void setInitialFieldValues(Map<String, String> initializers)
+ {
+ this.initialFieldValues = initializers;
+ }
+
+ public Map<String, String> getInitialPropertyValues()
+ {
+ return initialPropertyValues;
+ }
+
+ public void setInitialPropertyValues(Map<String, String> initialPropertyValues)
+ {
+ this.initialPropertyValues = initialPropertyValues;
+ }
+
}
1.4 +1 -1 jboss-seam/src/main/org/jboss/seam/framework/Query.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Query.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/Query.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- Query.java 3 Oct 2006 17:16:45 -0000 1.3
+++ Query.java 5 Oct 2006 19:43:59 -0000 1.4
@@ -228,7 +228,7 @@
public boolean isNextExists()
{
- return true; //TODO!
+ return resultList!=null && resultList.size() == maxResults;
}
public void setFirstResult(Integer firstResult)
More information about the jboss-cvs-commits
mailing list