Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package it.unitn.elisco.dao; import it.unitn.elisco.bean.ajax.PersonBasics; import it.unitn.elisco.bean.hibernate.Person; import it.unitn.elisco.bean.hibernate.Student; import it.unitn.elisco.utils.HibernateUtil; import it.unitn.elisco.utils.Utilities; import java.util.Calendar; import java.util.List; import org.hibernate.*; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.transform.Transformers; /** * * @author Andrea Marcolin */ public class StudentDAO extends DAO<Student, Long> { // Public methods public void insertSignupRequest(String email, String password, String name, String surname, String confirmation_token, String student_number) { Calendar expiration = Calendar.getInstance(); expiration.add(Calendar.DATE, 1); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); insertStudent(session, email, password, name, surname, confirmation_token, student_number, expiration); tx.commit(); session.close(); } public boolean confirmSignupRequest(String token) { boolean res; Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); Student student = findUnconfirmedStudent(session, token); if (student != null) { student.setConfirmation_token(null); student.setExpiration(null); update(session, student); res = true; } else { res = false; } tx.commit(); session.close(); return res; } public Student loginStudent(String email, String password) { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); Student res = findStudent(s, email); tx.commit(); s.close(); // To allow login, admin with such email should exist, password should match and user should have confirmed account return (res != null && Utilities.checkPassword(password, res) && res.getConfirmation_token() == null) ? res : null; } public Student getStudent(String email) { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); Student res = findStudent(s, email); tx.commit(); s.close(); return res; } public Student getStudent(Long id) { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); Student res = getByPrimarykey(s, Student.class, id); tx.commit(); s.close(); return res; } public List<Student> getAllStudents() { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); List<Student> res = s.createCriteria(Student.class).list(); for (Student student : res) { Hibernate.initialize(student.getCourses()); } tx.commit(); s.close(); return res; } public List<PersonBasics> findStudents(String emailLike) { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); // Fetch students: // - which are confirmed (confirmation_token is null) // - which email begins with the specified query (optional, otherwise return all students) Criteria criteria = s.createCriteria(Student.class); criteria.add(Restrictions.isNull("confirmation_token")); if (emailLike != null && emailLike != "") { criteria.add(Restrictions.like("email", emailLike, MatchMode.START)); } // Then return results as PersonBasics objects criteria.setProjection(Projections.projectionList().add(Projections.property("name"), "name") .add(Projections.property("surname"), "surname").add(Projections.property("email"), "email")); criteria.setResultTransformer(Transformers.aliasToBean(PersonBasics.class)); List<PersonBasics> res = criteria.list(); tx.commit(); s.close(); return res; } public List<String> getStudentEmails() { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); // Fetch email addresses of all students Criteria criteria = s.createCriteria(Student.class); criteria.setProjection(Projections.property("email")); List<String> res = criteria.list(); tx.commit(); s.close(); return res; } public void deleteUnconfirmedStudent(String token) { Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); // Find the student by confirmation token Student unconfirmedStudent = findUnconfirmedStudent(s, token); // If a student is found, it means that the account was not confirmed by the user who requested the subscription, so we delete it if (unconfirmedStudent != null) { delete(s, unconfirmedStudent); } tx.commit(); s.close(); } // Methods visible to other DAOs protected void insertStudent(Session s, String email, String password, String name, String surname, String confirmation_token, String student_number, Calendar expiration) { Student user = new Student(); user.setEmail(email); user.setPassword(password); user.setName(name); user.setSurname(surname); user.setConfirmation_token(confirmation_token); user.setStudent_number(student_number); user.setExpiration(expiration); insert(s, user); } // Auxiliary methods private Student findUnconfirmedStudent(Session s, String token) { Criteria criteria = s.createCriteria(Student.class).add(Restrictions.eq("confirmation_token", token)); return (Student) criteria.uniqueResult(); } private Student findStudent(Session s, String email) { Criteria criteria = s.createCriteria(Student.class).add(Restrictions.eq("email", email)); return (Student) criteria.uniqueResult(); } }