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
> findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit
(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
("showStudiesPlan",
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();
}
}