package org.jboss.seam.ui; 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 org.jboss.seam.Component; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.AbstractMutable; import org.jboss.seam.framework.Identifier; /** * Page scoped store for entity identifiers used by the EntityConverter. * * By default a list is used and the key returned is the list index. The key * used can be customised by overriding this component and implementing the * get and put methods * * @author Pete Muir * */ @Name("org.jboss.seam.ui.entityIdentifierStore") @Install(precedence=BUILT_IN) @Scope(PAGE) public class EntityIdentifierStore extends AbstractMutable { private List<Identifier> store; @Create public void create() { store = new ArrayList<Identifier>(); } public Identifier get(String key) { try { return store.get(new Integer(key)); } catch (IndexOutOfBoundsException e) { return null; } } public String put(Identifier identifier, Object entity) { if (!store.contains(identifier)) { store.add(identifier); setDirty(); } return ((Integer) store.indexOf(identifier)).toString(); } public static EntityIdentifierStore instance() { if (!Contexts.isPageContextActive()) { throw new IllegalArgumentException("Page scope not active"); } return (EntityIdentifierStore) Component.getInstance(EntityIdentifierStore.class, PAGE); } }