Author: channa
Date: Wed Jul  2 03:57:56 2008
New Revision: 18792
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=18792

Log:
Added pagination support for user listing, adding a method which retrieves user 
information only for a given page of users.


Modified:
   trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/userprofile/ManageUsers.java
   trunk/mashup/java/modules/www/manage_users.jsp

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java
URL: 
http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java?rev=18792&r1=18791&r2=18792&view=diff
==============================================================================
--- trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java     
(original)
+++ trunk/mashup/java/modules/core/src/org/wso2/mashup/MashupConstants.java     
Wed Jul  2 03:57:56 2008
@@ -280,5 +280,9 @@
 
     public static final int BUFFER_SIZE = 40960;
 
+    // Default text populating the openID entry field.
     public static final String OPENID_URL_PREFIX = "http://";;
+
+    // Default number of entries shows when displaying a paginated list of 
items. 
+    public static final int DEFAULT_PAGE_SIZE = 10;
 }

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/userprofile/ManageUsers.java
URL: 
http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/userprofile/ManageUsers.java?rev=18792&r1=18791&r2=18792&view=diff
==============================================================================
--- 
trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/userprofile/ManageUsers.java
      (original)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/webapp/userprofile/ManageUsers.java
      Wed Jul  2 03:57:56 2008
@@ -81,6 +81,82 @@
     }
 
     /**
+     * Gets a map containing details of a page of users registered on the 
mashup server, keyed by
+     * user name. Implements pagination support, using the existing API of the 
user manager,
+     * with user properties being retrieved only for a given page of user 
data. 
+     *
+     * @param request Servlet request object.
+     * @param start Start listing names at this position.
+     * @param pageLen List this many names.
+     * @return Map of user names.
+     */
+    public static Map getUsers(HttpServletRequest request, int start, int 
pageLen) {
+        Map userMap = new HashMap();
+        UserRegistry userRegistry =
+                (UserRegistry) 
request.getSession().getAttribute(MashupConstants.USER_REGISTRY);
+        UserRealm realm = userRegistry.getUserRealm();
+        int end = start + pageLen;
+
+        try {
+            // Get an instance of the user store admin.
+            UserStoreAdmin userStoreAdmin = realm.getUserStoreAdmin();
+            String[] allUsers = userStoreAdmin.getAllUserNames();
+
+            // Making sure page start size is valid.
+            if (start < allUsers.length) {
+
+                // Setting actual page length.
+                if (end > allUsers.length) {
+                    end = allUsers.length;
+                }
+
+                // Details are retrieved only for a single pageful of users.  
+                for (int userCount = start; userCount < end; userCount++) {
+                    String fullName = (String) 
userStoreAdmin.getUserProperties(allUsers[userCount])
+                            .get(MashupConstants.FULL_NAME);
+                    // If the full name is available, use it, otherwise just 
show the user name.
+                    fullName = fullName != null ? fullName : 
allUsers[userCount];
+                    UserInformation userInformation =
+                            new UserInformation(fullName, isUserActive(realm,
+                                                                       
allUsers[userCount]),
+                                                isUserDeletable(realm, 
allUsers[userCount]),
+                                                isUserPromotable(realm, 
allUsers[userCount]),
+                                                userHasRole(userStoreAdmin, 
allUsers[userCount],
+                                                            
RegistryConstants.ADMIN_ROLE));
+                    userMap.put(allUsers[userCount], userInformation);
+                }
+            }
+        } catch (UserStoreException e) {
+            log.error("User manager error retrieving user list", e);
+        } catch (RegistryException e) {
+            log.error("Registry error retrieving user list", e);
+        }
+        return userMap;
+    }
+
+    /**
+     * Gets the number of users registered on the mashup server.
+     *
+     * @param request Servlet request object.
+     * @return number of users.
+     */
+    public static int getUserCount(HttpServletRequest request) {
+        UserRegistry userRegistry =
+                (UserRegistry) 
request.getSession().getAttribute(MashupConstants.USER_REGISTRY);
+        UserRealm realm = userRegistry.getUserRealm();
+        int numUsers = 0;
+        try {
+            // Get an instance of the user store admin.
+            UserStoreAdmin userStoreAdmin = realm.getUserStoreAdmin();
+            String[] allUsers = userStoreAdmin.getAllUserNames();
+            numUsers = allUsers.length;
+        } catch (UserStoreException e) {
+            log.error("User manager error retrieving user list", e);
+        }
+        return numUsers;
+    }
+
+    /**
      * Returns a list of registered user names.
      *
      * @param request Servlet request object.

Modified: trunk/mashup/java/modules/www/manage_users.jsp
URL: 
http://wso2.org/svn/browse/wso2/trunk/mashup/java/modules/www/manage_users.jsp?rev=18792&r1=18791&r2=18792&view=diff
==============================================================================
--- trunk/mashup/java/modules/www/manage_users.jsp      (original)
+++ trunk/mashup/java/modules/www/manage_users.jsp      Wed Jul  2 03:57:56 2008
@@ -41,7 +41,15 @@
     } else {
         bounceback = URLDecoder.decode(bounceback, "UTF-8");
     }
-    Map users = ManageUsers.getAllUsers(request);
+
+    String requestedPage = request.getParameter("pageNumber") != null ? 
request.getParameter("pageNumber") : "1";
+    int pageLength = MashupConstants.DEFAULT_PAGE_SIZE;
+    int numElements = ManageUsers.getUserCount(request);
+    int pageNumber = Integer.parseInt(requestedPage);
+    int numPages = numElements % pageLength == 0 ? numElements / pageLength : 
(numElements / pageLength) +1;
+    int currentPage = pageNumber > 0 & pageNumber <= numPages ? pageNumber : 1;
+    int firstElement = ((pageNumber - 1) * pageLength);
+    Map users = ManageUsers.getUsers(request, firstElement, pageLength);
 %>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
 <html>
@@ -113,6 +121,22 @@
               </td>
           </tr>
         <% }%>
+      <tr>
+          <td colspan="5" align="center">
+              <form name="paginator" method='post' action="manage_users.jsp">
+              <% if (currentPage != 1) { %>
+              <a href="manage_users.jsp?pageNumber=1">First</a>
+              <a href="manage_users.jsp?pageNumber=<%= currentPage - 1 
%>">Previous</a>
+              <% }
+              if (currentPage != numPages) { %>
+              <a href="manage_users.jsp?pageNumber=<%= currentPage + 1 
%>">Next</a>
+              <a href="manage_users.jsp?pageNumber=<%= numPages %>">Last</a>
+              <% } %>
+              &nbsp; Page <input type="text" name="pageNumber" value="<%= 
currentPage %>"/> of <%= numPages %>
+              &nbsp; <input type="submit" value="Go"/>
+              </form>
+          </td>
+      </tr>
       </table>
         <br>
         <br>

_______________________________________________
Mashup-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/mashup-dev

Reply via email to