@Override public Subscription findMailboxSubscriptionForUser(String user, String mailbox) throws SubscriptionException { try { return (Subscription) getEntityManager().createNamedQuery("findFindMailboxSubscriptionForUser") .setParameter("userParam", user).setParameter("mailboxParam", mailbox).getSingleResult(); } catch (NoResultException e) { return null; } catch (PersistenceException e) { throw new SubscriptionException(e); } }
@Override @SuppressWarnings("unchecked") public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException { try { return (List<Subscription>) getEntityManager().createNamedQuery("findSubscriptionsForUser").setParameter("userParam", user).getResultList(); } catch (PersistenceException e) { throw new SubscriptionException(e); } }
@Override public void delete(Subscription subscription) throws SubscriptionException { try { getEntityManager().remove(subscription); } catch (PersistenceException e) { throw new SubscriptionException(e); } } }
@Override public void save(Subscription subscription) throws SubscriptionException { try { getEntityManager().persist(subscription); } catch (PersistenceException e) { throw new SubscriptionException(e); } }
@Override public void unsubscribe(final MailboxSession session, final String mailbox) throws SubscriptionException { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { mapper.execute(Mapper.toTransaction(() -> { Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); if (subscription != null) { mapper.delete(subscription); } })); } catch (MailboxException e) { throw new SubscriptionException(e); } }
@Override public void subscribe(final MailboxSession session, final String mailbox) throws SubscriptionException { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { mapper.execute(Mapper.toTransaction(() -> { Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); if (subscription == null) { Subscription newSubscription = createSubscription(session, mailbox); mapper.save(newSubscription); } })); } catch (MailboxException e) { throw new SubscriptionException(e); } }