[Yanel-commits] rev 23293 - in public/yanel/trunk/src: contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources contributions/resources/yanel-user/xslt realms/yanel-website/ac-identities realms/yanel-website/ac-identities/groups realms/yanel-website/content/rtd

josias at wyona.com josias at wyona.com
Fri Mar 16 14:54:14 CET 2007


Author: josias
Date: 2007-03-16 14:54:12 +0100 (Fri, 16 Mar 2007)
New Revision: 23293

Added:
   public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/
   public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
   public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
Modified:
   public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java
   public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl
   public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc
Log:
allow creation of new users by the resource creator and added some minor improvements. see bug #5116, thanks to paloma for the patch.

Modified: public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java	2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/src/java/org/wyona/yanel/impl/resources/YanelUserResource.java	2007-03-16 13:54:12 UTC (rev 23293)
@@ -24,6 +24,7 @@
 import java.util.regex.Pattern;
 
 import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.ResourceConfiguration;
 import org.wyona.yanel.core.util.PathUtil;
 import org.wyona.yanel.core.attributes.viewable.View;
 import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
@@ -86,8 +87,7 @@
 
         properties.put("userId", "");
         properties.put("userName", "");
-        properties.put("email", "");
-        properties.put("description", "");
+        properties.put("email", "");        
         properties.put("password", "");
         properties.put("group", "");
 
@@ -129,54 +129,56 @@
                     new StreamSource(xslFile));
 
             String action = determineAction(request);
-            String userId = getConfiguration().getProperty("user");            
+            String userId = getUserId();            
 
             if (action.equals("submitProfile")) {
                 updateUserProfile(request, transformer);
             } else if (action.equals("submitPassword")) {
                 updatePassword(request, transformer);
             } else if (action.equals("submitDelete")) {
-                if (deleteUser(getConfiguration().getProperty("user"))) {
+                if (deleteUser(userId)) {
                     transformer.setParameter("success", "User deleted successfully");
                 } else {
                     transformer.setParameter("error", "Unable to delete user successfully");
                 }
                 transformer.setParameter("userId", userId);
+                transformer.setParameter("deletion", "true");
             } else if (action.startsWith("submitDeleteFromGroup")) {        	
-        	deleteFromGroup(action, transformer);
+                deleteFromGroup(action, transformer);
             } else if (action.equals("submitAddToGroup")) {
-        	addToGroup(request,transformer);
+                addToGroup(request,transformer);
             }
 
-            User user = realm.getIdentityManager().getUserManager().getUser(userId);
-            transformer.setParameter("userId", userId);
-            transformer.setParameter("userName", user.getName());
-            transformer.setParameter("email", user.getEmail());
-            Group[] userGroups = user.getGroups();
-            StringBuffer userGroupsString = new StringBuffer();
-            for (int i = 0; i < userGroups.length; i++) {
-        	userGroupsString.append(userGroups[i].getID()).append(";");
+            if(!action.equals("submitDelete")) {
+                User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
+                transformer.setParameter("userId", userId);
+                transformer.setParameter("userName", user.getName());
+                transformer.setParameter("email", user.getEmail());
+                Group[] userGroups = user.getGroups();
+                StringBuffer userGroupsString = new StringBuffer();
+                for (int i = 0; i < userGroups.length; i++) {
+                    userGroupsString.append(userGroups[i].getID()).append(";");
+                }
+                transformer.setParameter("userGroupsString", userGroupsString);            
+
+                Group[] allGroups = getRealm().getIdentityManager().getGroupManager().getGroups();
+                StringBuffer allGroupsString = new StringBuffer();
+                for (int i = 0; i < allGroups.length; i++) {
+                    boolean isMember = false;        	
+                    for(int j = 0; j < userGroups.length; j++) {
+                        if(userGroups[j].getID().equals(allGroups[i].getID())) {
+                            isMember = true;      		
+                        }
+                    } 
+                    if(!isMember) {
+                        allGroupsString.append(allGroups[i].getID()).append(";");
+                    }
+                }
+                transformer.setParameter("allGroupsString", allGroupsString);            
             }
-            transformer.setParameter("userGroupsString", userGroupsString);            
-            
-            Group[] allGroups = getRealm().getIdentityManager().getGroupManager().getGroups();
-            StringBuffer allGroupsString = new StringBuffer();
-            for (int i = 0; i < allGroups.length; i++) {
-        	boolean isMember = false;        	
-        	for(int j = 0; j < userGroups.length; j++) {
-        	    if(userGroups[j].getID().equals(allGroups[i].getID())) {
-        		isMember = true;      		
-        	    }
-        	} 
-        	if(!isMember) {
-        	    allGroupsString.append(allGroups[i].getID()).append(";");
-        	}
-            }
-            transformer.setParameter("allGroupsString", allGroupsString);            
-
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             transformer.transform(new javax.xml.transform.stream.StreamSource(xmlFile),
-        	    new StreamResult(baos));
+                    new StreamResult(baos));
 
             defaultView.setMimeType(MIME_TYPE);
             defaultView.setInputStream(new java.io.ByteArrayInputStream(baos.toByteArray()));
@@ -218,10 +220,10 @@
      */
     public void create(HttpServletRequest request) {
         try {
-            if (!realm.getIdentityManager().getUserManager().existsUser("rp.userId")) {
+            if (!getRealm().getIdentityManager().getUserManager().existsUser("rp.userId")) {
                 boolean doCreate = validateNewUserData(request);
                 if (doCreate) {
-                    UserManager um = realm.getIdentityManager().getUserManager();
+                    UserManager um = getRealm().getIdentityManager().getUserManager();
                     String userId = request.getParameter("rp.userId");
                     String password = request.getParameter("rp.password");
                     String email = request.getParameter("rp.email");
@@ -229,12 +231,14 @@
 
                     um.createUser(userId, userName, email, password);
 
-                    String group = request.getParameter("rp.group");
-                    GroupManager gm = realm.getIdentityManager().getGroupManager();
-                    gm.getGroup(group).addMember(um.getUser(userId));
+                    String groupId = request.getParameter("rp.group");
+                    GroupManager gm = getRealm().getIdentityManager().getGroupManager();
+                    Group group =  gm.getGroup(groupId);
+                    group.addMember(um.getUser(userId));
+                    group.save();
 
                     // TODO: Handle more than one group
-                    saveUserPolicy();
+                    saveUserPolicy(userId);
                 } else {
                     log.error("Unable to create user: the data introduced was not valid");
                 }
@@ -359,7 +363,7 @@
             transformer.setParameter("error", "emailNotValid");
         } else {
             try {
-                String userId = getConfiguration().getProperty("user");
+                String userId = getUserId();
                 User user = realm.getIdentityManager().getUserManager().getUser(userId);
                 user.setEmail(request.getParameter("email"));
                 user.setName(request.getParameter("userName"));
@@ -382,48 +386,48 @@
      */
     private void deleteFromGroup(String action, Transformer transformer) {
         try {
-            String userId = getConfiguration().getProperty("user");
+            String userId = getUserId();
             User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
             Group[] userGroups = user.getGroups();
             GroupManager gm = getRealm().getIdentityManager().getGroupManager();
 
             String targetGroup = action.substring(action.indexOf("_")+1);            
             if (userGroups.length > 0) {
-        	if(userGroups.length > 1) {
-        	    Group group = gm.getGroup(targetGroup);
-        	    if (group.isMember(user)) {                   
-        		group.removeMember(user);
-        		group.save();                    
-        	    }
-        	    transformer.setParameter("success", "User successfully deleted from group: " + targetGroup);
-        	} else {
-        	    transformer.setParameter("error", "User can not be removed from group: " + targetGroup + ". Users must belong to one group at least."); 
-        	}        	
+                if(userGroups.length > 1) {
+                    Group group = gm.getGroup(targetGroup);
+                    if (group.isMember(user)) {                   
+                        group.removeMember(user);
+                        group.save();                    
+                    }
+                    transformer.setParameter("success", "User successfully deleted from group: " + targetGroup);
+                } else {
+                    transformer.setParameter("error", "User can not be removed from group: " + targetGroup + ". Users must belong to one group at least."); 
+                }        	
             } else {
-        	log.error("The user " + userId + "does not belong to any group!");
+                log.error("The user " + userId + "does not belong to any group!");
             }
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
     }
-    
+
     /**
      * Add a user to a group
      * @param request Request containing the group the user has to be added to
      * @param transformer
      */
     private void addToGroup(HttpServletRequest request, Transformer transformer) {
-	String groupId = request.getParameter("Group");
-	try {
-	    String userId = getConfiguration().getProperty("user");	
-	    Group group = getRealm().getIdentityManager().getGroupManager().getGroup(groupId);
-	    User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
-	    group.addMember(user);
-	    group.save();
-	} catch (Exception e) {
-	    log.error(e.getMessage(), e);
-	}
-	transformer.setParameter("success", "User successfully added to group: " + groupId);
+        String groupId = request.getParameter("Group");
+        try {
+            String userId = getUserId();	
+            Group group = getRealm().getIdentityManager().getGroupManager().getGroup(groupId);
+            User user = getRealm().getIdentityManager().getUserManager().getUser(userId);
+            group.addMember(user);
+            group.save();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        transformer.setParameter("success", "User successfully added to group: " + groupId);
     }
 
     /**
@@ -435,7 +439,7 @@
     private void updatePassword(HttpServletRequest request, Transformer transformer) {
         String oldPassword = request.getParameter("oldPassword");
         try {
-            String userId = getConfiguration().getProperty("user");
+            String userId = getUserId();
             if (getRealm().getIdentityManager().getUserManager().getUser(userId).authenticate(
                     oldPassword)) {
                 String plainPassword = request.getParameter("newPassword");
@@ -497,8 +501,8 @@
     /**
      * Saves the user data access policies to the policies repository
      */
-    private void saveUserPolicy() {
-        Configuration policyConfig = createPolicyConfiguration(properties.get("userId").toString());
+    private void saveUserPolicy(String userId) {
+        Configuration policyConfig = createPolicyConfiguration(userId);
         DefaultConfigurationSerializer serializer = new DefaultConfigurationSerializer();
 
         String policyPath = getPath() + POLICIES_SUFFIX;
@@ -516,7 +520,7 @@
      * Validate the supplied user data. userName is optional
      */
     private boolean validateNewUserData(HttpServletRequest request)
-            throws AccessManagementException {
+    throws AccessManagementException {
         boolean isValid = true;
         if (request.getParameter("rp.password").equals("")) {
             isValid = false;
@@ -538,6 +542,17 @@
         return isValid;
     }
 
+    private String getUserId() throws Exception {
+        String userId = null;
+        ResourceConfiguration resConfig = getConfiguration();
+        if(resConfig != null) {
+            userId = getConfiguration().getProperty("user");
+        } else {
+            userId = getRTI().getProperty("user");
+        }
+        return userId;
+    }
+
     /**
      * Delete the user from the identities repository and remove the related
      * user interface files
@@ -545,16 +560,23 @@
     private boolean deleteUser(String userId) {
         boolean success = false;
         try {
-            User user = realm.getIdentityManager().getUserManager().getUser(userId);
-            user.delete();
 
+            UserManager um = getRealm().getIdentityManager().getUserManager();
+            um.removeUser(userId);
+
             String userScreenPolicyPath = getPath() + POLICIES_SUFFIX;
             Repository policiesRepo = getRealm().getPolicyManager().getPoliciesRepository();
             policiesRepo.getNode(userScreenPolicyPath).delete();
 
+            Repository rtiRepo = getRealm().getRTIRepository();
             String userScreenRCPath = PathUtil.getRCPath(getPath());
-            Repository rtiRepo = getRealm().getRTIRepository();
-            rtiRepo.getNode(userScreenRCPath).delete();
+            if(rtiRepo.existsNode(userScreenRCPath)) {
+                rtiRepo.getNode(userScreenRCPath).delete();
+            } else {
+                String userScreenRTIPath = PathUtil.getRTIPath(getPath());
+                rtiRepo.getNode(userScreenRTIPath).delete();
+            }
+            success = true;
 
         } catch (Exception e) {
             log.error(e.getMessage(), e);

Modified: public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl
===================================================================
--- public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl	2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/contributions/resources/yanel-user/xslt/yanel-user-profile.xsl	2007-03-16 13:54:12 UTC (rev 23293)
@@ -15,30 +15,32 @@
   <xsl:param name="allGroupsString" select="''"/>
   <xsl:param name="success" select="''"/>
   <xsl:param name="error" select="''"/>
+  <xsl:param name="deletion" select="'false'"/>
 
   <xsl:template match="/">
     <html xmlns="http://www.w3.org/1999/xhtml">
-      <head>
-        <title>Change user profile</title>
-      </head>
-      <body>
-        <h1> 
-          User Profile of <xsl:value-of select="$userId"/>
-        </h1>
-      <xsl:choose>       
-        <xsl:when test="$success != ''">            
-          <h4>
-            <xsl:value-of select="$success"/>
-          </h4>           
+      <xsl:choose>
+        <xsl:when test="contains('true',$deletion)">
+          <head>
+            <title></title>
+          </head>
+          <body>	    
+            <xsl:call-template name="show-message"/>
+          </body>
         </xsl:when>
-        <xsl:when test="$error != ''">          
-          <h4>
-            An error occurred: <xsl:value-of select="$error"/>
-          </h4>            
-        </xsl:when>        
+        <xsl:otherwise>
+          <head>
+            <title>Change user profile</title>
+          </head>
+          <body>        
+            <h1> 
+              User Profile of <xsl:value-of select="$userId"/>
+            </h1>
+              <xsl:call-template name="show-message"/>     
+              <xsl:apply-templates select="form"/>
+          </body>
+        </xsl:otherwise>
       </xsl:choose>
-       <xsl:apply-templates select="form"/>
-       </body>
     </html>
   </xsl:template>  
 
@@ -125,6 +127,21 @@
     </form>
   </xsl:template>
 
+  <xsl:template name="show-message">    
+    <xsl:choose>       
+      <xsl:when test="$success != ''">            
+        <h4>
+          <xsl:value-of select="$success"/>
+        </h4>           
+      </xsl:when>
+      <xsl:when test="$error != ''">          
+        <h4>
+          An error occurred: <xsl:value-of select="$error"/>
+        </h4>            
+      </xsl:when>        
+   </xsl:choose> 
+  </xsl:template>
+
   <xsl:template name="tokenize">
     <xsl:param name="inputString"/>
     <xsl:param name="separator" select="' '"/>

Added: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml	2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml	2007-03-16 13:54:12 UTC (rev 23293)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group id="admin">
+<name>Admins</name>
+<members>
+<member id="alice"/>
+<member id="lenya"/>
+</members>
+</group>


Property changes on: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/admin.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml	2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml	2007-03-16 13:54:12 UTC (rev 23293)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group id="editor">
+<name>My Editors</name>
+<members>
+<member id="alice"/>
+<member id="lenya"/>
+</members>
+</group>


Property changes on: public/yanel/trunk/src/realms/yanel-website/ac-identities/groups/editor.xml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc
===================================================================
--- public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc	2007-03-16 13:29:20 UTC (rev 23292)
+++ public/yanel/trunk/src/realms/yanel-website/content/rtd/create-new-resource.rc	2007-03-16 13:54:12 UTC (rev 23293)
@@ -13,6 +13,7 @@
         <rc:property name="xslt" value="/xslt/global.xsl"/>
         <rc:property name="mime-type" value="application/xhtml+xml"/>
       </rc:resource-type>
+      <rc:resource-type name="yanel-user" namespace="http://www.wyona.org/yanel/resource/1.0"/>
     </rc:resource-types>
   </yanel:custom-config>
 </yanel:resource-config>




More information about the Yanel-commits mailing list