package org.jboss.seam.example.seamspace; import static org.jboss.seam.ScopeType.CONVERSATION; import static org.jboss.seam.ScopeType.EVENT; import java.util.List; import java.util.Random; import javax.ejb.Remove; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Factory; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.web.RequestParameter; import org.jboss.seam.annotations.Scope; @Name("profile") @Scope(EVENT) public class ProfileAction { @RequestParameter private String name; @In(required = false) @Out(required = false, scope = CONVERSATION) private Member selectedMember; @In(required = false) private Member authenticatedMember; @Out(required = false) List<Member> newMembers; @Out(required = false) List<MemberBlog> memberBlogs; @In private EntityManager entityManager; @Factory("selectedMember") public void display() { if (name == null && authenticatedMember != null) { selectedMember = (Member) entityManager.find(Member.class, authenticatedMember.getMemberId()); } else if (name != null) { try { selectedMember = (Member) entityManager.createQuery( "from Member where memberName = :memberName") .setParameter("memberName", name) .getSingleResult(); } catch (NoResultException ex) { } } } /** * Returns the 5 latest blog entries for a member */ @SuppressWarnings("unchecked") public List<MemberBlog> getLatestBlogs() { return entityManager.createQuery( "from MemberBlog b where b.member = :member order by b.entryDate desc") .setParameter("member", selectedMember) .setMaxResults(5) .getResultList(); } /** * Used to read all blog entries for a member */ @SuppressWarnings("unchecked") @Factory("memberBlogs") public void getMemberBlogs() { if (name == null && authenticatedMember != null) { name = authenticatedMember.getMemberName(); } memberBlogs = entityManager.createQuery( "from MemberBlog b where b.member.memberName = :memberName order by b.entryDate desc") .setParameter("memberName", name) .getResultList(); } @SuppressWarnings("unchecked") @Factory("newMembers") public void newMembers() { newMembers = entityManager.createQuery( "from Member order by memberSince desc") .setMaxResults(10) .getResultList(); // Randomly select 3 of the latest 10 members Random rnd = new Random(System.currentTimeMillis()); while (newMembers.size() > 3) { newMembers.remove(rnd.nextInt(newMembers.size())); } } @SuppressWarnings("unchecked") public List<Member> getFriends() { return entityManager.createQuery( "select f.friend from MemberFriend f where f.member = :member and authorized = true") .setParameter("member", selectedMember) .getResultList(); } @SuppressWarnings("unchecked") public List<FriendComment> getFriendComments() { return entityManager.createQuery( "from FriendComment c where c.member = :member order by commentDate desc") .setParameter("member", selectedMember) .getResultList(); } @Remove @Destroy public void destroy() { } }