package pt.estgp.estgweb.domain.dao.impl;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.BlogImpl;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import java.util.List;
import java.util.Date;
import java.util.ArrayList;
import java.io.Serializable;
import org.hibernate.HibernateException;
import org.hibernate.Criteria;
import static org.
hibernate.
criterion.
Restrictions.
*;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import jomm.dao.DaoException;
/**
* @author Jorge Machado
* @date 28/Fev/2008
* @time 2:51:06
* @see pt.estgp.estgweb.domain.dao.impl
*/
public class BlogDaoImpl
extends BlogDao
{
private BlogDaoImpl
()
{
}
public static BlogDaoImpl getInstance
()
{
if (myInstance ==
null)
myInstance =
new BlogDaoImpl
();
return (BlogDaoImpl
) myInstance
;
}
public List
<BlogImpl
> loadOwnedBlogs
(long ownerId
)
{
return createCriteria
().
add(eq
("owner.id", ownerId
)).
list();
}
public List
<BlogImpl
> findBlogs
(List
<String
> roles,
boolean internal
)
{
return findBlogs
(roles,internal,
null);
}
public List
<BlogImpl
> findBlogs
(List
<String
> roles,
boolean internal,
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 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
);
}
if (!internal
)
criteria.
add(eq
("internal",
false));
if (co
!=
null)
criteria.
add(co
);
criteria.
add(eq
("status",
true))
.
addOrder(Order.
desc("title"));
if(type
!=
null)
criteria.
add(eq
("type",type
));
else
criteria.
add(isNull
("type"));
return criteria.
list();
}
public List
<BlogImpl
> findByName
(1.5.0/docs/api/java/lang/String.html">String name
)
{
return createCriteria
().
add(eq
("name", name
)).
list();
}
public List
<Blog
> loadInvalidBlogs
()
{
return createCriteria
()
.
add(isNull
("type"))
.
add(eq
("status",
false))
.
addOrder(Order.
asc("id")).
list();
}
private Criteria createRestrictionsCriteria
(List
<String
> roles,
boolean internal
)
{
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
);
}
if (!internal
)
criteria.
add(eq
("internal",
false));
criteria.
add(coRole
)
.
add(eq
("status",
true))
.
addOrder(Order.
desc("saveDate"));
return criteria
;
}
public int countBlogs
(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType, List
<String
> roles,
5+0%2Fdocs%2Fapi+Object">Object o,
boolean internal
)
{
Criterion c = DaoUtils.
createSearchQuery(query,searchType,
"description",
"title");
Criteria criteria = createRestrictionsCriteria
(roles, internal
);
criteria.
add(c
);
return criteria.
list().
size();
}
public List
<Blog
> searchBlogs
(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum,
int maxBlogs,
int page, List
<String
> roles,
boolean internal
)
{
Criterion c = DaoUtils.
createSearchQuery(query, searchTypeEnum,
"description",
"title");
Criteria criteria = createRestrictionsCriteria
(roles, internal
);
criteria.
add(c
)
.
setMaxResults(maxBlogs
)
.
setFirstResult(page
* maxBlogs
);
return criteria.
list();
}
}