1 package ejava.examples.asyncmarket.ejb; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.List; 6 7 import javax.annotation.PostConstruct; 8 import javax.ejb.Stateless; 9 import javax.ejb.TransactionAttribute; 10 import javax.ejb.TransactionAttributeType; 11 import javax.persistence.EntityManager; 12 import javax.persistence.PersistenceContext; 13 14 import org.apache.commons.logging.Log; 15 import org.apache.commons.logging.LogFactory; 16 17 import ejava.examples.asyncmarket.MarketException; 18 import ejava.examples.asyncmarket.bo.AuctionItem; 19 import ejava.examples.asyncmarket.bo.Bid; 20 import ejava.examples.asyncmarket.bo.Person; 21 import ejava.examples.asyncmarket.dao.PersonDAO; 22 import ejava.examples.asyncmarket.jpa.JPAPersonDAO; 23 24 @Stateless 25 @TransactionAttribute(TransactionAttributeType.REQUIRED) 26 public class UserMgmtEJB implements UserMgmtRemote, UserMgmtLocal { 27 private static final Log log = LogFactory.getLog(UserMgmtEJB.class); 28 @PersistenceContext(unitName="asyncMarket") 29 private EntityManager em; 30 31 private PersonDAO userDAO; 32 33 @PostConstruct 34 public void init() { 35 log.info("*** UserMgmtEJB init() ***"); 36 log.debug("em=" + em); 37 38 userDAO = new JPAPersonDAO(); 39 ((JPAPersonDAO)userDAO).setEntityManager(em); 40 } 41 42 public long createUser(String userId, String name) throws MarketException { 43 try { 44 Person user = new Person(); 45 user.setName(name); 46 user.setUserId(userId); 47 return userDAO.createPerson(user).getId(); 48 } 49 catch (Exception ex) { 50 log.error("error creating user", ex); 51 throw new MarketException("error creating user:" + ex); 52 } 53 } 54 55 public List<Person> getUsers(int index, int count) throws MarketException { 56 try { 57 return makeDTO(userDAO.getPeople(index, count)); 58 } 59 catch (Exception ex) { 60 log.error("error getting users", ex); 61 throw new MarketException("error getting users:" + ex); 62 } 63 } 64 65 public Person getUser(long id) throws MarketException { 66 try { 67 return makeDTO(userDAO.getPerson(id)); 68 } 69 catch (Exception ex) { 70 log.error("error getting user", ex); 71 throw new MarketException("error getting user:" + ex); 72 } 73 } 74 75 public Person getUserByUserId(String userId) throws MarketException { 76 try { 77 Person user = userDAO.getPersonByUserId(userId); 78 log.debug("getUserByUserId(" + userId + ")=" + user); 79 return makeDTO(user); 80 } 81 catch (Exception ex) { 82 log.error("error getting user by userId", ex); 83 throw new MarketException("error getting user by userId:" + ex); 84 } 85 } 86 87 public void removeUser(String userId) throws MarketException { 88 try { 89 Person user = userDAO.getPersonByUserId(userId); 90 userDAO.removePerson(user); 91 } 92 catch (Exception ex) { 93 log.error("error getting user by userId", ex); 94 throw new MarketException("error getting user by userId:" + ex); 95 } 96 } 97 98 private List<Person> makeDTO(List<Person> people) { 99 List<Person> dtos = new ArrayList<Person>(); 100 for (Person person : people) { 101 dtos.add(makeDTO(person)); 102 } 103 return dtos; 104 } 105 106 private Person makeDTO(Person user) { 107 Person dto = new Person(user.getId()); 108 dto.setUserId(user.getUserId()); 109 dto.setName(user.getName()); 110 dto.setVersion(user.getVersion()); 111 dto.setItems(makeDTO(user.getItems(), dto)); 112 return dto; 113 } 114 115 private Collection<AuctionItem> makeDTO( 116 Collection<AuctionItem> items, Person owner) { 117 Collection<AuctionItem> dtos = new ArrayList<AuctionItem>(); 118 for(AuctionItem item : items) { 119 AuctionItem dto = new AuctionItem(item.getId()); 120 dto.setVersion(item.getVersion()); 121 dto.setName(item.getName()); 122 dto.setOwner(owner); 123 owner.getItems().add(dto); 124 dto.setMinBid(item.getMinBid()); 125 dto.setProductId(item.getProductId()); 126 dto.setStartDate(item.getStartDate()); 127 dto.setEndDate(item.getEndDate()); 128 dto.setBids(makeDTO(item.getBids(), dto)); 129 if (item.getWinningBid() != null) { 130 for(Bid bid : dto.getBids()) { 131 if (bid.getId() == item.getWinningBid().getId()) { 132 dto.setWinningBid(bid); 133 } 134 } 135 } 136 dto.setClosed(item.isClosed()); 137 dtos.add(dto); 138 } 139 return dtos; 140 } 141 142 private List<Bid> makeDTO(List<Bid> bids, AuctionItem item) { 143 List<Bid> dtos = new ArrayList<Bid>(); 144 for(Bid bid : bids) { 145 dtos.add(makeDTO(bid, item)); 146 } 147 return dtos; 148 } 149 150 private Bid makeDTO(Bid bid, AuctionItem item) { 151 Bid dto = new Bid(bid.getId()); 152 dto.setAmount(bid.getAmount()); 153 dto.setItem(item); 154 item.getBids().add(dto); 155 dto.setBidder(makeDTO(bid.getBidder(), dto)); 156 return dto; 157 } 158 159 private Person makeDTO(Person bidder, Bid bid) { 160 Person dto = new Person(bidder.getId()); 161 dto.setUserId(bidder.getUserId()); 162 dto.setVersion(bidder.getVersion()); 163 bid.setBidder(dto); 164 dto.getBids().add(bid); 165 return dto; 166 } 167 }