[Yanel-commits] rev 47920 - public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi

michi at wyona.com michi at wyona.com
Thu Mar 4 15:02:42 CET 2010


Author: michi
Date: 2010-03-04 15:02:41 +0100 (Thu, 04 Mar 2010)
New Revision: 47920

Modified:
   public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java
Log:
custom properties added

Modified: public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java	2010-03-04 13:43:46 UTC (rev 47919)
+++ public/yanel/trunk/src/contributions/resources/security-api/src/java/org/wyona/yanel/impl/resources/securityapi/UserManagerResource.java	2010-03-04 14:02:41 UTC (rev 47920)
@@ -17,6 +17,8 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Map;
+import java.util.Collections;
 
 import org.apache.log4j.Logger;
 
@@ -48,8 +50,6 @@
                 sb.append(getUserAsXML(getEnvironment().getRequest().getParameter("id")));
             } else if (usecase.equals("getgroups")) {
                 sb.append(getGroupsAsXML());
-            } else if (usecase.equals("getusers")) {
-                sb.append(getUsersAsXML());
             } else {
                 sb.append("<no-such-yanel-usecase-implemented>" + usecase + "</no-such-yanel-usecase-implemented>");
             }
@@ -92,7 +92,8 @@
         Arrays.sort(groups, new ItemIDComparator());
         StringBuilder sb = new StringBuilder("<groups>");
         for (int i = 0; i < groups.length; i++) {
-        sb.append("<group id=\"" + groups[i].getID() + "\">" + groups[i].getName() + "</group>");
+            //getGroupExtraPropertiesGetter()
+            sb.append("<group id=\"" + groups[i].getID() + "\">" + groups[i].getName() + "</group>");
         }
         sb.append("</groups>");
         return sb;
@@ -105,9 +106,31 @@
         UserManager um = getRealm().getIdentityManager().getUserManager();
         User[] users = um.getUsers();
         Arrays.sort(users, new ItemIDComparator());
-        StringBuilder sb = new StringBuilder("<users>");
+
+        StringBuilder sb = new StringBuilder();
+
+        sb.append("<users");
+
+        // INFO: Add custom namespaces
+        Map<String, String> extraXMLnamespaceDeclarations = getExtraXMLnamespaceDeclarations();
+        for (Map.Entry<String, String> declaration : extraXMLnamespaceDeclarations.entrySet()) {
+            sb.append(" xmlns:" + declaration.getKey() + "=\"" + declaration.getValue() + "\"");
+        }
+
+        sb.append(">");
+
         for (int i = 0; i < users.length; i++) {
-        sb.append("<user id=\"" + users[i].getID() + "\">" + users[i].getName() + "</user>");
+            sb.append("<user id=\"" + users[i].getID() + "\"");
+            //sb.append(" expired=\"" + org.wyona.security.impl.util.UserUtil.isExpired(users[i]) + "\"");
+
+            // INFO: Add custom properties
+            SecurityItemExtraPropertiesGetter<User> itemExtraPropertiesGetter = getUserExtraPropertiesGetter();
+            Map<String, String> extraItemProperties = itemExtraPropertiesGetter.getExtraProperties(users[i]);
+            for (Map.Entry<String, String> property : extraItemProperties.entrySet()) {
+                sb.append(" " + property.getKey() + "=\"" + org.wyona.commons.xml.XMLHelper.replaceEntities(property.getValue()) + "\""); //INFO: The name should be safe, so don't escape it
+            }
+
+            sb.append(">" + users[i].getName() + "</user>");
         }
         sb.append("</users>");
         return sb;
@@ -127,4 +150,57 @@
             }
         }
     }
+
+    /**
+     * Interface/template in order to get custom properties of user or group
+     */
+    public interface SecurityItemExtraPropertiesGetter<I extends Item> {
+
+        /**
+         * Get custom properties
+         * @param item User, group, host, etc.
+         */
+        Map<String, String> getExtraProperties(I item);
+    }
+
+    /**
+     * Default implementation of getter for user
+     */
+    protected SecurityItemExtraPropertiesGetter<User> getUserExtraPropertiesGetter() {
+        return userNoExtraPropertiesGetter;
+    }
+
+    /**
+     * Default user properties which will be used by default implementation #getUserExtraPropertiesGetter
+     */
+    private static final SecurityItemExtraPropertiesGetter<User> userNoExtraPropertiesGetter = new SecurityItemExtraPropertiesGetter<User>() {
+        @Override
+        public Map<String, String> getExtraProperties(User item) {
+            return Collections.emptyMap();// no extra properties to add for standard Yanel users
+        }
+    };
+
+    /**
+     * Default implementation of getter for group
+     */
+    protected SecurityItemExtraPropertiesGetter<Group> getGroupExtraPropertiesGetter() {
+        return groupNoExtraPropertiesGetter;
+    }
+
+    /**
+     * Default group properties which will be used by default implementation #getGroupExtraPropertiesGetter
+     */
+    private static final SecurityItemExtraPropertiesGetter<Group> groupNoExtraPropertiesGetter = new SecurityItemExtraPropertiesGetter<Group>() {
+        @Override
+        public Map<String, String> getExtraProperties(Group item) {
+            return Collections.emptyMap();// no extra properties to add for standard Yanel users
+        }
+    };
+
+    /**
+     * Overwrite this method in order to insert custom namespaces
+     */
+    protected Map<String, String> getExtraXMLnamespaceDeclarations() throws Exception {
+        return Collections.emptyMap(); // DEFAULT: No extra XML namespace declarations
+    }
 }



More information about the Yanel-commits mailing list