<%@page import="org.apache.jackrabbit.api.security.user.Authorizable"%> <%@page import="org.apache.jackrabbit.api.security.user.Group"%> <%@page session="false" import="javax.jcr.*, java.util.*, org.apache.sling.api.resource.Resource, org.apache.sling.api.resource.ValueMap, com.day.cq.commons.jcr.*, java.util.Date, java.text.SimpleDateFormat, java.text.FieldPosition, java.text.ParsePosition, java.util.Iterator, javax.jcr.Property, javax.jcr.Node, javax.jcr.PropertyType, javax.jcr.Session" %><% %><%@taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0" %><% %><%@taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %><% %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><% %><%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><% %><%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><% %><sling:defineObjects /> <html> <head> <title>List Group</title> </head> <body> <h3>List Group Info</h3> <table border="1"> <tr><th>Group name</th><th>Number of member</th></tr> <% String query = "//element(*,rep:Group)"; Iterator<Resource> iter = resourceResolver.findResources(query,"xpath"); int totalGroupCount=0; int totalMembers = 0; Map<String,Integer> allgroups = new TreeMap<String,Integer>(); while(iter.hasNext()){ int memberCount=0; Resource authresource = iter.next(); Node node = authresource.adaptTo(Node.class); Group group = (Group)((authresource).adaptTo(Authorizable.class)); Iterator<Authorizable> members = group.getMembers();
while(members.hasNext()){ members.next(); memberCount++; } allgroups.put(group.getID(),memberCount); totalGroupCount++; } allgroups=sortByValue(allgroups); for(Map.Entry<String,Integer> entry:allgroups.entrySet()){ totalMembers+=entry.getValue(); out.print("<tr><td>"+entry.getKey()+"</td><td align=center>"+entry.getValue()+"</td></tr>"); } %> <%! public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue( Map<K, V> map ) { List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>( map.entrySet() ); Collections.sort( list, new Comparator<Map.Entry<K, V>>() { public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 ) { return (o2.getValue()).compareTo( o1.getValue() ); } } ); Map<K, V> result = new LinkedHashMap<K, V>(); for (Map.Entry<K, V> entry : list) { result.put( entry.getKey(), entry.getValue() ); } return result; } %> </table> <% out.println("Total Number of Group is "+ totalGroupCount + "<BR>"); out.println("Average number of user in Group is "+totalMembers/totalGroupCount); %> </body> </html> |