package org.societies.useragent.feedback; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.internal.schema.useragent.feedback.UserFeedbackPrivacyNegotiationEvent; import org.societies.api.schema.useragent.feedback.FeedbackStage; import org.societies.useragent.api.feedback.IPrivacyPolicyNegotiationHistoryRepository; import java.util.Date; import java.util.List; @SuppressWarnings("unchecked") public class PrivacyPolicyNegotiationHistoryRepository implements IPrivacyPolicyNegotiationHistoryRepository { private static final Logger log = LoggerFactory.getLogger(PrivacyPolicyNegotiationHistoryRepository.class); private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public List<UserFeedbackPrivacyNegotiationEvent> listPrevious(int howMany) { Session session = sessionFactory.openSession(); try { // TODO: Re-enable requestDate order/filter when requestDate field is available again // Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf ORDER BY uf.requestDate"); Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf"); query.setMaxResults(howMany); return query.list(); } finally { session.close(); } } @Override public List<UserFeedbackPrivacyNegotiationEvent> listSince(Date sinceWhen) { Session session = sessionFactory.openSession(); try { // TODO: Re-enable requestDate order/filter when requestDate field is available again // Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf WHERE uf.requestDate > :date ORDER BY uf.requestDate"); Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf"); // query.setDate("date", sinceWhen); return query.list(); } finally { session.close(); } } @Override public List<UserFeedbackPrivacyNegotiationEvent> listIncomplete() { Session session = sessionFactory.openSession(); try { // TODO: Re-enable requestDate order/filter when requestDate field is available again // Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf WHERE uf.stage != :stage ORDER BY uf.requestDate"); Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf WHERE uf.stage != :stage"); query.setParameter("stage", FeedbackStage.COMPLETED); return query.list(); } finally { session.close(); } } @Override public UserFeedbackPrivacyNegotiationEvent getByRequestId(String requestId) { Session session = sessionFactory.openSession(); try { Query query = session.createQuery("FROM UserFeedbackPrivacyNegotiationEvent uf WHERE uf.requestId = :id"); query.setString("id", requestId); List results = query.list(); if (results.size() == 0) { log.warn("Found no UserFeedbackPrivacyNegotiationEvent with requestId=" + requestId); return null; } return (UserFeedbackPrivacyNegotiationEvent) results.get(0); } finally { session.close(); } } @Override public void insert(UserFeedbackPrivacyNegotiationEvent event) { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); try { session.save(event); transaction.commit(); session.flush(); } catch (RuntimeException ex) { if (transaction != null) transaction.rollback(); throw ex; } finally { session.close(); } } @Override public void updateStage(String requestId, FeedbackStage newStage) { Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); UserFeedbackPrivacyNegotiationEvent item = getByRequestId(requestId); item.setStage(newStage); try { session.update(item); transaction.commit(); session.flush(); } catch (RuntimeException ex) { if (transaction != null) transaction.rollback(); throw ex; } finally { session.close(); } } @Override public int truncate() { Session session = getSessionFactory().openSession(); Transaction transaction = null; int count = -1; try { transaction = session.beginTransaction(); Query query = session.createQuery("delete from UserFeedbackPrivacyNegotiationEvent"); count = query.executeUpdate(); transaction.commit(); session.flush(); } catch (RuntimeException ex) { if (transaction != null) transaction.rollback(); log.error("Error clearing table", ex); throw ex; } finally { session.close(); } return count; } }