it.unitn.elisco.dao.StudentDAO.java Source code

Java tutorial

Introduction

Here is the source code for it.unitn.elisco.dao.StudentDAO.java

Source

/*
 * 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();
    }

}