package com.anjlab.ping.services.dao.impl; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import org.apache.tapestry5.ioc.annotations.Inject; import com.anjlab.ping.entities.Account; import com.anjlab.ping.services.dao.AccountDAO; @SuppressWarnings("unchecked") public class AccountDAOImpl implements AccountDAO { @Inject private EntityManager em; @Override public Account getAccount(String email) { if (email != null) { email = email.toLowerCase(); } Account result = findByEmail(email); if (result == null) { result = createAccount(email); } return result; } private Account findByEmail(String email) { Query q = em.createQuery("SELECT a FROM Account a WHERE a.email = :email"). setParameter("email", email).setMaxResults(1); List<Account> result = q.getResultList(); return result.isEmpty() ? null : result.get(0); } private Account createAccount(String email) { Account account; account = new Account(); account.setEmail(email); Date now = new Date(); account.setCreationDate(now); account.setLastVisitDate(now); account.setDefaultQuotas(); em.persist(account); return account; } @Override public Account find(Long id) { return em.find(Account.class, id); } @Override public void update(Account account) { em.merge(account); } @Override public void delete(Long id) { Account account = find(id); em.remove(account); } @Override public List<Account> getAll() { Query q = em.createQuery("SELECT FROM Account"); return q.getResultList(); } }