[jboss-cvs] jboss-seam/src/main/org/jboss/seam/framework ...
Gavin King
gavin.king at jboss.com
Sun Oct 8 14:57:45 EDT 2006
User: gavin
Date: 06/10/08 14:57:45
Modified: src/main/org/jboss/seam/framework EntityHome.java
Home.java
Added: src/main/org/jboss/seam/framework
HibernateEntityHome.java
Log:
refactored fwk *again*, and added Hibernate homes
Revision Changes Path
1.3 +7 -93 jboss-seam/src/main/org/jboss/seam/framework/EntityHome.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: EntityHome.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/EntityHome.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- EntityHome.java 8 Oct 2006 14:18:23 -0000 1.2
+++ EntityHome.java 8 Oct 2006 18:57:45 -0000 1.3
@@ -11,19 +11,14 @@
{
private EntityManager entityManager;
- private Object id;
-
@In(create=true)
private FacesMessages facesMessages;
- private String deletedMessage = "Successfully deleted";
- private String createdMessage = "Successfully created";
- private String updatedMessage = "Successfully updated";
-
@Transactional
public boolean isManaged()
{
- return getEntityManager().contains( getInstance() );
+ return getInstance()!=null &&
+ getEntityManager().contains( getInstance() );
}
@Transactional
@@ -31,7 +26,7 @@
{
getEntityManager().joinTransaction();
getEntityManager().flush();
- facesMessages.add(updatedMessage);
+ facesMessages.add( getUpdatedMessage() );
return "updated";
}
@@ -42,7 +37,7 @@
getEntityManager().persist( getInstance() );
getEntityManager().flush();
setId( Persistence.getId( getInstance(), getEntityManager() ) );
- facesMessages.add(createdMessage);
+ facesMessages.add( getCreatedMessage() );
return "persisted";
}
@@ -52,45 +47,19 @@
getEntityManager().joinTransaction();
getEntityManager().remove( getInstance() );
getEntityManager().flush();
- facesMessages.add(deletedMessage);
+ facesMessages.add( getDeletedMessage() );
return "removed";
}
@Transactional
- public E find(Object id)
+ public E find()
{
getEntityManager().joinTransaction();
- E result = getEntityManager().find( getEntityClass(), id );
+ E result = getEntityManager().find( getEntityClass(), getId() );
if (result==null) result = handleNotFound();
return result;
}
- protected E find()
- {
- return find( getId() );
- }
-
- protected E handleNotFound()
- {
- throw new EntityNotFoundException();
- }
-
- @Override
- protected void initInstance()
- {
- if ( isIdDefined() )
- {
- //we cache the instance so that it does not "disappear"
- //after remove() is called on the instance
- //is this really a Good Idea??
- setInstance( find() );
- }
- else
- {
- super.initInstance();
- }
- }
-
public EntityManager getEntityManager()
{
return entityManager;
@@ -101,59 +70,4 @@
this.entityManager = entityManager;
}
- public Class<E> getEntityClass()
- {
- return getObjectClass();
- }
-
- public void setEntityClass(Class<E> entityClass)
- {
- setObjectClass(entityClass);
- }
-
- public Object getId()
- {
- return id;
- }
-
- public void setId(Object id)
- {
- this.id = id;
- }
-
- public boolean isIdDefined()
- {
- return getId()!=null && !"".equals( getId() );
- }
-
- public String getCreatedMessage()
- {
- return createdMessage;
- }
-
- public void setCreatedMessage(String createdMessage)
- {
- this.createdMessage = createdMessage;
- }
-
- public String getDeletedMessage()
- {
- return deletedMessage;
- }
-
- public void setDeletedMessage(String deletedMessage)
- {
- this.deletedMessage = deletedMessage;
- }
-
- public String getUpdatedMessage()
- {
- return updatedMessage;
- }
-
- public void setUpdatedMessage(String updatedMessage)
- {
- this.updatedMessage = updatedMessage;
- }
-
}
1.2 +93 -62 jboss-seam/src/main/org/jboss/seam/framework/Home.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Home.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/framework/Home.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- Home.java 8 Oct 2006 14:01:53 -0000 1.1
+++ Home.java 8 Oct 2006 18:57:45 -0000 1.2
@@ -1,13 +1,7 @@
package org.jboss.seam.framework;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Map;
-
import org.jboss.seam.annotations.Transactional;
-import org.jboss.seam.core.Expressions;
import org.jboss.seam.core.Expressions.ValueBinding;
-import org.jboss.seam.util.Reflections;
/**
* Manager component for an instance of any class.
@@ -17,21 +11,14 @@
*/
public class Home<E>
{
- private Class<E> objectClass;
+ private Object id;
protected E instance;
+ private Class<E> entityClass;
+ protected ValueBinding newInstance;
- private Map<String, String> initialFieldValues;
- private Map<String, String> initialPropertyValues;
-
- public Class<E> getObjectClass()
- {
- return objectClass;
- }
-
- public void setObjectClass(Class<E> objectClass)
- {
- this.objectClass = objectClass;
- }
+ private String deletedMessage = "Successfully deleted";
+ private String createdMessage = "Successfully created";
+ private String updatedMessage = "Successfully updated";
@Transactional
public E getInstance()
@@ -45,76 +32,120 @@
protected void initInstance()
{
+ if ( isIdDefined() )
+ {
+ //we cache the instance so that it does not "disappear"
+ //after remove() is called on the instance
+ //is this really a Good Idea??
+ setInstance( find() );
+ }
+ else
+ {
setInstance( createInstance() );
- initialize(instance);
+ }
}
- public void setInstance(E instance)
+ protected E find()
{
- this.instance = instance;
+ return null;
+ }
+
+ protected E handleNotFound()
+ {
+ throw new EntityNotFoundException();
}
protected E createInstance()
{
+ if (newInstance!=null)
+ {
+ return (E) newInstance.getValue();
+ }
+ else if (entityClass!=null)
+ {
try
{
- return getObjectClass().newInstance();
+ return entityClass.newInstance();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
-
- protected void initialize(E instance)
+ else
{
- if (initialFieldValues!=null)
- {
- for ( Map.Entry<String, String> initializer: initialFieldValues.entrySet() )
+ return null;
+ }
+ }
+
+ public Class<E> getEntityClass()
{
- Object value = Expressions.instance().createValueBinding( initializer.getValue() ).getValue();
- if ( value!=null )
+ return entityClass;
+ }
+
+ public void setEntityClass(Class<E> entityClass)
{
- Field field = Reflections.getField( getObjectClass(), initializer.getKey() );
- if ( !field.isAccessible() ) field.setAccessible(true);
- Reflections.setAndWrap(field, instance, value);
+ this.entityClass = entityClass;
}
+
+ public Object getId()
+ {
+ return id;
}
+
+ public void setId(Object id)
+ {
+ this.id = id;
}
- if (initialPropertyValues!=null)
+
+ public boolean isIdDefined()
{
- for ( Map.Entry<String, String> initializer: initialPropertyValues.entrySet() )
+ return getId()!=null && !"".equals( getId() );
+ }
+
+ public void setInstance(E instance)
{
- ValueBinding valueBinding = Expressions.instance().createValueBinding( initializer.getValue() );
- Object value = valueBinding.getValue();
- if ( value!=null )
+ this.instance = instance;
+ }
+
+ public ValueBinding getNewInstance()
{
- Method method = Reflections.getSetterMethod( getObjectClass(), initializer.getKey() );
- if ( !method.isAccessible() ) method.setAccessible(true);
- Reflections.invokeAndWrap(method, instance, value);
+ return newInstance;
}
+
+ public void setNewInstance(ValueBinding newInstance)
+ {
+ this.newInstance = newInstance;
}
+
+ public String getCreatedMessage()
+ {
+ return createdMessage;
}
+
+ public void setCreatedMessage(String createdMessage)
+ {
+ this.createdMessage = createdMessage;
}
- public Map<String, String> getInitialFieldValues()
+ public String getDeletedMessage()
{
- return initialFieldValues;
+ return deletedMessage;
}
- public void setInitialFieldValues(Map<String, String> initializers)
+ public void setDeletedMessage(String deletedMessage)
{
- this.initialFieldValues = initializers;
+ this.deletedMessage = deletedMessage;
}
- public Map<String, String> getInitialPropertyValues()
+ public String getUpdatedMessage()
{
- return initialPropertyValues;
+ return updatedMessage;
}
- public void setInitialPropertyValues(Map<String, String> initialPropertyValues)
+ public void setUpdatedMessage(String updatedMessage)
{
- this.initialPropertyValues = initialPropertyValues;
+ this.updatedMessage = updatedMessage;
}
}
1.1 date: 2006/10/08 18:57:45; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/framework/HibernateEntityHome.java
Index: HibernateEntityHome.java
===================================================================
package org.jboss.seam.framework;
import java.io.Serializable;
import org.hibernate.Session;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.core.FacesMessages;
public class HibernateEntityHome<E> extends Home<E>
{
private Session session;
@In(create=true)
private FacesMessages facesMessages;
@Transactional
public boolean isManaged()
{
return getInstance()!=null &&
getSession().contains( getInstance() );
}
@Transactional
public String update()
{
getSession().flush();
facesMessages.add( getUpdatedMessage() );
return "updated";
}
@Transactional
public String persist()
{
getSession().persist( getInstance() );
getSession().flush();
setId( getSession().getIdentifier( getInstance() ) );
facesMessages.add( getCreatedMessage() );
return "persisted";
}
@Transactional
public String remove()
{
getSession().delete( getInstance() );
getSession().flush();
facesMessages.add( getDeletedMessage() );
return "removed";
}
@Transactional
public E find()
{
E result = (E) getSession().get( getEntityClass(), (Serializable) getId() );
if (result==null) result = handleNotFound();
return result;
}
public Session getSession()
{
return session;
}
public void setSession(Session session)
{
this.session = session;
}
}
More information about the jboss-cvs-commits
mailing list