package org.jboss.seam.example.booking;
import static org.jboss.seam.ScopeType.SESSION;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.log.Log;
@Stateless
@Name("authenticator")
public class AuthenticatorAction implements Authenticator, Serializable
{
@Logger private Log log;
@PersistenceContext EntityManager em;
@In(required = false)
@Out(required = false, scope = SESSION)
private User user;
public boolean authenticate()
{
log.info("Authenticating #{identity.username}");
List results = em.createQuery(
"select u from User u where u.username = #{identity.username} and u.password = #{identity.password}")
.getResultList();
if ( results.size()==0 )
{
return false;
}
else
{
user = (User) results.get(0);
return true;
}
}
public boolean isUsernameAvailable()
{
// check if user is available in context
// we are proving that bijection is working on inter-EJB calls
if (user == null)
{
throw new IllegalStateException("No user available in context.");
}
log.info("Checking if username is available: {0}", user.getUsername());
List results = em.createQuery(
"select u.username from User u where u.username = :username")
.setParameter("username", user.getUsername())
.getResultList();
if ( results.size() == 0 )
{
return true;
}
else
{
return false;
}
}
}