Subversion Repositories bacoAlunos

Rev

Rev 1399 | Rev 1521 | 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.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.Course;
import pt.estgp.estgweb.domain.CourseImpl;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.CourseUnitTurma;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;

import java.util.List;

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

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

public class CourseDaoImpl extends CourseDao
{
    public static CourseDaoImpl getInstance()
    {
        if (myInstance == null)
            myInstance = new CourseDaoImpl();
        return (CourseDaoImpl) myInstance;
    }

    public CourseImpl findCourseByCode(1.5.0/docs/api/java/lang/String.html">String code)
    {
        return (CourseImpl) createCriteria().add(eq("code", code)).uniqueResult();
    }

    public CourseImpl findCourseByCodeAndYear(1.5.0/docs/api/java/lang/String.html">String code, 1.5.0/docs/api/java/lang/String.html">String year)
    {
        return (CourseImpl) createCriteria().add(eq("code", code)).add(eq("importYear", year)).uniqueResult();
    }


    public int countCoursesActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
    {
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "description");
        return createCriteria()
                .add(c)
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
                .list().size();
    }

    public int countCoursesUnits(1.5.0/docs/api/java/lang/String.html">String importYear,long courseId)
    {
  /*      return createCriteria()
                .createAlias("courseUnits", "c")
                .setProjection(Projections.property("c.id"))
                .add(eq("c.importYear", importYear))
                .add(eq("id", courseId))
                .list().size();
*/

        return (1.5.0/docs/api/java/lang/Integer.html">Integer) createCriteria(CourseUnit.class)
                .setProjection(Projections.rowCount())
                .add(eq("importYear",importYear))
                .add(eq("course.id",courseId))
                .uniqueResult();
    }

    public int countCoursesUnits(1.5.0/docs/api/java/lang/String.html">String importYear,long courseId,1.5.0/docs/api/java/lang/String.html">String semestre)
    {
  /*      return createCriteria()
                .createAlias("courseUnits", "c")
                .setProjection(Projections.property("c.id"))
                .add(eq("c.importYear", importYear))
                .add(eq("id", courseId))
                .list().size();
*/

        return (1.5.0/docs/api/java/lang/Integer.html">Integer) createCriteria(CourseUnit.class)
                .setProjection(Projections.rowCount())
                .add(eq("importYear",importYear))
                .add(eq("semestre",semestre))
                .add(eq("course.id",courseId))
                .uniqueResult();
    }


    public int countCoursesUnitsTurmas(1.5.0/docs/api/java/lang/String.html">String importYear,long courseId)
    {
        return (1.5.0/docs/api/java/lang/Integer.html">Integer) createCriteria(CourseUnitTurma.class)
                .setProjection(Projections.countDistinct("turma"))
                .createAlias("courseUnit", "courseUnit")
                .createAlias("students", "student")
                .add(eq("courseUnit.importYear",importYear))
                .add(eq("courseUnit.course.id",courseId))
                .uniqueResult();
    }

    public int countCoursesUnitsNot(1.5.0/docs/api/java/lang/String.html">String importYear,long courseId)
    {
        return createCriteria()
                .createAlias("courseUnits", "c")
                .setProjection(Projections.property("c.id"))
                .add(not(eq("c.importYear", importYear)))
                .add(eq("id", courseId))
                .list().size();
    }

    public List<Long> findCoursesUnitsIds(1.5.0/docs/api/java/lang/String.html">String importYear,long courseId)
    {
        return createCriteria()
                .createAlias("courseUnits", "c")
                .setProjection(Projections.property("c.id"))
                .add(eq("id", courseId))
                .add(eq("c.importYear", importYear))
                .addOrder(Order.asc("c.name"))
                .list();
    }

    public List<Long> findCoursesUnitsIds(long courseId)
    {
        return createCriteria()
                .createAlias("courseUnits","c")
                .setProjection(Projections.property("c.id"))
                .add(eq("id", courseId))
                .addOrder(Order.asc("c.importYear"))
                .addOrder(Order.asc("c.name"))
                .list();
    }

    public List<Course> searchActualYear(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int max, int page)
    {
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "name", "description");
        Criteria criteria = createCriteria();
        criteria.add(c)
                .add(eq("importYear", DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear()))
                .addOrder(Order.asc("name"))
                .setMaxResults(max)
                .setFirstResult(page * max);
        return criteria.list();
    }


    public List<Course> findAllOrderByName()
    {
        return createCriteria()
                .addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllImportYearOrderByName(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area)
    {
        Criteria c = createCriteria();
        if (importYear != null && importYear.length() > 0)
        {
            c.add(eq("importYear", importYear));
        }
        if (area != null && area.length() > 0)
        {
            c.add(eq("area", area));
        }
        return c.addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllOrderByName(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return createCriteria()
                .add(eq("cu.importYear", importYear))
                .addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllOrderByNameEvenWithoutCourseUnit(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String type)
    {
        Criteria c = createCriteria();

       /* c.setProjection(Projections.projectionList()
                            .add(Projections.distinct(Projections.id())));*/

        if (importYear != null && importYear.length() > 0)
            c.add(eq("importYear", importYear));
        if (area != null && area.length() > 0)
            c.add(eq("area", area));
        if (type != null && type.length() > 0)
            c.add(eq("degree", type));
        return c.addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllActiveOrderByNameEvenWithoutCourseUnit()
    {
        Criteria c = createCriteria();

         /* c.setProjection(Projections.projectionList()
                              .add(Projections.distinct(Projections.id())));*/

        c.add(eq("status", true));
        return c.addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllActiveOrderByNameEvenWithoutCourseUnit(1.5.0/docs/api/java/lang/String.html">String institutionalCode, 1.5.0/docs/api/java/lang/String.html">String degree)
    {
        Criteria c = createCriteria();

        c.add(eq("status", true));

        if (degree != null && degree.length() > 0)
            c.add(eq("degree", degree));

        if (institutionalCode != null && institutionalCode.length() > 0)
            c.add(eq("institutionalCode", institutionalCode));

        return c.addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllActiveOrderByNameEvenWithoutCourseUnit(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String type)
      {
          Criteria c = createCriteria();

         /* c.setProjection(Projections.projectionList()
                              .add(Projections.distinct(Projections.id())));*/

          if (importYear != null && importYear.length() > 0)
              c.add(eq("status", true));
          if (area != null && area.length() > 0)
              c.add(eq("area", area));
          if (type != null && type.length() > 0)
              c.add(eq("degree", type));
          return c.addOrder(Order.asc("name"))
                  .list();
      }

    public List<Course> findCoursesWithUnitsIn(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return findAllOrderByName(importYear,null,null,null);
    }

    public List<String> loadInstitutionCodes(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return
                createCriteria()
                        .setProjection(Projections
                                .distinct(Projections.projectionList()
                                        .add(Projections.property("institutionCode"))))
                        .add(1.5.0/docs/api/java/beans/Expression.html">Expression.isNotNull("institutionCode"))
                        .list();
    }
    public List<Course> findCoursesWithUnitsIn(1.5.0/docs/api/java/lang/String.html">String importYear,1.5.0/docs/api/java/lang/String.html">String institutionCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
    {
        return findAllOrderByName(importYear,null,null,institutionCode,semestre);
    }
    public List<Course> findCoursesWithUnitsIn(1.5.0/docs/api/java/lang/String.html">String importYear,1.5.0/docs/api/java/lang/String.html">String institutionCode)
    {
        return findAllOrderByName(importYear,null,null,institutionCode);
    }

    public List<Course> findAllOrderByName(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String type)
    {
        return findAllOrderByName(importYear,area,type,null);
    }

    public List<Course> findAllOrderByName(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String type,1.5.0/docs/api/java/lang/String.html">String institutionCode)
    {
        return findAllOrderByName(importYear,area,type,institutionCode,null);
    }
    public List<Course> findAllOrderByName(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area, 1.5.0/docs/api/java/lang/String.html">String type,1.5.0/docs/api/java/lang/String.html">String institutionCode, 1.5.0/docs/api/java/lang/String.html">String semestre)
    {

        1.5.0/docs/api/java/lang/String.html">String query = "select distinct c from c in class Course join c.courseUnits cu where ";
        1.5.0/docs/api/java/lang/String.html">String logic = " ";
        if (importYear != null && importYear.length() > 0)
        {
            query += logic + "cu.importYear = :importYear ";
            logic = " and ";
        }
        if (institutionCode != null && institutionCode.trim().length() > 0)
        {
            query += logic + "c.institutionalCode = :institutionCode ";
            logic = " and ";
        }
        if (area != null && area.length() > 0)
        {
            query += logic + "c.area = :area ";
            logic = " and ";
        }
        if (type != null && type.length() > 0)
        {
            query += logic + "c.degree = :degree ";
            logic = " and ";
        }
        if (semestre != null && semestre.length() > 0)
        {
            query += logic + "cu.semestre = :semestre ";
            logic = " and ";
        }
        query += " order by c.name asc";

        1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession().createQuery(query);
        if (importYear != null && importYear.length() > 0)
        {
            q.setString("importYear",importYear);
        }
        if (institutionCode != null && institutionCode.trim().length() > 0)
        {
            q.setString("institutionCode",institutionCode);
        }
        if (area != null && area.length() > 0)
        {
            q.setString("area",area);
        }
        if (type != null && type.length() > 0)
        {
            q.setString("degree",type);
        }
        if (semestre != null && semestre.length() > 0)
        {
            q.setString("semestre",semestre);
        }
       /* c.setProjection(Projections.projectionList()
                            .add(Projections.distinct(Projections.id())));*/

        return q.list();
    }



    public List<String> loadImportYears()
    {
        1.5.0/docs/api/javax/management/Query.html">Query q = createQuery("select distinct c.importYear from c in class " + CourseUnit.class.getName() + " order by c.importYear desc");
        return q.list();
    }

    public List<Course> loadAllCourses(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return
                createCriteria()
                        .add(eq("importYear", importYear))
                        .list();
    }

    public List<Course> loadCoordinatedCourses(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return
                createCriteria()
                        .add(eq("coordinator.id", teacherId))
                        .add(eq("importYear", importYear))
                        .list();
    }

    public List<Course> loadDirectorCourses(long teacherId, 1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return
                createCriteria()
                        .add(eq("director.id", teacherId))
                        .add(eq("importYear", importYear))
                        .list();
    }

    public List<Course> findAll(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return createCriteria().add(eq("importYear", importYear)).addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findAllStatus(1.5.0/docs/api/java/lang/String.html">String importYear,boolean status)
    {
        return createCriteria()
                .add(eq("importYear", importYear))
                .add(eq("status", status))
                .addOrder(Order.asc("name"))
                .list();
    }

    public List<Course> findActiveCourses(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return findAllStatus(importYear,true);
    }

    public List<Course> findAllNotIn(1.5.0/docs/api/java/lang/String.html">String importYear)
    {
        return createCriteria().add(not(eq("importYear", importYear)))
                .list();
    }

   

     // Duarte Santos
    public List<String> loadAreas()
    {
        return
                createCriteria()
                    .setProjection(Projections
                            .distinct(Projections.projectionList()
                                    .add(Projections.property("area"))))
                    .add(1.5.0/docs/api/java/beans/Expression.html">Expression.isNotNull("area"))
                    .list();
    }


}