Author: carlos
Date: Mon Jul 24 03:25:03 2006
New Revision: 424993
URL: http://svn.apache.org/viewvc?rev=424993&view=rev
Log:
[CONTINUUM-771] Add user management pages
Submitted By: Henry Isidro
Added:
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
(with props)
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
(with props)
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
(with props)
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
(with props)
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
(with props)
Modified:
maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/resources/localization/Continuum.properties
Added: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java?rev=424993&view=auto
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
(added)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
Mon Jul 24 03:25:03 2006
@@ -0,0 +1,114 @@
+package org.apache.maven.continuum.web.action;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.continuum.Continuum;
+import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.model.system.ContinuumUser;
+import org.apache.maven.continuum.model.system.Permission;
+import org.apache.maven.continuum.store.ContinuumStore;
+
+import org.codehaus.plexus.xwork.action.PlexusActionSupport
+
+/**
+ * @author Teody Cue
+ *
+ * @plexus.component
+ * role="com.opensymphony.xwork.Action"
+ * role-hint="addUserRole"
+ */
+public class AddUserRoleAction
+ extends PlexusActionSupport
+{
+
+ private Continuum continuum;
+
+ private ContinuumStore store;
+
+ private ContinuumUser user;
+
+ private List permissions;
+
+ private Permission permission;
+
+ private int accountId;
+
+ private String permissionName;
+
+ public String execute()
+ throws Exception
+ {
+ try
+ {
+ user = continuum.getUser( accountId );
+ permissions = store.getPermissions();
+ int i;
+ for ( i = 0; i < permissions.size(); i++ )
+ {
+ permission = (Permission) permissions.get( i );
+ if ( permission.getName().equalsIgnoreCase( permissionName ) )
+ {
+ break;
+ }
+ }
+ if ( i < permissions.size() )
+ {
+ user.getGroup().addPermission( permission );
+ continuum.updateUser( user );
+ }
+ else
+ {
+ addActionMessage( "Can't add user role (id=" + accountId + ", role=" + permissionName
+ + ") : Role does not exist." );
+ }
+ }
+ catch ( ContinuumException e )
+ {
+ addActionMessage( "Can't add user role (id=" + accountId + ", role=" + permissionName
+ ") : "
+ + e.getMessage() );
+
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ return SUCCESS;
+ }
+
+ public int getAccountId()
+ {
+ return accountId;
+ }
+
+ public void setAccountId( int accountId )
+ {
+ this.accountId = accountId;
+ }
+
+ public String getPermissionName()
+ {
+ return permissionName;
+ }
+
+ public void setPermissionName( String permissionName )
+ {
+ this.permissionName = permissionName;
+ }
+
+}
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/AddUserRoleAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java?rev=424993&view=auto
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
(added)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
Mon Jul 24 03:25:03 2006
@@ -0,0 +1,83 @@
+package org.apache.maven.continuum.web.action;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.continuum.Continuum;
+import org.apache.maven.continuum.ContinuumException;
+
+import org.codehaus.plexus.xwork.action.PlexusActionSupport
+
+/**
+ * @author Henry Isidro
+ *
+ * @plexus.component
+ * role="com.opensymphony.xwork.Action"
+ * role-hint="deleteUser"
+ */
+public class DeleteUserAction
+ extends PlexusActionSupport
+{
+ private Continuum continuum;
+
+ private int accountId;
+
+ private String username;
+
+ public String execute()
+ throws Exception
+ {
+ try
+ {
+ continuum.removeUser( accountId );
+ }
+ catch ( ContinuumException e )
+ {
+ addActionMessage( "Can't delete user (id=" + accountId + ") : " + e.getMessage()
);
+
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ return SUCCESS;
+ }
+
+ public String doDelete()
+ {
+ return "delete";
+ }
+
+ public int getAccountId()
+ {
+ return accountId;
+ }
+
+ public void setAccountId( int accountId )
+ {
+ this.accountId = accountId;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
+ public void setUsername( String username )
+ {
+ this.username = username;
+ }
+
+}
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/DeleteUserAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java?rev=424993&view=auto
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
(added)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
Mon Jul 24 03:25:03 2006
@@ -0,0 +1,396 @@
+package org.apache.maven.continuum.web.action;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.maven.continuum.Continuum;
+import org.apache.maven.continuum.ContinuumException;
+import org.apache.maven.continuum.model.system.ContinuumUser;
+import org.apache.maven.continuum.model.system.Permission;
+import org.apache.maven.continuum.model.system.UserGroup;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+
+import com.opensymphony.webwork.interceptor.ServletRequestAware;
+
+import org.codehaus.plexus.xwork.action.PlexusActionSupport
+
+/**
+ * @author Henry Isidro
+ *
+ * @plexus.component
+ * role="com.opensymphony.xwork.Action"
+ * role-hint="editUser"
+ */
+public class EditUserAction
+ extends PlexusActionSupport
+ implements ServletRequestAware
+{
+
+ private ContinuumStore store;
+
+ private Continuum continuum;
+
+ private ContinuumUser user;
+
+ private UserGroup userGroup;
+
+ private List staticPermissions;
+
+ private List availablePermissions;
+
+ private Permission staticPermission;
+
+ private Permission permission;
+
+ private String permissionName;
+
+ private boolean addMode = false;
+
+ private int accountId;
+
+ private String username;
+
+ private String password;
+
+ private String email;
+
+ private List permissions;
+
+ private HttpServletRequest request;
+
+ public String execute()
+ throws Exception
+ {
+ permissions = (List) request.getSession().getAttribute( "permissions" );
+ try
+ {
+ username = username.substring( 0, username.indexOf( "," ) );
+ password = password.substring( 0, password.indexOf( "," ) );
+ email = email.substring( 0, email.indexOf( "," ) );
+ }
+ catch ( StringIndexOutOfBoundsException e )
+ {
+ }
+ if ( addMode )
+ {
+ try
+ {
+ userGroup = new UserGroup();
+ userGroup.setName( username );
+ userGroup.setPermissions( permissions );
+
+ user = new ContinuumUser();
+ user.setUsername( username );
+ user.setPassword( password );
+ user.setEmail( email );
+ user.setGroup( userGroup );
+ continuum.addUser( user );
+ }
+ catch ( ContinuumException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+ }
+ else
+ {
+ try
+ {
+ user = continuum.getUser( accountId );
+ user.setUsername( username );
+ user.setPassword( password );
+ user.setEmail( email );
+ user.getGroup().setPermissions( permissions );
+ }
+ catch ( ContinuumException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ try
+ {
+ continuum.updateUser( user );
+ }
+ catch ( ContinuumException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+ }
+
+ request.getSession().removeAttribute( "addMode" );
+ request.getSession().removeAttribute( "accountId" );
+ request.getSession().removeAttribute( "username" );
+ request.getSession().removeAttribute( "password" );
+ request.getSession().removeAttribute( "email" );
+ request.getSession().removeAttribute( "permissions" );
+
+ return SUCCESS;
+ }
+
+ public String doAdd()
+ throws Exception
+ {
+ addMode = true;
+ return INPUT;
+ }
+
+ public String doEdit()
+ throws Exception
+ {
+ try
+ {
+ addMode = false;
+ user = continuum.getUser( accountId );
+ username = user.getUsername();
+ password = user.getPassword();
+ email = user.getEmail();
+ permissions = user.getGroup().getPermissions();
+ if ( permissions.size() == 1 )
+ {
+ permissionName = ( (Permission) permissions.get( 0 ) ).getName();
+ }
+ }
+ catch ( ContinuumException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ return INPUT;
+ }
+
+ public String doGetAvailablePermissions()
+ throws Exception
+ {
+ try
+ {
+ int i, j;
+ availablePermissions = new ArrayList();
+ staticPermissions = store.getPermissions();
+ permissions = (List) request.getSession().getAttribute( "permissions" );
+ if ( permissions == null || permissions.size() == 0 )
+ {
+ availablePermissions.addAll( staticPermissions );
+ }
+ else
+ {
+ for ( i = 0; i < staticPermissions.size(); i++ )
+ {
+ staticPermission = (Permission) staticPermissions.get( i );
+ for ( j = 0; j < permissions.size(); j++ )
+ {
+ permission = (Permission) permissions.get( j );
+ if ( permission.getName().equalsIgnoreCase( staticPermission.getName()
) )
+ {
+ break;
+ }
+ }
+ if ( j >= permissions.size() )
+ {
+ availablePermissions.add( staticPermission );
+ }
+ }
+ }
+ }
+ catch ( ContinuumStoreException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ request.getSession().setAttribute( "addMode", Boolean.valueOf( addMode ) );
+ request.getSession().setAttribute( "accountId", new Integer( accountId ) );
+ request.getSession().setAttribute( "username", username );
+ request.getSession().setAttribute( "password", password );
+ request.getSession().setAttribute( "email", email );
+
+ return "permissions";
+ }
+
+ public String doAddPermission()
+ throws Exception
+ {
+ try
+ {
+ staticPermissions = store.getPermissions();
+ int i, j;
+ for ( i = 0; i < staticPermissions.size(); i++ )
+ {
+ permission = (Permission) staticPermissions.get( i );
+ if ( permission.getName().equalsIgnoreCase( permissionName ) )
+ {
+ permissions = (List) request.getSession().getAttribute( "permissions"
);
+ if ( permissions == null )
+ {
+ permissions = new ArrayList();
+ permissions.add( permission );
+ }
+ else
+ {
+ for ( j = 0; j < permissions.size(); j++ )
+ {
+ Permission permission = (Permission) permissions.get( j );
+ if ( permission.getName().equalsIgnoreCase( permissionName )
)
+ {
+ break;
+ }
+ }
+ if ( j >= permissions.size() )
+ {
+ permissions.add( permission );
+ }
+ }
+ if ( permissions.size() == 1 )
+ {
+ permissionName = ( (Permission) permissions.get( 0 ) ).getName();
+ }
+ break;
+ }
+ }
+ }
+ catch ( ContinuumStoreException e )
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ return ERROR;
+ }
+
+ addMode = ( (Boolean) request.getSession().getAttribute( "addMode" ) ).booleanValue();
+ accountId = ( (Integer) request.getSession().getAttribute( "accountId" ) ).intValue();
+ username = (String) request.getSession().getAttribute( "username" );
+ password = (String) request.getSession().getAttribute( "password" );
+ email = (String) request.getSession().getAttribute( "email" );
+
+ return INPUT;
+ }
+
+ public String doDeletePermission()
+ throws Exception
+ {
+ int i = 0;
+ permissions = (List) request.getSession().getAttribute( "permissions" );
+ for ( ; i < permissions.size(); i++ )
+ {
+ permission = (Permission) permissions.get( i );
+ if ( permission.getName().equalsIgnoreCase( permissionName ) )
+ {
+ permissions.remove( i );
+ break;
+ }
+ if ( permissions.size() == 1 )
+ {
+ permissionName = ( (Permission) permissions.get( 0 ) ).getName();
+ }
+ }
+
+ return INPUT;
+ }
+
+ public List getAvailablePermissions()
+ {
+ return availablePermissions;
+ }
+
+ public String getPermissionName()
+ {
+ return permissionName;
+ }
+
+ public void setPermissionName( String permissionName )
+ {
+ this.permissionName = permissionName;
+ }
+
+ public boolean isAddMode()
+ {
+ return addMode;
+ }
+
+ public void setAddMode( boolean addMode )
+ {
+ this.addMode = addMode;
+ }
+
+ public int getAccountId()
+ {
+ return accountId;
+ }
+
+ public void setAccountId( int accountId )
+ {
+ this.accountId = accountId;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername( String username )
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword( String password )
+ {
+ this.password = password;
+ }
+
+ public String getEmail()
+ {
+ return email;
+ }
+
+ public void setEmail( String email )
+ {
+ this.email = email;
+ }
+
+ public List getPermissions()
+ {
+ return this.permissions;
+ }
+
+ public void setServletRequest( HttpServletRequest request )
+ {
+ this.request = request;
+ }
+
+}
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/EditUserAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java?rev=424993&view=auto
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
(added)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
Mon Jul 24 03:25:03 2006
@@ -0,0 +1,63 @@
+package org.apache.maven.continuum.web.action;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.continuum.Continuum;
+import org.apache.maven.continuum.ContinuumException;
+
+import java.util.Collection;
+
+import org.codehaus.plexus.xwork.action.PlexusActionSupport
+
+/**
+ * @author Henry Isidro
+ *
+ * @plexus.component
+ * role="com.opensymphony.xwork.Action"
+ * role-hint="users"
+ */
+public class UsersAction
+ extends PlexusActionSupport
+{
+ private Continuum continuum;
+
+ private Collection users;
+
+ public String execute()
+ {
+ try
+ {
+ users = continuum.getUsers();
+ }
+ catch ( ContinuumException ce )
+ {
+ addActionError( "Can't get continuum users: " + ce.getMessage() );
+
+ ce.printStackTrace();
+
+ return ERROR;
+ }
+
+ return SUCCESS;
+ }
+
+ public Collection getUsers()
+ {
+ return users;
+ }
+
+}
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/UsersAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=424993&r1=424992&r2=424993&view=diff
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/resources/localization/Continuum.properties
(original)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/resources/localization/Continuum.properties
Mon Jul 24 03:25:03 2006
@@ -330,3 +330,6 @@
deleteUser.page.title = Continuum - Delete User
deleteUser.section.title = Delete User
deleteUser.confirmation.message = Are you sure you want to delete the user "{0}"?
+role.page.title = Continuum - Roles List
+role.section.title = Roles List
+role.rolename = Roles
Added: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp?rev=424993&view=auto
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
(added)
+++ maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
Mon Jul 24 03:25:03 2006
@@ -0,0 +1,30 @@
+<%@ taglib uri="/webwork" prefix="ww" %>
+<%@ taglib uri="/tld/extremecomponents" prefix="ec" %>
+<html>
+ <ww:i18n name="localization.Continuum">
+ <head>
+ <title><ww:text name="role.page.title"/></title>
+ </head>
+ <body>
+ <div id="h3">
+ <h3><ww:text name="role.section.title"/></h3>
+ <ww:set name="permissions" value="permissions" scope="session"/>
+ <ww:set name="availablePermissions" value="availablePermissions" scope="request"/>
+ <ec:table items="availablePermissions"
+ var="availablePermission"
+ showExports="false"
+ showPagination="false"
+ showStatusBar="false"
+ filterable="false"
+ sortable="false">
+ <ec:row>
+ <ec:column property="name" title="role.rolename"/>
+ <ec:column property="actions" title=" ">
+ <input type="button" onclick="window.location.href='${pageContext.request.contextPath}/editUser!doAddPermission.action?permissionName=${pageScope.availablePermission.name}'"
value=<ww:text name="add"/>>
+ </ec:column>
+ </ec:row>
+ </ec:table>
+ </div>
+ </body>
+ </ww:i18n>
+</html>
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-webapp/src/main/webapp/addUserRole.jsp
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
|