[jboss-user] [JBoss Seam] - 2.0.0BETA1 jboss-seam-ui.jar doesn't match source
wiberto
do-not-reply at jboss.com
Fri Aug 10 01:44:36 EDT 2007
I was debugging some code and the debugger couldn't match the line, when I checked the source for EntityConverter I saw that the source and what's in the jar is not the same. This is from the jar which I decompiled:
| public class EntityConverter
| implements Converter, Serializable
| {
|
| private org.jboss.seam.core.Expressions.ValueExpression entityManager;
| private EntityConverterStore entityIdentifierStore;
|
| public EntityConverter()
| {
| }
|
| public void create()
| {
| entityIdentifierStore = EntityConverterStore.instance();
| }
|
| private void init()
| {
| if(getEntityManager() != null)
| {
| entityIdentifierStore.setEntityManager(getEntityManager());
| }
| }
|
| public String getAsString(FacesContext facesContext, UIComponent cmp, Object value)
| throws ConverterException
| {
| init();
| if(value == null)
| {
| return null;
| }
| if(value instanceof String)
| {
| return (String)value;
| } else
| {
| return entityIdentifierStore.put(value).toString();
| }
| }
|
| public Object getAsObject(FacesContext facesContext, UIComponent cmp, String value)
| throws ConverterException
| {
| init();
| if(value == null)
| {
| return null;
| } else
| {
| return entityIdentifierStore.get(new Integer(value));
| }
| }
|
| public void setEntityManager(org.jboss.seam.core.Expressions.ValueExpression entityManager)
| {
| this.entityManager = entityManager;
| }
|
| private EntityManager getEntityManager()
| {
| return entityManager != null ? (EntityManager)entityManager.getValue() : null;
| }
| }
|
And from the src folder of 2.0.0:
| package org.jboss.seam.ui.converter;
|
| import static org.jboss.seam.ScopeType.CONVERSATION;
| import static org.jboss.seam.annotations.Install.BUILT_IN;
|
| import java.io.Serializable;
|
| import javax.faces.component.UIComponent;
| import javax.faces.context.FacesContext;
| import javax.faces.convert.ConverterException;
| import javax.persistence.EntityManager;
|
| import org.jboss.seam.annotations.Create;
| import org.jboss.seam.annotations.Install;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Role;
| import org.jboss.seam.annotations.Scope;
| import org.jboss.seam.annotations.Transactional;
| import org.jboss.seam.annotations.intercept.BypassInterceptors;
| import org.jboss.seam.annotations.faces.Converter;
| import org.jboss.seam.core.Expressions.ValueExpression;
|
| /**
| * Allows conversion of an entity to/from a key which can be written to a page.
| *
| * Any annotated Entity will work, or any entity if a PersistenceProvider for your ORM exists
| */
| @Name("org.jboss.seam.ui.entityConverter")
| @Role(name="org.jboss.seam.ui.EntityConverter")
| @Scope(CONVERSATION)
| @Install(precedence = BUILT_IN)
| @Converter
| @BypassInterceptors
| public class EntityConverter implements
| javax.faces.convert.Converter, Serializable
| {
|
| private ValueExpression<EntityManager> entityManager;
| private EntityConverterStore entityIdentifierStore;
|
| @Create
| public void create()
| {
| entityIdentifierStore = EntityConverterStore.instance();
|
| }
|
| private void init()
| {
| if (getEntityManager() != null)
| {
| entityIdentifierStore.setEntityManager(getEntityManager());
| }
| }
|
| @SuppressWarnings("unchecked")
| @Transactional
| public String getAsString(FacesContext facesContext, UIComponent cmp, Object value) throws ConverterException
| {
| init();
| if (value == null)
| {
| return null;
| }
| if (value instanceof String)
| {
| return (String) value;
| }
| return entityIdentifierStore.put(value).toString();
| }
|
|
| @Transactional
| public Object getAsObject(FacesContext facesContext, UIComponent cmp, String value) throws ConverterException
| {
| init();
| if (value == null)
| {
| return null;
| }
| return entityIdentifierStore.get(new Integer(value));
| }
|
| public void setEntityManager(ValueExpression<EntityManager> entityManager)
| {
| this.entityManager = entityManager;
| }
|
| private EntityManager getEntityManager()
| {
| return entityManager == null ?
| null : entityManager.getValue();
| }
| }
|
I checked the 1.2.1GA source and it's not the same, so it's not an old class :)
| package org.jboss.seam.ui;
|
| import static javax.faces.application.FacesMessage.SEVERITY_ERROR;
| import static org.jboss.seam.annotations.Install.BUILT_IN;
| import static org.jboss.seam.InterceptionType.NEVER;
|
| import java.io.Serializable;
| import java.lang.reflect.Field;
| import java.lang.reflect.Method;
| import java.util.List;
|
| import javax.faces.component.UIComponent;
| import javax.faces.context.FacesContext;
| import javax.faces.convert.ConverterException;
| import javax.persistence.Entity;
| import javax.persistence.EntityManager;
| import javax.persistence.Id;
|
| import org.jboss.seam.Component;
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.annotations.Install;
| import org.jboss.seam.annotations.Intercept;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Scope;
| import org.jboss.seam.annotations.Transactional;
| import org.jboss.seam.annotations.jsf.Converter;
| import org.jboss.seam.core.FacesMessages;
| import org.jboss.seam.core.Expressions.ValueBinding;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.log.Logging;
| import org.jboss.seam.util.Reflections;
|
| /**
| * This implementation of the EntityConverter is suitable for any Entity which
| * uses annotations
| *
| *
| */
| @Name("org.jboss.seam.ui.entityConverter")
| @Scope(ScopeType.CONVERSATION)
| @Install(precedence = BUILT_IN)
| @Converter
| @Intercept(NEVER)
| public class EntityConverter implements
| javax.faces.convert.Converter, Serializable
| {
|
| private ValueBinding<EntityManager> entityManager;
|
| private Log log = Logging.getLog(EntityConverter.class);
|
| private String errorMessage = "Error selecting object";
|
| public void setEntityManager(ValueBinding<EntityManager> entityManager)
| {
| this.entityManager = entityManager;
| }
|
| private EntityManager getEntityManager() {
| if (entityManager==null)
| {
| return (EntityManager) Component.getInstance( "entityManager" );
| }
| else
| {
| return entityManager.getValue();
| }
| }
|
| protected void errorGettingIdMessage(UIComponent cmp, FacesContext facesContext, Object entity)
| {
| log.error("@Id annotation not on #0", entity.getClass());
| throw new ConverterException(FacesMessages.createFacesMessage(SEVERITY_ERROR, getErrorMessageKey(), getErrorMessage()));
| }
|
| protected String getErrorMessage()
| {
| return errorMessage;
| }
|
| protected String getErrorMessageKey()
| {
| return getEntityConverterKeyPrefix() + "idNotFound";
| }
|
| protected void invalidSelectionMessage(Class clazz, Object id)
| {
| log.error("Cannot load entity (#0 with id #1) from persistence context", clazz.getName(), id);
| throw new ConverterException(FacesMessages.createFacesMessage(SEVERITY_ERROR, getErrorMessageKey(), getErrorMessage()));
| }
|
| protected void entityManagerNotFoundMessage()
| {
| log.error("Entity Manager not found");
| throw new ConverterException(FacesMessages.createFacesMessage(SEVERITY_ERROR, getErrorMessageKey(), getErrorMessage()));
| }
|
| protected String getEntityConverterKeyPrefix()
| {
| return "org.jboss.seam.ui.entityConverter.";
| }
|
| /**
| * @param entity
| * The entity to use
| * @param cmp
| * The UIComponent this converter is attached to
| * @param facesContext
| * The current facesContext
| * @return The ID of the entity as a string or null if unable to determine it
| */
| protected Object getIdFromEntity(UIComponent cmp, FacesContext facesContext,
| Object entity, Class entityClass)
| {
| Object id = null;
| List<Field> fields = Reflections.getFields(entityClass, Id.class);
| if (fields.size() == 1)
| {
| Field field = fields.get(0);
| boolean accessible = field.isAccessible();
| field.setAccessible(true);
|
| try {
| id = Reflections.get(field, entity);
| }
| catch (Exception e)
| {
| errorGettingIdMessage(cmp, facesContext, entity);
| }
| finally
| {
| field.setAccessible(accessible);
| }
| }
| else
| {
| List<Method> methods = Reflections.getGetterMethods(entityClass, Id.class);
| if (methods.size() == 1)
| {
| try
| {
| id = Reflections.invoke(methods.get(0), entity, new Object[0]);
| }
| catch (Exception e)
| {
| errorGettingIdMessage(cmp, facesContext, entity);
| }
| }
| }
| if (id == null)
| {
| return NoSelectionConverter.NO_SELECTION_VALUE;
| }
| else
| {
| return id;
| }
| }
|
| @SuppressWarnings("unchecked")
| @Transactional
| public String getAsString(FacesContext facesContext, UIComponent cmp, Object value) throws ConverterException
| {
|
| if (value == null)
| {
| return null;
| }
| if (value instanceof String)
| {
| return (String) value;
| }
| Class entityClass = deproxy(value.getClass());
| return EntityConverterStore.instance().put(entityClass, getIdFromEntity(cmp, facesContext, value, entityClass)).toString();
| }
|
| // Hibernate Lazy proxies don't copy annotations to proxied methods - why?
| private Class deproxy(Class clazz)
| {
| if (Object.class.equals(clazz) || clazz.isAnnotationPresent(Entity.class))
| {
| return clazz;
| }
| else
| {
| return deproxy(clazz.getSuperclass());
| }
| }
|
| @Transactional
| public Object getAsObject(FacesContext facesContext, UIComponent cmp, String value) throws ConverterException
| {
| if (value == null)
| {
| return null;
| }
| Integer key = new Integer(value);
| Class clazz = EntityConverterStore.instance().getClass(key);
| Object id = EntityConverterStore.instance().getId(key);
| return loadEntityFromPersistenceContext(clazz, id);
| }
|
| /**
| * Retrieve the Entity from the PersistenceContext
| *
| * @param clazz
| * The class of the entity to load
| * @param id
| * The id of the entity to load
| * @return The entity, null if not found
| */
| @SuppressWarnings("unchecked")
| protected Object loadEntityFromPersistenceContext(Class clazz, Object id)
| {
| if (id == null || clazz == null)
| {
| return null;
| }
| Object entity = null;
| if (getEntityManager() == null)
| {
| entityManagerNotFoundMessage();
| }
| entity = getEntityManager().find(clazz, id);
| if (entity == null)
| {
| invalidSelectionMessage(clazz, id);
| return null;
| }
| else
| {
| return entity;
| }
| }
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4072830#4072830
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4072830
More information about the jboss-user
mailing list