[jboss-cvs] jboss-seam/src/main/org/jboss/seam/framework ...
Gavin King
gavin.king at jboss.com
Tue Sep 26 23:53:49 EDT 2006
User: gavin
Date: 06/09/26 23:53:49
Added: src/main/org/jboss/seam/framework EntityActions.java
ManagedEntity.java ManagedHibernateEntity.java
Query.java
Log:
stateful seam interceptors
page parameters
crud framework prototype
bugfixes to PC passivation stuff
Revision Changes Path
1.1 date: 2006/09/27 03:53:49; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/framework/EntityActions.java
Index: EntityActions.java
===================================================================
package org.jboss.seam.framework;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.Transactional;
public class EntityActions
{
private EntityManager entityManager;
private Object entity;
@Transactional
public void persist()
{
entityManager.joinTransaction();
entityManager.persist(entity);
}
@Transactional
public void remove()
{
entityManager.joinTransaction();
entityManager.remove(entity);
}
public boolean isManaged()
{
return entityManager.contains(entity);
}
public EntityManager getEntityManager()
{
return entityManager;
}
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
public Object getEntity()
{
return entity;
}
public void setEntity(Object entity)
{
this.entity = entity;
}
}
1.1 date: 2006/09/27 03:53:49; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/framework/ManagedEntity.java
Index: ManagedEntity.java
===================================================================
package org.jboss.seam.framework;
import static org.jboss.seam.InterceptionType.NEVER;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.Intercept;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.util.Reflections;
/**
* Manager component for an EJB 3.0 entity instance. Allows
* auto-fetching of contextual entities. The identifier
* is determined by evaluating an EL expression and then
* using JSF type conversion if necessary.
*
* @author Gavin King
*
*/
@Intercept(NEVER)
public class ManagedEntity
{
private EntityManager entityManager;
private Object id;
private String entityClass;
private String idClass;
private Object newInstance;
private String idConverterId;
private Converter idConverter;
public EntityManager getEntityManager()
{
return entityManager;
}
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
public Object getId()
{
return id;
}
public void setId(Object id)
{
this.id = id;
}
public String getEntityClass()
{
return entityClass;
}
public void setEntityClass(String entityClass)
{
this.entityClass = entityClass;
}
@Unwrap
public Object getInstance() throws Exception
{
Class<?> clazz = Reflections.classForName(entityClass);
if ( id==null || "".equals(id) )
{
if (newInstance==null)
{
newInstance = clazz.newInstance();
}
return newInstance;
}
else
{
entityManager.joinTransaction();
return entityManager.find( clazz, getConvertedId() );
}
}
//////////// TODO: copy/paste from ManagedHibernateEntity ///////////////////
private Object getConvertedId() throws Exception
{
FacesContext facesContext = FacesContext.getCurrentInstance();
if (idConverter==null)
{
if (idConverterId==null)
{
//TODO: guess the id class using @Id
idConverter = facesContext.getApplication().createConverter( Reflections.classForName(idClass) );
}
else
{
idConverter = facesContext.getApplication().createConverter(idConverterId); //cache the lookup
}
}
if (idConverter==null)
{
return id;
}
else
{
return idConverter.getAsObject(
facesContext,
facesContext.getViewRoot(),
(String) id
);
}
}
public String getIdConverterId()
{
return idConverterId;
}
public void setIdConverterId(String converterId)
{
this.idConverterId = converterId;
}
public Converter getIdConverter()
{
return idConverter;
}
public void setIdConverter(Converter converter)
{
this.idConverter = converter;
}
public String getIdClass()
{
return idClass;
}
public void setIdClass(String idClass)
{
this.idClass = idClass;
}
}
1.1 date: 2006/09/27 03:53:49; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/framework/ManagedHibernateEntity.java
Index: ManagedHibernateEntity.java
===================================================================
package org.jboss.seam.framework;
import java.io.Serializable;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import org.hibernate.Session;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.util.Reflections;
/**
* Manager component for a Hibernate entity instance. Allows
* auto-fetching of contextual entities. The identifier
* is determined by evaluating an EL expression and then
* using JSF type conversion if necessary.
*
* @author Gavin King
*
*/
public class ManagedHibernateEntity
{
private Session session;
private Serializable id;
private String entityClass;
private String idClass;
private Object newInstance;
private String idConverterId;
private Converter idConverter;
public Session getSession()
{
return session;
}
public void setSession(Session session)
{
this.session = session;
}
public Serializable getId()
{
return id;
}
public void setId(Serializable id)
{
this.id = id;
}
public String getEntityClass()
{
return entityClass;
}
public void setEntityClass(String entityClass)
{
this.entityClass = entityClass;
}
@Unwrap @Transactional
public Object getInstance() throws Exception
{
Class clazz = Reflections.classForName(entityClass);
if ( id==null || "".equals(id) )
{
if (newInstance==null)
{
newInstance = clazz.newInstance();
}
return newInstance;
}
else
{
return session.get( clazz, getConvertedId() );
}
}
////////////TODO: copy/paste from ManagedEntity ///////////////////
private Serializable getConvertedId() throws Exception
{
FacesContext facesContext = FacesContext.getCurrentInstance();
if (idConverter==null)
{
if (idConverterId==null)
{
//TODO: guess the id class using @Id
idConverter = facesContext.getApplication().createConverter( Reflections.classForName(idClass) );
}
else
{
idConverter = facesContext.getApplication().createConverter(idConverterId); //cache the lookup
}
}
if (idConverter==null)
{
return id;
}
else
{
return (Serializable) idConverter.getAsObject(
facesContext,
facesContext.getViewRoot(),
(String) id
);
}
}
public String getIdConverterId()
{
return idConverterId;
}
public void setIdConverterId(String converterId)
{
this.idConverterId = converterId;
}
public Converter getIdConverter()
{
return idConverter;
}
public void setIdConverter(Converter converter)
{
this.idConverter = converter;
}
public String getIdClass()
{
return idClass;
}
public void setIdClass(String idClass)
{
this.idClass = idClass;
}
}
1.1 date: 2006/09/27 03:53:49; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/framework/Query.java
Index: Query.java
===================================================================
package org.jboss.seam.framework;
import static org.jboss.seam.InterceptionType.NEVER;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.model.DataModel;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.Intercept;
import org.jboss.seam.jsf.ListDataModel;
@Intercept(NEVER)
public class Query
{
private String ejbql;
private String queryName;
private List<ValueBinding> queryParameters;
private Integer firstResult;
private Integer maxResults;
private EntityManager entityManager;
private Map<String, String> hints;
private List<String> restrictions;
private String order;
private List resultList;
private DataModel dataModel;
private Object singleResult;
public List getResultList()
{
//if (resultList==null)
{
javax.persistence.Query query = createQuery();
resultList = query==null ? null : query.getResultList();
}
return resultList;
}
public Object getSingleResult()
{
if (singleResult==null)
{
javax.persistence.Query query = createQuery();
singleResult = query==null ? null : query.getSingleResult();
}
return singleResult;
}
public DataModel getDataModel()
{
if (dataModel==null)
{
dataModel = new ListDataModel( getResultList() );
}
return dataModel;
}
private javax.persistence.Query createQuery()
{
prepareEjbql();
entityManager.joinTransaction();
javax.persistence.Query query = entityManager.createQuery(ejbql);
for (int i=0; i<queryParameters.size(); i++)
{
Object parameterValue = queryParameters.get(i).getValue( FacesContext.getCurrentInstance() );
if (parameterValue==null)
{
return null;
}
else
{
query.setParameter( i, parameterValue );
}
}
if (firstResult!=null) query.setFirstResult(firstResult);
if (maxResults!=null) query.setMaxResults(maxResults);
if (hints!=null)
{
for (Map.Entry<String, String> me: hints.entrySet())
{
query.setHint(me.getKey(), me.getValue());
}
}
return query;
}
public void refresh()
{
dataModel = null;
}
public void next()
{
firstResult = getNextFirstResult();
dataModel = null;
}
public void previous()
{
firstResult = getPreviousFirstResult();
dataModel = null;
}
public int getNextFirstResult()
{
//TODO: check to see if there are more results
return ( firstResult==null ? 0 : firstResult ) + maxResults;
}
public int getPreviousFirstResult()
{
if (maxResults>firstResult)
{
return 0;
}
else
{
return firstResult - maxResults;
}
}
public void prepareEjbql()
{
//if (ejbql!=null)
{
queryParameters = new ArrayList<ValueBinding>();
StringTokenizer ejbqlTokens = new StringTokenizer(ejbql, "#}", true);
StringBuilder ejbqlBuilder = new StringBuilder();
while ( ejbqlTokens.hasMoreTokens() )
{
String token = ejbqlTokens.nextToken();
if ( "#".equals(token) )
{
String expression = token + ejbqlTokens.nextToken() + ejbqlTokens.nextToken();
queryParameters.add( FacesContext.getCurrentInstance().getApplication().createValueBinding(expression) );
ejbqlBuilder.append("?").append( queryParameters.size() );
}
else
{
ejbqlBuilder.append(token);
}
}
for (String restriction: restrictions)
{
StringTokenizer tokens = new StringTokenizer(restriction, "#}", true);
StringBuilder builder = new StringBuilder();
ValueBinding valueBinding = null;
while ( tokens.hasMoreTokens() )
{
String token = tokens.nextToken();
if ( "#".equals(token) )
{
String expression = token + tokens.nextToken() + tokens.nextToken();
valueBinding = FacesContext.getCurrentInstance().getApplication().createValueBinding(expression);
builder.append("?").append( queryParameters.size() );
}
else
{
builder.append(token);
}
}
if (valueBinding==null)
{
throw new IllegalArgumentException("no value binding in restriction: " + restriction);
}
Object parameterValue = valueBinding.getValue( FacesContext.getCurrentInstance() );
if (parameterValue!=null)
{
queryParameters.add(valueBinding);
if ( ejbqlBuilder.toString().toLowerCase().indexOf("where")>0 )
{
ejbqlBuilder.append(" and ");
}
else
{
ejbqlBuilder.append(" where ");
}
ejbqlBuilder.append(builder);
}
}
if (order!=null) ejbqlBuilder.append(order);
ejbql = ejbqlBuilder.toString();
}
}
public String getEjbql()
{
return ejbql;
}
public void setEjbql(String ejbql)
{
this.ejbql = ejbql;
}
public EntityManager getEntityManager()
{
return entityManager;
}
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
public Integer getFirstResult()
{
return firstResult;
}
public boolean isPreviousExists()
{
return firstResult!=null && firstResult!=0;
}
public boolean isNextExists()
{
return true; //TODO!
}
public void setFirstResult(Integer firstResult)
{
dataModel = null;
this.firstResult = firstResult;
}
public Integer getMaxResults()
{
return maxResults;
}
public void setMaxResults(Integer maxResults)
{
dataModel = null;
this.maxResults = maxResults;
}
public Map<String, String> getHints()
{
return hints;
}
public void setHints(Map<String, String> hints)
{
this.hints = hints;
}
public String getQueryName()
{
return queryName;
}
public void setQueryName(String queryName)
{
this.queryName = queryName;
}
public List<String> getRestrictions()
{
return restrictions;
}
public void setRestrictions(List<String> restrictions)
{
this.restrictions = restrictions;
}
public String getOrder()
{
return order;
}
public void setOrder(String order)
{
this.order = order;
}
}
More information about the jboss-cvs-commits
mailing list