package org.jboss.seam.bpm; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.io.Serializable; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.AbstractMutable; /** * Allows the application to specify the jBPM actorId * during the login cycle. * * @author Gavin King */ @Name("org.jboss.seam.bpm.actor") @Scope(ScopeType.SESSION) @BypassInterceptors @Install(dependencies="org.jboss.seam.bpm.jbpm", precedence=BUILT_IN) public class Actor extends AbstractMutable implements Serializable { private static final long serialVersionUID = -6515302276074415520L; private String id; private Set<String> groupActorIds = new HashSet<String>() { @Override public boolean add(String o) { boolean dirty = super.add(o); if (dirty) setDirty(); return dirty; } @Override public void clear() { if (size() > 0) setDirty(); super.clear(); } @Override public boolean remove(Object o) { boolean dirty = super.remove(o); if (dirty) setDirty(); return dirty; } @Override public Iterator<String> iterator() { final Iterator<String> it = super.iterator(); return new Iterator<String>() { public boolean hasNext() { return it.hasNext(); } public String next() { return it.next(); } public void remove() { setDirty(); it.remove(); } }; } }; public String getId() { return id; } public void setId(String id) { setDirty(this.id, id); this.id = id; } public Set<String> getGroupActorIds() { return groupActorIds; } public static Actor instance() { if ( !Contexts.isSessionContextActive() ) { throw new IllegalStateException("No active session context"); } return (Actor) Component.getInstance(Actor.class); } @Override public String toString() { return "Actor(" + id + ")"; } }