Subversion Repositories bacoAlunos

Rev

Rev 1312 | Rev 1510 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.domain.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.exception.GenericJDBCException;
import org.hibernate.sql.JoinFragment;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.utils.DatesUtils;

import java.util.List;

import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.or;

/**
 * @author Jorge Machado
 * @date 28/Fev/2008
 * @time 2:51:06
 * @see pt.estgp.estgweb.domain.dao.impl
 */

public class TeacherDaoImpl extends TeacherDao
{
    private TeacherDaoImpl(){}

//    protected Class getReferenceClass() {
//        return TeacherImpl.class;
//    }

    public static TeacherDaoImpl getInstance()
    {
        if (myInstance == null)
            myInstance = new TeacherDaoImpl();
        return (TeacherDaoImpl) myInstance;
    }

    public Teacher loadBySigesCode(int sigesCode)
    {
        try
        {
            return (Teacher) createCriteria().add(eq("sigesCode",sigesCode)).uniqueResult();
        }
        catch(GenericJDBCException e)
        {
            throw e;
        }
    }

    public List<User> loadByAreaWithUnitsInYear(1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String year)
    {
        try
        {
            Criteria c = createCriteria();
            c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            if(area != null && area.trim().length()>0)
                c.add(eq("mainArea",area));
            c.createAlias("teachedUnits","t", JoinFragment.INNER_JOIN).add(eq("t.importYear",year));
            return c.addOrder(Order.asc("name")).list();
        }
        catch(GenericJDBCException e)
        {
            throw e;
        }
    }

    public List<User> loadByAreaWithUnitsInLast3Years(1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String year)
    {
        try
        {

            1.5.0/docs/api/java/lang/String.html">String lastYear = DatesUtils.getPreviousImportYear(year);
            1.5.0/docs/api/java/lang/String.html">String twoYearsAgo = DatesUtils.getPreviousImportYear(lastYear);

            1.5.0/docs/api/java/lang/System.html">System.out.println(lastYear);
            1.5.0/docs/api/java/lang/System.html">System.out.println(twoYearsAgo);
            Criteria c = createCriteria();
            c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            if(area != null && area.trim().length()>0)
                c.add(eq("mainArea",area));
            c.createAlias("teachedUnits","t", JoinFragment.INNER_JOIN).add(or(eq("t.importYear",year),or(eq("t.importYear",lastYear),eq("t.importYear",twoYearsAgo))));
            return c.addOrder(Order.asc("name")).list();
        }
        catch(GenericJDBCException e)
        {
            throw e;
        }
    }

    public Teacher loadByBi(1.5.0/docs/api/java/lang/String.html">String bi)
    {
        return (Teacher) createCriteria().add(eq("bi",bi)).uniqueResult();
    }


    public List<Teacher> findByEmail(1.5.0/docs/api/java/lang/String.html">String email)
    {
        return createCriteria().add(or(or(or(eq("email",email),eq("outEmail",email)),eq("gmail",email)),eq("msn",email))).addOrder(Order.asc("name")).list();
    }

    // Duarte Santos
    public List<Teacher> loadByCourseUnit(long courseUnitId)
    {
        return createCriteria()
                .createAlias("teachedUnits", "tu")
                .add(eq("tu.id", courseUnitId))
                .list();
    }

    public long countTotalFromSubscribedUnits(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String semester)
    {
        Criteria c = createCriteria()
                        .createAlias("teachedUnits","tu")
                        .add(eq("tu.importYear",importYear))
                        .add(eq("tu.semestre",semester))
                        .setProjection(Projections.projectionList()
                            .add(Projections.rowCount())
                        );
       return ((1.5.0/docs/api/java/lang/Integer.html">Integer) c.uniqueResult()).longValue();
    }

    public List<Integer> findAllSigesCodesYear(1.5.0/docs/api/java/lang/String.html">String year, int institutionCode) {

            return createCriteria().
                    setProjection(Projections.distinct(Projections.property("sigesCode")))
                    .createAlias("teachedUnits","tu")
                    .add(eq("tu.importYear",year))
                    .add(eq("tu.institutionCode",""+institutionCode)).list();
    }
}