package org.jboss.seam.trinidad; import static org.jboss.seam.ScopeType.PAGE; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import org.jboss.seam.Component; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Transactional; import org.jboss.seam.core.AbstractMutable; import org.jboss.seam.framework.EntityIdentifier; /** * EntityIdentifier manager for EntityCollectionModel * @author pmuir * */ @Name("org.jboss.seam.trinidad.entityKeyManager") @Scope(PAGE) @BypassInterceptors @Install(precedence=BUILT_IN) public class EntityKeyManager extends AbstractMutable { private List<EntityIdentifier> rows = new ArrayList<EntityIdentifier>(); public static EntityKeyManager instance() { return (EntityKeyManager) Component.getInstance(EntityKeyManager.class); } @Transactional public int getIndex(Integer key, List wrappedList, EntityManager entityManager) { Object entity = rows.get(key).find(entityManager); int index = wrappedList.indexOf(entity); return index; } @Transactional public Object getKey(int rowIndex, List wrappedList, EntityManager entityManager) { EntityIdentifier key = new EntityIdentifier(wrappedList.get(rowIndex), entityManager); if (!rows.contains(key)) { rows.add(key); setDirty(); } return rows.indexOf(key); } }