Update of
/var/cvs/contributions/CMSContainer_Modules/community/src/java/com/finalist/cmsc/services/community/security
In directory james.mmbase.org:/tmp/cvs-serv18813
Modified Files:
AuthorityHibernateService.java
Log Message:
CMSC-996,User and Group lists in Editors,,add find relation find record fuction
See also:
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/community/src/java/com/finalist/cmsc/services/community/security
See also: http://www.mmbase.org/jira/browse/CMSC-996
Index: AuthorityHibernateService.java
===================================================================
RCS file:
/var/cvs/contributions/CMSContainer_Modules/community/src/java/com/finalist/cmsc/services/community/security/AuthorityHibernateService.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- AuthorityHibernateService.java 31 Mar 2008 19:49:01 -0000 1.3
+++ AuthorityHibernateService.java 27 Jul 2008 07:33:23 -0000 1.4
@@ -10,16 +10,21 @@
package com.finalist.cmsc.services.community.security;
-import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.hibernate.Criteria;
+import org.hibernate.Query;
+import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Iterator;
-
+import com.finalist.cmsc.paging.PagingStatusHolder;
import com.finalist.cmsc.services.HibernateService;
@@ -41,7 +46,17 @@
@Transactional
public void deleteAuthority(String name) {
Authority authority = findAuthorityByName(name);
+ Set<Authentication> set=new HashSet<Authentication>();
+ set.addAll(authority.getAuthentications());
+ for (Authentication authentication :
authority.getAuthentications()) {
+ authentication.getAuthorities().remove(authority);
+ //authentication.removeAuthority(authority);
+// getSession().saveOrUpdate(authentication);
+ }
+ authority.getAuthentications().clear();
+// getSession().saveOrUpdate(authority);
getSession().delete(authority);
+
}
/** [EMAIL PROTECTED] */
@@ -52,7 +67,7 @@
}
/** [EMAIL PROTECTED] */
- @Transactional(readOnly = true)
+ @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public Authority findAuthorityByName(String name) {
Criteria criteria = getSession()
.createCriteria(Authority.class)
@@ -60,6 +75,27 @@
return findAuthorityByCriteria(criteria);
}
+ @SuppressWarnings("unchecked")
+ private List<Authority> addConditionToCriteria(PagingStatusHolder
holder,Criteria criteria){
+ criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
+
if("group".equalsIgnoreCase(holder.getSort())&&"asc".equalsIgnoreCase(holder.getDir())){
+ criteria.addOrder(Order.asc("name"));
+ }else
if("group".equalsIgnoreCase(holder.getSort())&&"desc".equalsIgnoreCase(holder.getDir())){
+ criteria.addOrder(Order.desc("name"));
+ }
+ List list = criteria.list();
+ List newlist = new ArrayList();
+ for(int i = holder.getOffset() ; i <
holder.getOffset()+holder.getPageSize()&&i<list.size();i++){
+ newlist.add(list.get(i));
+ }
+ return newlist;
+ }
+ @Transactional(readOnly = true)
+ public List<Authority> findAssociatedAuthorityByName(String
name,PagingStatusHolder holder){
+ Criteria criteria = getSession()
+ .createCriteria(Authority.class).add(Restrictions.like("name",
"%"+name+"%"));
+ return addConditionToCriteria(holder,criteria);
+ }
/** [EMAIL PROTECTED] */
@Transactional(readOnly = true)
public Set<String> getAuthorityNames() {
@@ -67,6 +103,12 @@
return findAuthorityNamesByCriteria(criteria);
}
+ @Transactional(readOnly = true)
+ public List<Authority> getAllAuthorities(PagingStatusHolder holder) {
+ Criteria criteria =
getSession().createCriteria(Authority.class);//ÔÚcriteriaÀïÃæ¼ÓÈ¥ÖØµÄÌõ¼þ
+ return addConditionToCriteria(holder,criteria);
+ }
+
/** [EMAIL PROTECTED] */
@Transactional(readOnly = true)
public Set<String> getAuthorityNamesForUser(String userId) {
@@ -80,7 +122,7 @@
@SuppressWarnings("unchecked")
private Authority findAuthorityByCriteria(Criteria criteria) {
List authorities = criteria.list();
- return authorities.size() == 1 ? (Authority) authorities.get(0) : null;
+ return authorities.size() > 0 ? (Authority) authorities.get(0) : null;
}
@SuppressWarnings("unchecked")
@@ -93,5 +135,78 @@
}
return result;
}
+ @SuppressWarnings("unchecked")
+ private Set<Authority> findAuthoritesByCriteria(Criteria criteria) {
+ List authorityList = criteria.list();
+ Set<Authority> result = new HashSet<Authority>();
+ for (Iterator iter = authorityList.iterator(); iter.hasNext();) {
+ Authority authority = (Authority) iter.next();
+ result.add(authority);
+ }
+ return result;
+ }
+ @Transactional(readOnly = true)
+ public int countAllAuthorities() {
+ Criteria criteria = getSession().createCriteria(Authority.class);
+ return findAuthoritesByCriteria(criteria).size();
+ }
+ @Transactional(readOnly = true)
+ public int countAssociatedAuthorities(String name) {
+ Criteria criteria = getSession()
+ .createCriteria(Authority.class).add(Restrictions.like("name",
"%"+name+"%"));
+ return findAuthoritesByCriteria(criteria).size();
+ }
+
+ @Transactional(readOnly = true)
+ public List<Authority> getAssociatedAuthorities(Map conditions,
PagingStatusHolder holder) {
+ StringBuffer strb = new StringBuffer();
+ basicGetAssociatedAuthorities(conditions, strb);
+ if ("groupName".equals(holder.getSort())) {
+ strb.append(String.format(" order by %s %s","Authority.name",
holder.getDir()));
+ }
+ Query q = getSession().createQuery(strb.toString());
+ q.setMaxResults(holder.getPageSize()).setFirstResult(holder.getOffset());
+
+ return q.list();
+ }
+
+ private void basicGetAssociatedAuthorities(Map conditions, StringBuffer
strb){
+ strb.append("select distinct authority from Person person ,
Authentication authentication "
+ + "left join
authentication.authorities authority "
+ + "where
person.authenticationId = authentication.id");
+ if (null!=conditions&&conditions.containsKey("group")) {
+ String group = (String) conditions.get("group");
+ strb.append(" and upper(authority.name) like'%" + group.toUpperCase() +
"%'");
+ }
+
+ if (null!=conditions&&conditions.containsKey("username")) {
+ String[] members = (String[])
conditions.get("username");
+ if(members.length < 1) return;
+ int i=0;
+ for(String m:members){
+ String[] names = m.split(" ");
+ if(names.length>2) continue;
+ if(i==0)strb.append(" and (");
+ if(i>0)strb.append("or(");
+ if (names.length == 2)
+ strb.append(" person.firstName like'%"
+ names[0]
+ + "%'and
person.lastName like'%" + names[1] + "%')"
+ + "or (
person.firstName like'%" + names[0] + " " + names[1]
+ + "%'" + "or
person.lastName like'%" + names[0] + " "
+ + names[1] + "%'");
+ else if (names.length == 1)
+ strb.append("person.firstName like'%" +
names[0]+ "%' or person.lastName like'%" + names[0] + "%'");
+ strb.append(")");
+ i++;
+ }
+ }
+ }
+ @Transactional(readOnly = true)
+ public int getAssociatedAuthoritiesNum(Map conditions, PagingStatusHolder
holder) {
+ StringBuffer strb = new StringBuffer();
+ basicGetAssociatedAuthorities(conditions, strb);
+ Query q = getSession().createQuery(strb.toString());
+ return q.list().size();
+ }
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs