package pt.estgp.estgweb.domain.dao.impl;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.GenericUser;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import static org.
hibernate.
criterion.
Restrictions.
*;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.Criteria;
import jomm.dao.impl.AbstractDao;
import jomm.utils.MyCalendar;
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class AnnouncementDaoImpl
extends AnnouncementDao
{
public static AnnouncementDaoImpl getInstance
()
{
if (myInstance ==
null)
myInstance =
new AnnouncementDaoImpl
();
return (AnnouncementDaoImpl
) myInstance
;
}
public List
<Announcement
> findAnnouncements
(int maxAnnouncements,List
<String
> roles
)
{
if(roles ==
null)
{
roles =
new ArrayList
<String
>();
roles.
add("all");
}
Criteria criteria = createCriteria
();
Criterion co =
null;
for(1.5.0/docs/api/java/lang/String.html">String role: roles
)
{
Criterion cor = like
("targetRoles",
"%" + role +
"%");
if(co ==
null)
co = cor
;
else
co = or
(co,cor
);
}
MyCalendar cNow =
new MyCalendar
();
MyCalendar calendarWithOutTime =
new MyCalendar
(cNow.
getYear(),cNow.
getMonth(),cNow.
getDay());
5+0%2Fdocs%2Fapi+Date">Date now = calendarWithOutTime.
getTime();
criteria.
add(co
)
.
add(or
(or
(lt
("startDate",now
),eq
("startDate",now
)),isNull
("startDate")))
.
add(or
(or
(gt
("expireDate",now
),eq
("expireDate",now
)),isNull
("expireDate")))
.
add(eq
("status",
true))
.
setMaxResults(maxAnnouncements
)
.
addOrder(Order.
desc("saveDate"));
return criteria.
list();
}
public List
<Announcement
> findAnnouncements
(int maxAnnouncements,List
<String
> roles,
1.5.0/docs/api/java/lang/String.html">String type
)
{
return findAnnouncements
(0,maxAnnouncements,roles, type
);
}
public List
<Announcement
> findAnnouncements
(int startPage,
int maxAnnouncements,List
<String
> roles,
1.5.0/docs/api/java/lang/String.html">String type
)
{
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria
(maxAnnouncements, roles,type
);
return criteria.
setFirstResult(maxAnnouncements
*startPage
).
list();
}
public int countAnnouncements
(int maxAnnouncements,List
<String
> roles,
1.5.0/docs/api/java/lang/String.html">String type
)
{
Criteria criteria = createMaxAnnouncementsRolesTypeCriteria
(1.5.0/docs/api/java/lang/Integer.html">Integer.
MAX_VALUE, roles,type
);
return criteria.
list().
size();
}
private Criteria createMaxAnnouncementsRolesTypeCriteria
(int maxAnnouncements,List
<String
> roles,
1.5.0/docs/api/java/lang/String.html">String type
)
{
if(roles ==
null)
{
roles =
new ArrayList
<String
>();
roles.
add("all");
}
Criteria criteria = createCriteria
();
Criterion coRole =
null;
for(1.5.0/docs/api/java/lang/String.html">String role: roles
)
{
Criterion cor = like
("targetRoles",
"%" + role +
"%");
if(coRole ==
null)
coRole = cor
;
else
coRole = or
(coRole,cor
);
}
Criterion coType=eq
("type",type
) ;
MyCalendar cNow =
new MyCalendar
();
MyCalendar calendarWithOutTime =
new MyCalendar
(cNow.
getYear(),cNow.
getMonth(),cNow.
getDay());
5+0%2Fdocs%2Fapi+Date">Date now = calendarWithOutTime.
getTime();
criteria.
add(coRole
)
.
add(coType
)
.
add(or
(or
(lt
("startDate",now
),eq
("startDate",now
)),isNull
("startDate")))
.
add(or
(or
(gt
("expireDate",now
),eq
("expireDate",now
)),isNull
("expireDate")))
.
add(eq
("status",
true))
.
setMaxResults(maxAnnouncements
)
.
addOrder(Order.
desc("saveDate"));
return criteria
;
}
public static void main
(1.5.0/docs/api/java/lang/String.html">String[] args
)
{
AbstractDao.
getCurrentSession().
beginTransaction();
List
<String
> roles =
new ArrayList
<String
>();
roles.
add("student");
roles.
add("teacher");
1.5.0/docs/api/java/lang/String.html">String typeNews=
"news";
List
<Announcement
> as =
new AnnouncementDaoImpl
().
findAnnouncements(5,roles,typeNews
);
for(Announcement a : as
)
{
GenericUser us = a.
getOwner();
List
<String
> userRoles=us.
getOwnerRoles();
for(1.5.0/docs/api/java/lang/String.html">String role:userRoles
){
1.5.0/docs/api/java/lang/System.html">System.
out.
println("--->"+role
);
}
1.5.0/docs/api/java/lang/System.html">System.
out.
println(a.
getSaveDate() +
":" + a.
getTitle() +
" " + a.
getOwner().
getName() );
}
AbstractDao.
getCurrentSession().
beginTransaction().
commit();
}
}