package pt.estgp.estgweb.domain.dao.impl;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
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 static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(TeacherDaoImpl.
class);
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
<Long
> loadByAreaWithUnitsInLast3Years
( 1.5.0/docs/api/java/lang/String.html">String importYear
)
{
try
{
1.5.0/docs/api/java/lang/String.html">String lastYear = DatesUtils.
getPreviousImportYear(importYear
);
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
);
1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.
getCurrentSession().
createQuery(
"select distinct t.id from " + Teacher.
class.
getName() +
" t " +
"join t.teachedUnits tu " +
"where tu.importYear = :importYear or " +
"tu.importYear = :lastYear or " +
"tu.importYear = :twoYearsAgo " +
"order by t.name");
q.
setString("importYear",importYear
);
q.
setString("lastYear",lastYear
);
q.
setString("twoYearsAgo",twoYearsAgo
);
return q.
list();
}
catch(GenericJDBCException e
)
{
logger.
error(e,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();
}
public List
<Integer
> findAllSigesCodesYear
(1.5.0/docs/api/java/lang/String.html">String year
) {
return createCriteria
().
setProjection(Projections.
distinct(Projections.
property("sigesCode")))
.
createAlias("teachedUnits",
"tu")
.
add(eq
("tu.importYear",year
))
.
list();
}
}