[pal-cvs 2466] [198] added user attributes management

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2007年 6月 26日 (火) 13:03:56 JST


Revision: 198
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=198
Author:   shinsuke
Date:     2007-06-26 13:03:56 +0900 (Tue, 26 Jun 2007)

Log Message:
-----------
added user attributes management

Modified Paths:
--------------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SecurityProviderLogic.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/UserManagementService.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserListPage.java
    pal-admin/trunk/src/main/resources/appMessages.properties
    pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/user/label.properties
    pal-admin/trunk/src/main/webapp/view/user/userEdit.html
    pal-admin/trunk/src/main/webapp/view/user/userGroupEdit.html
    pal-admin/trunk/src/main/webapp/view/user/userProfilingRuleEdit.html
    pal-admin/trunk/src/main/webapp/view/user/userRoleEdit.html

Added Paths:
-----------
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/pager/UserAttributePager.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/AbstractUserAttributePage.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeConfirmPage.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeEditPage.java
    pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeListPage.java
    pal-admin/trunk/src/main/webapp/view/user/userAttributeConfirm.html
    pal-admin/trunk/src/main/webapp/view/user/userAttributeEdit.html
    pal-admin/trunk/src/main/webapp/view/user/userAttributeList.html


-------------- next part --------------
Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SecurityProviderLogic.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SecurityProviderLogic.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/logic/SecurityProviderLogic.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -20,9 +20,13 @@
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.prefs.BackingStoreException;
+import java.util.prefs.Preferences;
 
 import javax.security.auth.Subject;
 
@@ -34,6 +38,7 @@
 import jp.sf.pal.admin.entity.User;
 import jp.sf.pal.admin.pager.GroupPager;
 import jp.sf.pal.admin.pager.RolePager;
+import jp.sf.pal.admin.pager.UserAttributePager;
 import jp.sf.pal.admin.pager.UserPager;
 import jp.sf.pal.admin.util.PortalComponentUtil;
 import jp.sf.pal.admin.util.PALAdminUtil;
@@ -64,8 +69,7 @@
     /**
      * Logger for this class
      */
-    private static final Logger logger = Logger
-            .getLogger(SecurityProviderLogic.class);
+    private static final Logger logger = Logger.getLogger(SecurityProviderLogic.class);
 
     private transient SecurityProvider securityProvider = null;
 
@@ -94,8 +98,7 @@
     {
         if (authenticationProviderProxy == null)
         {
-            authenticationProviderProxy = getSecurityProvider()
-                    .getAuthenticationProviderProxy();
+            authenticationProviderProxy = getSecurityProvider().getAuthenticationProviderProxy();
         }
         return authenticationProviderProxy;
     }
@@ -103,8 +106,7 @@
     /**
      * @param authenticationProviderProxy the authenticationProviderProxy to set
      */
-    public void setAuthenticationProviderProxy(
-            AuthenticationProviderProxy authenticationProviderProxy)
+    public void setAuthenticationProviderProxy(AuthenticationProviderProxy authenticationProviderProxy)
     {
         this.authenticationProviderProxy = authenticationProviderProxy;
     }
@@ -116,8 +118,7 @@
     {
         if (roleSecurityHandler == null)
         {
-            roleSecurityHandler = getSecurityProvider()
-                    .getRoleSecurityHandler();
+            roleSecurityHandler = getSecurityProvider().getRoleSecurityHandler();
         }
         return roleSecurityHandler;
     }
@@ -137,8 +138,7 @@
     {
         if (groupSecurityHandler == null)
         {
-            groupSecurityHandler = getSecurityProvider()
-                    .getGroupSecurityHandler();
+            groupSecurityHandler = getSecurityProvider().getGroupSecurityHandler();
         }
         return groupSecurityHandler;
     }
@@ -146,8 +146,7 @@
     /**
      * @param groupSecurityHandler the groupSecurityHandler to set
      */
-    public void setGroupSecurityHandler(
-            GroupSecurityHandler groupSecurityHandler)
+    public void setGroupSecurityHandler(GroupSecurityHandler groupSecurityHandler)
     {
         this.groupSecurityHandler = groupSecurityHandler;
     }
@@ -290,9 +289,7 @@
 
         if (pager.getAuthenticationProviderName() == null)
         {
-            pager
-                    .setAuthenticationProviderName(getAuthenticationProviderProxy()
-                            .getDefaultAuthenticationProvider());
+            pager.setAuthenticationProviderName(getAuthenticationProviderProxy().getDefaultAuthenticationProvider());
         }
 
         StringBuffer fb = new StringBuffer("AdvanceFilter: ");
@@ -303,25 +300,20 @@
         try
         {
             // set count
-            pager.setCount(getAuthenticationProviderProxy().getUserCount(
-                    fb.toString(), pager.getAuthenticationProviderName()));
+            pager.setCount(getAuthenticationProviderProxy().getUserCount(fb.toString(), pager.getAuthenticationProviderName()));
 
             int startAtIndex = pager.getOffset() + 1;
             int endAtIndex = startAtIndex + pager.getLimit();
-            fb.append(", startAtIndex=").append(startAtIndex).append(
-                    ", endAtIndex=").append(endAtIndex);
+            fb.append(", startAtIndex=").append(startAtIndex).append(", endAtIndex=").append(endAtIndex);
 
-            List<Principal> principals = getAuthenticationProviderProxy()
-                    .getUserPrincipals(fb.toString(),
-                            pager.getAuthenticationProviderName());
+            List<Principal> principals = getAuthenticationProviderProxy().getUserPrincipals(fb.toString(),
+                    pager.getAuthenticationProviderName());
 
             int size = principals.size();
             if (logger.isDebugEnabled())
             {
-                logger.debug("getUsers(UserPager) - pager.getFilter()="
-                        + pager.getFilter());
-                logger.debug("getUsers(UserPager) - size=" + size + ", filter="
-                        + fb.toString());
+                logger.debug("getUsers(UserPager) - pager.getFilter()=" + pager.getFilter());
+                logger.debug("getUsers(UserPager) - size=" + size + ", filter=" + fb.toString());
             }
 
             for (int i = 0; i < size; i++)
@@ -350,12 +342,10 @@
             return;
         }
 
-        if (PALAdminUtil.isEmpty(user.getName())
-                || PALAdminUtil.isEmpty(user.getPassword()))
+        if (PALAdminUtil.isEmpty(user.getName()) || PALAdminUtil.isEmpty(user.getPassword()))
         {
-            throw new PALAdminException(
-                    "Invalid user name or password. username=" + user.getName()
-                            + ", password=" + user.getPassword());
+            throw new PALAdminException("Invalid user name or password. username=" + user.getName() + ", password="
+                    + user.getPassword());
         }
 
         //TODO check duplicate name
@@ -365,14 +355,12 @@
             getUserManager().addUser(user.getName(), user.getPassword());
 
             // Set updateRequired
-            PasswordCredential credential = getPasswordCredential(user
-                    .getName());
+            PasswordCredential credential = getPasswordCredential(user.getName());
             if (credential != null)
             {
                 if (user.isUpdateRequired() != credential.isUpdateRequired())
                 {
-                    getUserManager().setPasswordUpdateRequired(user.getName(),
-                            user.isUpdateRequired());
+                    getUserManager().setPasswordUpdateRequired(user.getName(), user.isUpdateRequired());
                 }
             }
 
@@ -382,26 +370,20 @@
                 Role role = ite.next();
                 if (!PALAdminUtil.isEmpty(role.getName()))
                 {
-                    getRoleManager().addRoleToUser(user.getName(),
-                            role.getName());
+                    getRoleManager().addRoleToUser(user.getName(), role.getName());
                 }
             }
 
             // Add principal rule
             Principal principal = getUserPrincipal(user.getName());
-            for (Iterator<PrincipalRule> ite = user.getPrincipalRules()
-                    .iterator(); ite.hasNext();)
+            for (Iterator<PrincipalRule> ite = user.getPrincipalRules().iterator(); ite.hasNext();)
 
             {
                 PrincipalRule principalRule = ite.next();
                 if (!PALAdminUtil.isEmpty(principalRule.getLocatorName())
-                        && !PALAdminUtil.isEmpty(principalRule
-                                .getProfilingRuleName()))
+                        && !PALAdminUtil.isEmpty(principalRule.getProfilingRuleName()))
                 {
-                    getProfiler().setRuleForPrincipal(
-                            principal,
-                            getProfiler().getRule(
-                                    principalRule.getProfilingRuleName()),
+                    getProfiler().setRuleForPrincipal(principal, getProfiler().getRule(principalRule.getProfilingRuleName()),
                             principalRule.getLocatorName());
                 }
             }
@@ -412,8 +394,7 @@
                 //TODO where is template folder
                 String templateFolder = PALAdminConstants.DEFAULT_TEMPLATE_FOLDER;
                 Folder source = getPageManager().getFolder(templateFolder);
-                getPageManager().deepCopyFolder(source,
-                        Folder.USER_FOLDER + user.getName(), user.getName());
+                getPageManager().deepCopyFolder(source, Folder.USER_FOLDER + user.getName(), user.getName());
             }
         }
         catch (Exception e)
@@ -425,16 +406,13 @@
 
     private Subject getUserSubject(String username) throws SecurityException
     {
-        org.apache.jetspeed.security.User user = getUserManager().getUser(
-                username);
+        org.apache.jetspeed.security.User user = getUserManager().getUser(username);
         return user.getSubject();
     }
 
-    private PasswordCredential getPasswordCredential(String username)
-            throws SecurityException
+    private PasswordCredential getPasswordCredential(String username) throws SecurityException
     {
-        org.apache.jetspeed.security.User user = getUserManager().getUser(
-                username);
+        org.apache.jetspeed.security.User user = getUserManager().getUser(username);
 
         PasswordCredential credential = null;
 
@@ -465,11 +443,9 @@
             getUserManager().removeUser(user.getName());
 
             // Remove user's psml folder
-            if (getPageManager().folderExists(
-                    Folder.USER_FOLDER + user.getName()))
+            if (getPageManager().folderExists(Folder.USER_FOLDER + user.getName()))
             {
-                Folder folder = pageManager.getFolder(Folder.USER_FOLDER
-                        + user.getName());
+                Folder folder = pageManager.getFolder(Folder.USER_FOLDER + user.getName());
                 pageManager.removeFolder(folder);
             }
 
@@ -485,8 +461,7 @@
         User user;
         try
         {
-            org.apache.jetspeed.security.User j2user = getUserManager()
-                    .getUser(username);
+            org.apache.jetspeed.security.User j2user = getUserManager().getUser(username);
             if (j2user == null)
             {
                 return null;
@@ -530,69 +505,53 @@
         {
             // change password
             boolean passwordSet = false;
-            if (user.getPassword() != null
-                    && user.getPassword().trim().length() > 0)
+            if (user.getPassword() != null && user.getPassword().trim().length() > 0)
             {
-                getUserManager().setPassword(user.getName(), null,
-                        user.getPassword());
+                getUserManager().setPassword(user.getName(), null, user.getPassword());
                 passwordSet = true;
             }
 
-            PasswordCredential credential = getPasswordCredential(user
-                    .getName());
+            PasswordCredential credential = getPasswordCredential(user.getName());
             if (credential != null)
             {
                 // update update required
                 if (user.isUpdateRequired() != credential.isUpdateRequired())
                 {
-                    getUserManager().setPasswordUpdateRequired(user.getName(),
-                            user.isUpdateRequired());
+                    getUserManager().setPasswordUpdateRequired(user.getName(), user.isUpdateRequired());
                 }
 
                 // update user enabled
                 if (user.isUserEnabled() != credential.isEnabled())
                 {
-                    userManager.setPasswordEnabled(user.getName(), user
-                            .isUserEnabled());
+                    userManager.setPasswordEnabled(user.getName(), user.isUserEnabled());
                 }
 
                 // update expired
-                if (!passwordSet
-                        && user.getExpires().equals(
-                                PALAdminConstants.USER_CREDENTIAL_ACTIVE))
+                if (!passwordSet && user.getExpires().equals(PALAdminConstants.USER_CREDENTIAL_ACTIVE))
                 {
                     //TODO is it correct?
                     userManager.setPasswordExpiration(user.getName(), null);
                 }
-                else if (!passwordSet
-                        && user.getExpires().equals(
-                                PALAdminConstants.USER_CREDENTIAL_EXPIRED))
+                else if (!passwordSet && user.getExpires().equals(PALAdminConstants.USER_CREDENTIAL_EXPIRED))
                 {
-                    java.sql.Date today = new java.sql.Date(Calendar
-                            .getInstance().getTimeInMillis());
+                    java.sql.Date today = new java.sql.Date(Calendar.getInstance().getTimeInMillis());
                     userManager.setPasswordExpiration(user.getName(), today);
                 }
-                else if (user.getExpires().equals(
-                        PALAdminConstants.USER_CREDENTIAL_EXTEND))
+                else if (user.getExpires().equals(PALAdminConstants.USER_CREDENTIAL_EXTEND))
                 {
                     userManager.setPasswordExpiration(user.getName(), null);
                 }
-                else if (user.getExpires().equals(
-                        PALAdminConstants.USER_CREDENTIAL_EXTEND_UNLIMITED))
+                else if (user.getExpires().equals(PALAdminConstants.USER_CREDENTIAL_EXTEND_UNLIMITED))
                 {
-                    userManager.setPasswordExpiration(user.getName(),
-                            InternalCredential.MAX_DATE);
+                    userManager.setPasswordExpiration(user.getName(), InternalCredential.MAX_DATE);
                 }
 
             }
         }
         catch (SecurityException e)
         {
-            logger.error("Could not update user information correctly. user="
-                    + user, e);
-            throw new PALAdminException(
-                    "Could not update user information correctly. user=" + user,
-                    e);
+            logger.error("Could not update user information correctly. user=" + user, e);
+            throw new PALAdminException("Could not update user information correctly. user=" + user, e);
         }
     }
 
@@ -602,48 +561,37 @@
         {
             if (getGroupManager().groupExists(group.getName()))
             {
-                getGroupManager().addUserToGroup(user.getName(),
-                        group.getName());
+                getGroupManager().addUserToGroup(user.getName(), group.getName());
             }
             else
             {
-                throw new PALAdminException("The group does not exist. group="
-                        + group);
+                throw new PALAdminException("The group does not exist. group=" + group);
             }
         }
         catch (SecurityException e)
         {
-            logger.error("Could not add the group to the user. user=" + user
-                    + ", group=" + group, e);
-            throw new PALAdminException(
-                    "Could not add the group to the user. user=" + user
-                            + ", group=" + group, e);
+            logger.error("Could not add the group to the user. user=" + user + ", group=" + group, e);
+            throw new PALAdminException("Could not add the group to the user. user=" + user + ", group=" + group, e);
         }
     }
 
-    public void removeGroupFromUser(User user, Group group)
-            throws PALAdminException
+    public void removeGroupFromUser(User user, Group group) throws PALAdminException
     {
         try
         {
             if (getGroupManager().groupExists(group.getName()))
             {
-                getGroupManager().removeUserFromGroup(user.getName(),
-                        group.getName());
+                getGroupManager().removeUserFromGroup(user.getName(), group.getName());
             }
             else
             {
-                throw new PALAdminException("The group does not exist. group="
-                        + group);
+                throw new PALAdminException("The group does not exist. group=" + group);
             }
         }
         catch (SecurityException e)
         {
-            logger.error("Could not remove the group from the user. user="
-                    + user + ", group=" + group, e);
-            throw new PALAdminException(
-                    "Could not remove the group from the user. user=" + user
-                            + ", group=" + group, e);
+            logger.error("Could not remove the group from the user. user=" + user + ", group=" + group, e);
+            throw new PALAdminException("Could not remove the group from the user. user=" + user + ", group=" + group, e);
         }
 
     }
@@ -663,43 +611,33 @@
             }
             else
             {
-                throw new PALAdminException("The role does not exist. role="
-                        + role);
+                throw new PALAdminException("The role does not exist. role=" + role);
             }
         }
         catch (SecurityException e)
         {
-            logger.error("Could not add the role to the user. user=" + user
-                    + ", role=" + role, e);
-            throw new PALAdminException(
-                    "Could not add the role to the user. user=" + user
-                            + ", role=" + role, e);
+            logger.error("Could not add the role to the user. user=" + user + ", role=" + role, e);
+            throw new PALAdminException("Could not add the role to the user. user=" + user + ", role=" + role, e);
         }
     }
 
-    public void removeRoleFromUser(User user, Role role)
-            throws PALAdminException
+    public void removeRoleFromUser(User user, Role role) throws PALAdminException
     {
         try
         {
             if (getRoleManager().roleExists(role.getName()))
             {
-                getRoleManager().removeRoleFromUser(user.getName(),
-                        role.getName());
+                getRoleManager().removeRoleFromUser(user.getName(), role.getName());
             }
             else
             {
-                throw new PALAdminException("The role does not exist. role="
-                        + role);
+                throw new PALAdminException("The role does not exist. role=" + role);
             }
         }
         catch (SecurityException e)
         {
-            logger.error("Could not remove the role from the user. user="
-                    + user + ", role=" + role, e);
-            throw new PALAdminException(
-                    "Could not remove the role from the user. user=" + user
-                            + ", role=" + role, e);
+            logger.error("Could not remove the role from the user. user=" + user + ", role=" + role, e);
+            throw new PALAdminException("Could not remove the role from the user. user=" + user + ", role=" + role, e);
         }
 
     }
@@ -709,20 +647,16 @@
         return getRoleManager().roleExists(role.getName());
     }
 
-    public void removePrincipalRuleFromUser(User user,
-            PrincipalRule principalRule) throws PALAdminException
+    public void removePrincipalRuleFromUser(User user, PrincipalRule principalRule) throws PALAdminException
     {
         try
         {
-            Iterator<org.apache.jetspeed.profiler.rules.PrincipalRule> it = getProfiler()
-                    .getRulesForPrincipal(getUserPrincipal(user.getName()))
-                    .iterator();
+            Iterator<org.apache.jetspeed.profiler.rules.PrincipalRule> it = getProfiler().getRulesForPrincipal(
+                    getUserPrincipal(user.getName())).iterator();
             while (it.hasNext())
             {
-                org.apache.jetspeed.profiler.rules.PrincipalRule rule = it
-                        .next();
-                if (rule.getLocatorName()
-                        .equals(principalRule.getLocatorName()))
+                org.apache.jetspeed.profiler.rules.PrincipalRule rule = it.next();
+                if (rule.getLocatorName().equals(principalRule.getLocatorName()))
                 {
                     //TODO does not work??
                     getProfiler().deletePrincipalRule(rule);
@@ -732,12 +666,9 @@
         }
         catch (Exception e)
         {
-            logger.error(
-                    "Could not remove the principalRule from the user. user="
-                            + user + ", principalRule=" + principalRule, e);
-            throw new PALAdminException(
-                    "Could not remove the principalRule from the user. user="
-                            + user + ", principalRule=" + principalRule, e);
+            logger.error("Could not remove the principalRule from the user. user=" + user + ", principalRule=" + principalRule, e);
+            throw new PALAdminException("Could not remove the principalRule from the user. user=" + user + ", principalRule="
+                    + principalRule, e);
         }
 
     }
@@ -759,8 +690,7 @@
         }
 
         List<Role> roleList = new ArrayList<Role>();
-        List<Principal> principals = getRoleSecurityHandler()
-                .getRolePrincipals(pager.getFilter());
+        List<Principal> principals = getRoleSecurityHandler().getRolePrincipals(pager.getFilter());
 
         // set count
         pager.setCount(principals.size());
@@ -771,10 +701,8 @@
         int size = principals.size();
         if (logger.isDebugEnabled())
         {
-            logger.debug("getRoles(RolePager) - pager.getFilter()="
-                    + pager.getFilter());
-            logger.debug("getRoles(RolePager) - offset=" + offset + ", limit="
-                    + limit + ", size=" + size);
+            logger.debug("getRoles(RolePager) - pager.getFilter()=" + pager.getFilter());
+            logger.debug("getRoles(RolePager) - offset=" + offset + ", limit=" + limit + ", size=" + size);
         }
         for (int i = offset; i < offset + limit && i < size; i++)
         {
@@ -834,8 +762,7 @@
         }
 
         List<String> roleList = new ArrayList<String>();
-        List<Principal> principals = getRoleSecurityHandler()
-                .getRolePrincipals("");
+        List<Principal> principals = getRoleSecurityHandler().getRolePrincipals("");
 
         for (Iterator<Principal> ite = principals.iterator(); ite.hasNext();)
         {
@@ -846,25 +773,18 @@
 
     }
 
-    public void addPrincipalRuleToUser(User user, PrincipalRule principalRule)
-            throws PALAdminException
+    public void addPrincipalRuleToUser(User user, PrincipalRule principalRule) throws PALAdminException
     {
         try
         {
-            getProfiler()
-                    .setRuleForPrincipal(
-                            getUserPrincipal(user.getName()),
-                            getProfiler().getRule(
-                                    principalRule.getProfilingRuleName()),
-                            principalRule.getLocatorName());
+            getProfiler().setRuleForPrincipal(getUserPrincipal(user.getName()),
+                    getProfiler().getRule(principalRule.getProfilingRuleName()), principalRule.getLocatorName());
         }
         catch (SecurityException e)
         {
-            logger.error("Could not add the principal rule to user. user="
-                    + user + ", principalRule=" + principalRule, e);
-            throw new PALAdminException(
-                    "Could not add the principal rule to user. user=" + user
-                            + ", principalRule=" + principalRule, e);
+            logger.error("Could not add the principal rule to user. user=" + user + ", principalRule=" + principalRule, e);
+            throw new PALAdminException("Could not add the principal rule to user. user=" + user + ", principalRule="
+                    + principalRule, e);
         }
     }
 
@@ -885,8 +805,7 @@
         }
 
         List<Group> groupList = new ArrayList<Group>();
-        List<Principal> principals = getGroupSecurityHandler()
-                .getGroupPrincipals(pager.getFilter());
+        List<Principal> principals = getGroupSecurityHandler().getGroupPrincipals(pager.getFilter());
 
         // set count
         pager.setCount(principals.size());
@@ -897,10 +816,8 @@
         int size = principals.size();
         if (logger.isDebugEnabled())
         {
-            logger.debug("getGroups(GroupPager) - pager.getFilter()="
-                    + pager.getFilter());
-            logger.debug("getGroups(GroupPager) - offset=" + offset
-                    + ", limit=" + limit + ", size=" + size);
+            logger.debug("getGroups(GroupPager) - pager.getFilter()=" + pager.getFilter());
+            logger.debug("getGroups(GroupPager) - offset=" + offset + ", limit=" + limit + ", size=" + size);
         }
         for (int i = offset; i < offset + limit && i < size; i++)
         {
@@ -960,8 +877,7 @@
         }
 
         List<String> groupList = new ArrayList<String>();
-        List<Principal> principals = getGroupSecurityHandler()
-                .getGroupPrincipals("");
+        List<Principal> principals = getGroupSecurityHandler().getGroupPrincipals("");
 
         for (Iterator<Principal> ite = principals.iterator(); ite.hasNext();)
         {
@@ -984,8 +900,7 @@
         }
 
         List<String> groupList = new ArrayList<String>();
-        Set<Principal> principals = getSecurityProvider()
-                .getSecurityMappingHandler().getGroupPrincipals(username);
+        Set<Principal> principals = getSecurityProvider().getSecurityMappingHandler().getGroupPrincipals(username);
         for (Iterator<Principal> ite = principals.iterator(); ite.hasNext();)
         {
             groupList.add(ite.next().getName());
@@ -1006,8 +921,7 @@
         }
 
         List<String> roleList = new ArrayList<String>();
-        Set<Principal> principals = getSecurityProvider()
-                .getSecurityMappingHandler().getRolePrincipals(username);
+        Set<Principal> principals = getSecurityProvider().getSecurityMappingHandler().getRolePrincipals(username);
         for (Iterator<Principal> ite = principals.iterator(); ite.hasNext();)
         {
             roleList.add(ite.next().getName());
@@ -1018,16 +932,125 @@
     }
 
     //
+    // User Attribute
+    //
+    public void insertUserAttribute(String username, String key, String value) throws PALAdminException
+    {
+        if (username == null || key == null || value == null)
+        {
+            throw new PALAdminException("Invalid value(s).");
+        }
+
+        try
+        {
+            org.apache.jetspeed.security.User j2user = getUserManager().getUser(username);
+
+            j2user.getUserAttributes().put(key, value);
+        }
+        catch (SecurityException e)
+        {
+            logger.error("Could not access user attributes.", e);
+            throw new PALAdminException(e);
+        }
+    }
+
+    public void deleteUserAttribute(String username, String key) throws PALAdminException
+    {
+        if (username == null || key == null)
+        {
+            throw new PALAdminException("Invalid value(s).");
+        }
+
+        try
+        {
+            org.apache.jetspeed.security.User j2user = getUserManager().getUser(username);
+
+            j2user.getUserAttributes().remove(key);
+        }
+        catch (SecurityException e)
+        {
+            logger.error("Could not access user attributes.", e);
+            throw new PALAdminException(e);
+        }
+    }
+
+    public String getUserAttributeValue(String username, String key) throws PALAdminException
+    {
+        if (username == null || key == null)
+        {
+            return null;
+        }
+
+        try
+        {
+            org.apache.jetspeed.security.User j2user = getUserManager().getUser(username);
+
+            return j2user.getUserAttributes().get(key, null);
+        }
+        catch (SecurityException e)
+        {
+            logger.error("Could not get user attributes.", e);
+            throw new PALAdminException(e);
+        }
+    }
+
+    public Map<String, String> getUserAttributes(UserAttributePager pager) throws PALAdminException
+    {
+        Map<String, String> map = new HashMap<String, String>();
+
+        if (pager.getUser() == null || pager.getUser().getName() == null)
+        {
+            return map;
+        }
+
+        Preferences prefs;
+        String[] keys;
+        try
+        {
+            org.apache.jetspeed.security.User j2user = getUserManager().getUser(pager.getUser().getName());
+
+            prefs = j2user.getUserAttributes();
+            keys = prefs.keys();
+        }
+        catch (SecurityException e)
+        {
+            logger.error("Could not get user attributes.", e);
+            throw new PALAdminException(e);
+        }
+        catch (BackingStoreException e)
+        {
+            logger.error("Could not access user attributes.", e);
+            throw new PALAdminException(e);
+        }
+
+        // set count
+        pager.setCount(keys.length);
+
+        // create list
+        int offset = pager.getOffset();
+        int limit = pager.getLimit();
+        int size = keys.length;
+        if (logger.isDebugEnabled())
+        {
+            logger.debug("getUserAttributess(GroupPager) - offset=" + offset + ", limit=" + limit + ", size=" + size);
+        }
+        for (int i = offset; i < offset + limit && i < size; i++)
+        {
+            map.put(keys[i], prefs.get(keys[i], ""));
+        }
+
+        return map;
+    }
+
+    //
     // ProfilingRule
     //
     public List<String> getProfilingRuleNames()
     {
         ArrayList<String> list = new ArrayList<String>();
-        for (Iterator<org.apache.jetspeed.profiler.rules.ProfilingRule> ite = getProfiler()
-                .getRules().iterator(); ite.hasNext();)
+        for (Iterator<org.apache.jetspeed.profiler.rules.ProfilingRule> ite = getProfiler().getRules().iterator(); ite.hasNext();)
         {
-            org.apache.jetspeed.profiler.rules.ProfilingRule profilingRule = ite
-                    .next();
+            org.apache.jetspeed.profiler.rules.ProfilingRule profilingRule = ite.next();
             list.add(profilingRule.getId());
         }
         return list;
@@ -1039,16 +1062,13 @@
         try
         {
             Principal userPrincipal = getUserPrincipal(user.getName());
-            for (Iterator<org.apache.jetspeed.profiler.rules.PrincipalRule> ite = getProfiler()
-                    .getRulesForPrincipal(userPrincipal).iterator(); ite
-                    .hasNext();)
+            for (Iterator<org.apache.jetspeed.profiler.rules.PrincipalRule> ite = getProfiler().getRulesForPrincipal(userPrincipal)
+                    .iterator(); ite.hasNext();)
             {
-                org.apache.jetspeed.profiler.rules.PrincipalRule rule = ite
-                        .next();
+                org.apache.jetspeed.profiler.rules.PrincipalRule rule = ite.next();
                 PrincipalRule principalRule = new PrincipalRule();
                 principalRule.setLocatorName(rule.getLocatorName());
-                principalRule.setProfilingRuleName(rule.getProfilingRule()
-                        .getId());
+                principalRule.setProfilingRuleName(rule.getProfilingRule().getId());
                 list.add(principalRule);
             }
         }
@@ -1059,11 +1079,9 @@
         return list;
     }
 
-    private Principal getUserPrincipal(String username)
-            throws SecurityException
+    private Principal getUserPrincipal(String username) throws SecurityException
     {
-        return PALAdminUtil.getPrincipal(getUserSubject(username),
-                UserPrincipal.class);
+        return PALAdminUtil.getPrincipal(getUserSubject(username), UserPrincipal.class);
     }
 
 }

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/pager/UserAttributePager.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/pager/UserAttributePager.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/pager/UserAttributePager.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,32 @@
+package jp.sf.pal.admin.pager;
+
+import java.io.Serializable;
+
+import jp.sf.pal.admin.entity.User;
+
+public class UserAttributePager extends DefaultPager implements Serializable
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2370360279133767056L;
+
+    private User user;
+
+    /**
+     * @return the user
+     */
+    public User getUser()
+    {
+        return user;
+    }
+
+    /**
+     * @param user the user to set
+     */
+    public void setUser(User user)
+    {
+        this.user = user;
+    }
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/pager/UserAttributePager.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/UserManagementService.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/UserManagementService.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/service/UserManagementService.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -18,9 +18,11 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import jp.sf.pal.admin.PALAdminConstants;
 import jp.sf.pal.admin.PALAdminException;
@@ -30,10 +32,14 @@
 import jp.sf.pal.admin.entity.Role;
 import jp.sf.pal.admin.entity.User;
 import jp.sf.pal.admin.logic.SecurityProviderLogic;
+import jp.sf.pal.admin.pager.UserAttributePager;
 import jp.sf.pal.admin.pager.UserPager;
 import jp.sf.pal.admin.util.PALAdminUtil;
 import jp.sf.pal.admin.util.PagerUtil;
 import jp.sf.pal.admin.web.user.AbstractUserPage;
+import jp.sf.pal.admin.web.user.UserAttributeConfirmPage;
+import jp.sf.pal.admin.web.user.UserAttributeEditPage;
+import jp.sf.pal.admin.web.user.UserAttributeListPage;
 import jp.sf.pal.admin.web.user.UserEditPage;
 import jp.sf.pal.admin.web.user.UserGroupEditPage;
 import jp.sf.pal.admin.web.user.UserListPage;
@@ -51,6 +57,8 @@
 
     private UserPager userPager;
 
+    private UserAttributePager userAttributePager;
+
     private SecurityProviderLogic securityProviderLogic;
 
     private UserDxo userDxo;
@@ -68,8 +76,7 @@
     /**
      * @param securityProviderLogic the securityProviderLogic to set
      */
-    public void setSecurityProviderLogic(
-            SecurityProviderLogic securityProviderLogic)
+    public void setSecurityProviderLogic(SecurityProviderLogic securityProviderLogic)
     {
         this.securityProviderLogic = securityProviderLogic;
     }
@@ -107,6 +114,22 @@
     }
 
     /**
+     * @return the userAttributePager
+     */
+    public UserAttributePager getUserAttributePager()
+    {
+        return userAttributePager;
+    }
+
+    /**
+     * @param userAttributePager the userAttributePager to set
+     */
+    public void setUserAttributePager(UserAttributePager userAttributePager)
+    {
+        this.userAttributePager = userAttributePager;
+    }
+
+    /**
      * @return the labelHelper
      */
     public LabelHelper getLabelHelper()
@@ -127,9 +150,7 @@
         UserPager pager = getUserPager();
 
         // check page action
-        PagerUtil.updatePageNumber(pager,
-                PALAdminConstants.PREVIOUS_PAGE_NUMBER,
-                PALAdminConstants.NEXT_PAGE_NUMBER);
+        PagerUtil.updatePageNumber(pager, PALAdminConstants.PREVIOUS_PAGE_NUMBER, PALAdminConstants.NEXT_PAGE_NUMBER);
 
         // set user list
         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
@@ -155,8 +176,7 @@
 
     public List<Map<String, String>> getProfilingRuleNames()
     {
-        return PALAdminUtil.createItems(securityProviderLogic
-                .getProfilingRuleNames().iterator());
+        return PALAdminUtil.createItems(securityProviderLogic.getProfilingRuleNames().iterator());
     }
 
     public boolean isUserExists(String username)
@@ -181,14 +201,10 @@
         // set pull-down
         LabelHelper labelHelper = getLabelHelper();
         List<Map<String, String>> list = new ArrayList<Map<String, String>>();
-        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Active"),
-                PALAdminConstants.USER_CREDENTIAL_ACTIVE));
-        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Expired"),
-                PALAdminConstants.USER_CREDENTIAL_EXPIRED));
-        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Extend"),
-                PALAdminConstants.USER_CREDENTIAL_EXTEND));
-        list.add(PALAdminUtil.createItem(labelHelper
-                .getLabelValue("ExtendUnlimited"),
+        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Active"), PALAdminConstants.USER_CREDENTIAL_ACTIVE));
+        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Expired"), PALAdminConstants.USER_CREDENTIAL_EXPIRED));
+        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("Extend"), PALAdminConstants.USER_CREDENTIAL_EXTEND));
+        list.add(PALAdminUtil.createItem(labelHelper.getLabelValue("ExtendUnlimited"),
                 PALAdminConstants.USER_CREDENTIAL_EXTEND_UNLIMITED));
         page.setExpiresItems(list);
     }
@@ -208,14 +224,12 @@
 
     public List<Map<String, String>> getGroupNames()
     {
-        return PALAdminUtil.createItems(securityProviderLogic.getGroupNames()
-                .iterator());
+        return PALAdminUtil.createItems(securityProviderLogic.getGroupNames().iterator());
     }
 
     public List<Map<String, String>> getGroupNamesForUsername(String username)
     {
-        return PALAdminUtil.createItems(securityProviderLogic
-                .getGroupNamesForUsername(username).iterator());
+        return PALAdminUtil.createItems(securityProviderLogic.getGroupNamesForUsername(username).iterator());
     }
 
     public void addGroupToUser(UserGroupEditPage page) throws PALAdminException
@@ -227,8 +241,7 @@
         getSecurityProviderLogic().addUserToGroup(user, group);
     }
 
-    public void removeGroupsFromUser(UserGroupEditPage page)
-            throws PALAdminException
+    public void removeGroupsFromUser(UserGroupEditPage page) throws PALAdminException
     {
         List<String> failedGroups = new ArrayList<String>();
         User user = new User();
@@ -249,8 +262,7 @@
         }
         if (failedGroups.size() > 0)
         {
-            throw new PALAdminException("Could not remove groups: "
-                    + failedGroups);
+            throw new PALAdminException("Could not remove groups: " + failedGroups);
         }
     }
 
@@ -267,8 +279,7 @@
         {
             return false;
         }
-        Iterator<String> ite = getSecurityProviderLogic()
-                .getGroupNamesForUsername(username).iterator();
+        Iterator<String> ite = getSecurityProviderLogic().getGroupNamesForUsername(username).iterator();
         while (ite.hasNext())
         {
             if (groupname.equals(ite.next()))
@@ -300,14 +311,12 @@
 
     public List<Map<String, String>> getRoleNames()
     {
-        return PALAdminUtil.createItems(securityProviderLogic.getRoleNames()
-                .iterator());
+        return PALAdminUtil.createItems(securityProviderLogic.getRoleNames().iterator());
     }
 
     public List<Map<String, String>> getRoleNamesForUsername(String username)
     {
-        return PALAdminUtil.createItems(securityProviderLogic
-                .getRoleNamesForUsername(username).iterator());
+        return PALAdminUtil.createItems(securityProviderLogic.getRoleNamesForUsername(username).iterator());
     }
 
     public void addRoleToUser(UserRoleEditPage page) throws PALAdminException
@@ -319,8 +328,7 @@
         getSecurityProviderLogic().addUserToRole(user, role);
     }
 
-    public void removeRolesFromUser(UserRoleEditPage page)
-            throws PALAdminException
+    public void removeRolesFromUser(UserRoleEditPage page) throws PALAdminException
     {
         List<String> failedRoles = new ArrayList<String>();
         User user = new User();
@@ -341,8 +349,7 @@
         }
         if (failedRoles.size() > 0)
         {
-            throw new PALAdminException("Could not remove roles: "
-                    + failedRoles);
+            throw new PALAdminException("Could not remove roles: " + failedRoles);
         }
     }
 
@@ -359,8 +366,7 @@
         {
             return false;
         }
-        Iterator<String> ite = getSecurityProviderLogic()
-                .getRoleNamesForUsername(username).iterator();
+        Iterator<String> ite = getSecurityProviderLogic().getRoleNamesForUsername(username).iterator();
         while (ite.hasNext())
         {
             if (rolename.equals(ite.next()))
@@ -372,25 +378,80 @@
         return false;
     }
 
+    public void loadPage(UserAttributeListPage page) throws PALAdminException
+    {
+        UserAttributePager pager = getUserAttributePager();
+
+        User user = new User();
+        user.setName(page.getName());
+        pager.setUser(user);
+
+        // check page action
+        PagerUtil.updatePageNumber(pager, PALAdminConstants.PREVIOUS_PAGE_NUMBER, PALAdminConstants.NEXT_PAGE_NUMBER);
+
+        // set user list
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+        for (Iterator<Entry<String, String>> ite = getSecurityProviderLogic().getUserAttributes(pager).entrySet().iterator(); ite
+                .hasNext();)
+        {
+            Entry<String, String> entry = ite.next();
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("key", entry.getKey());
+            map.put("value", entry.getValue());
+            list.add(map);
+        }
+        PagerUtil.updatePagerPage(page, pager);
+        page.setUserAttributeItems(list);
+    }
+
+    public void loadPage(UserAttributeEditPage page) throws PALAdminException
+    {
+        page.setValue(getSecurityProviderLogic().getUserAttributeValue(page.getName(), page.getKey()));
+    }
+
+    public void loadPage(UserAttributeConfirmPage page) throws PALAdminException
+    {
+        page.setValue(getSecurityProviderLogic().getUserAttributeValue(page.getName(), page.getKey()));
+    }
+
+    public void insert(UserAttributeConfirmPage page) throws PALAdminException
+    {
+        if (page.getValue() == null)
+        {
+            page.setValue("");
+        }
+        getSecurityProviderLogic().insertUserAttribute(page.getName(), page.getKey(), page.getValue());
+    }
+
+    public void update(UserAttributeConfirmPage page) throws PALAdminException
+    {
+        if (page.getValue() == null)
+        {
+            page.setValue("");
+        }
+        getSecurityProviderLogic().insertUserAttribute(page.getName(), page.getKey(), page.getValue());
+    }
+
+    public void delete(UserAttributeConfirmPage page) throws PALAdminException
+    {
+        getSecurityProviderLogic().deleteUserAttribute(page.getName(), page.getKey());
+    }
+
     public void loadPage(UserProfilingRuleEditPage page)
     {
         List<Map<String, String>> locatorList = new ArrayList<Map<String, String>>();
-        locatorList.add(PALAdminUtil.createItem(PALAdminConstants.LOCATOR_PAGE,
-                PALAdminConstants.LOCATOR_PAGE));
-        locatorList.add(PALAdminUtil.createItem(PALAdminConstants.LOCATOR_MENU,
-                PALAdminConstants.LOCATOR_MENU));
+        locatorList.add(PALAdminUtil.createItem(PALAdminConstants.LOCATOR_PAGE, PALAdminConstants.LOCATOR_PAGE));
+        locatorList.add(PALAdminUtil.createItem(PALAdminConstants.LOCATOR_MENU, PALAdminConstants.LOCATOR_MENU));
         page.setNewLocatorNameItems(locatorList);
 
         page.setNewProfilingRuleNameItems(getProfilingRuleNames());
 
         User user = new User();
         user.setName(page.getName());
-        page.setPrincipalRulesItems(getSecurityProviderLogic()
-                .getPrincipalRuleForUser(user));
+        page.setPrincipalRulesItems(getSecurityProviderLogic().getPrincipalRuleForUser(user));
     }
 
-    public void addPrincipalRuleToUser(UserProfilingRuleEditPage page)
-            throws PALAdminException
+    public void addPrincipalRuleToUser(UserProfilingRuleEditPage page) throws PALAdminException
     {
         User user = new User();
         user.setName(page.getName());
@@ -400,8 +461,7 @@
         getSecurityProviderLogic().addPrincipalRuleToUser(user, principalRule);
     }
 
-    public void removePrincipalRulesFromUser(UserProfilingRuleEditPage page)
-            throws PALAdminException
+    public void removePrincipalRulesFromUser(UserProfilingRuleEditPage page) throws PALAdminException
     {
         List<String> failedPrincipalRules = new ArrayList<String>();
         User user = new User();
@@ -411,10 +471,8 @@
         {
             try
             {
-                PrincipalRule principalRule = PrincipalRule
-                        .getInstance(principalRules[i]);
-                getSecurityProviderLogic().removePrincipalRuleFromUser(user,
-                        principalRule);
+                PrincipalRule principalRule = PrincipalRule.getInstance(principalRules[i]);
+                getSecurityProviderLogic().removePrincipalRuleFromUser(user, principalRule);
             }
             catch (PALAdminException e)
             {
@@ -423,8 +481,7 @@
         }
         if (failedPrincipalRules.size() > 0)
         {
-            throw new PALAdminException("Could not remove principalRules: "
-                    + failedPrincipalRules);
+            throw new PALAdminException("Could not remove principalRules: " + failedPrincipalRules);
         }
     }
 }

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/AbstractUserAttributePage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/AbstractUserAttributePage.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/AbstractUserAttributePage.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,68 @@
+package jp.sf.pal.admin.web.user;
+
+import jp.sf.pal.admin.service.UserManagementService;
+import jp.sf.pal.admin.web.AbstractCrudPage;
+
+public class AbstractUserAttributePage extends AbstractCrudPage
+{
+
+    private String name;
+    private String key;
+
+    private String value;
+
+    private UserManagementService userManagementService;
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    /**
+     * @return the key
+     */
+    public String getKey()
+    {
+        return key;
+    }
+
+    /**
+     * @param key the key to set
+     */
+    public void setKey(String key)
+    {
+        this.key = key;
+    }
+
+    public String getValue()
+    {
+        return value;
+    }
+
+    public void setValue(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * @return the userManagementService
+     */
+    public UserManagementService getUserManagementService()
+    {
+        return userManagementService;
+    }
+
+    /**
+     * @param userManagementService the userManagementService to set
+     */
+    public void setUserManagementService(UserManagementService userManagementService)
+    {
+        this.userManagementService = userManagementService;
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/AbstractUserAttributePage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeConfirmPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeConfirmPage.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeConfirmPage.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,112 @@
+package jp.sf.pal.admin.web.user;
+
+import java.io.Serializable;
+
+import javax.faces.internal.FacesMessageUtil;
+
+import jp.sf.pal.admin.PALAdminException;
+import jp.sf.pal.admin.web.CrudType;
+
+import org.seasar.framework.log.Logger;
+import org.seasar.teeda.extension.annotation.takeover.TakeOver;
+import org.seasar.teeda.extension.annotation.takeover.TakeOverType;
+
+public class UserAttributeConfirmPage extends AbstractUserAttributePage implements Serializable
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 8059029609744518426L;
+
+    /**
+     * Logger for this class
+     */
+    private static final Logger logger = Logger.getLogger(UserAttributeConfirmPage.class);
+
+    public Class initialize()
+    {
+        return null;
+    }
+
+    public Class prerender()
+    {
+        if (getCrudType() == CrudType.DELETE)
+        {
+            //  update
+            if (getKey() != null)
+            {
+                try
+                {
+                    getUserManagementService().loadPage(this);
+                }
+                catch (PALAdminException e)
+                {
+                    FacesMessageUtil.addErrorMessage("failed.to.get.userattributes");
+                    logger.error("Failed to get user attributes: " + getName(), e);
+                }
+            }
+            else
+            {
+                setCrudType(CrudType.READ);
+                return UserAttributeListPage.class;
+            }
+        }
+        return null;
+    }
+
+    @TakeOver(type = TakeOverType.INCLUDE, properties = "name")
+    public Class doUpdate()
+    {
+
+        switch (getCrudType())
+        {
+            case CrudType.CREATE:
+                try
+                {
+                    getUserManagementService().insert(this);
+                    FacesMessageUtil.addInfoMessage("added.new.userattribute", new Object[] { getName() });
+                }
+                catch (PALAdminException e)
+                {
+                    FacesMessageUtil.addErrorMessage("failed.to.add.new.userattribute", new Object[] { getName() });
+                    logger.error("Failed to add a new user attribute: " + getName(), e);
+                }
+                break;
+            case CrudType.UPDATE:
+                try
+                {
+                    getUserManagementService().update(this);
+                    FacesMessageUtil.addInfoMessage("added.new.userattribute", new Object[] { getName() });
+                }
+                catch (PALAdminException e)
+                {
+                    FacesMessageUtil.addErrorMessage("failed.to.add.new.userattribute", new Object[] { getName() });
+                    logger.error("Failed to add a new user attribute: " + getName(), e);
+                }
+                break;
+            case CrudType.DELETE:
+                try
+                {
+                    getUserManagementService().delete(this);
+                    FacesMessageUtil.addInfoMessage("deleted.userattribute", new Object[] { getName() });
+                }
+                catch (PALAdminException e)
+                {
+                    FacesMessageUtil.addErrorMessage("failed.to.delete.userattribute", new Object[] { getName() });
+                    logger.error("Failed to delete a new user attribute: " + getName(), e);
+                }
+                break;
+            default:
+                break;
+        }
+        return UserAttributeListPage.class;
+    }
+
+    public boolean isComeFromList()
+    {
+        return getCrudType() == CrudType.READ || getCrudType() == CrudType.DELETE;
+
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeConfirmPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeEditPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeEditPage.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeEditPage.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,60 @@
+package jp.sf.pal.admin.web.user;
+
+import java.io.Serializable;
+
+import javax.faces.internal.FacesMessageUtil;
+
+import org.seasar.framework.log.Logger;
+
+import jp.sf.pal.admin.PALAdminException;
+import jp.sf.pal.admin.web.CrudType;
+
+public class UserAttributeEditPage extends AbstractUserAttributePage implements Serializable
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -6429222904388985538L;
+
+    /**
+     * Logger for this class
+     */
+    private static final Logger logger = Logger.getLogger(UserAttributeEditPage.class);
+
+    public String initialize()
+    {
+        return null;
+    }
+
+    public String prerender()
+    {
+        if (getCrudType() == CrudType.UPDATE)
+        {
+            //  update
+            if (getKey() != null)
+            {
+                try
+                {
+                    getUserManagementService().loadPage(this);
+                }
+                catch (PALAdminException e)
+                {
+                    FacesMessageUtil.addErrorMessage("failed.to.get.userattributes");
+                    logger.error("Failed to get user attributes: " + getName(), e);
+                }
+            }
+            else
+            {
+                setCrudType(CrudType.CREATE);
+            }
+        }
+        return null;
+    }
+
+    public Class doBack()
+    {
+        setCrudType(CrudType.READ);
+        return UserAttributeListPage.class;
+    }
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeEditPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeListPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeListPage.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeListPage.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,140 @@
+package jp.sf.pal.admin.web.user;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.internal.FacesMessageUtil;
+
+import org.seasar.framework.log.Logger;
+import org.seasar.teeda.extension.annotation.takeover.TakeOver;
+
+import jp.sf.pal.admin.PALAdminException;
+import jp.sf.pal.admin.service.UserManagementService;
+import jp.sf.pal.admin.web.AbstractPagerPage;
+import jp.sf.pal.admin.web.CrudType;
+
+public class UserAttributeListPage extends AbstractPagerPage implements Serializable
+{
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 8042231097969101982L;
+
+    /**
+     * Logger for this class
+     */
+    private static final Logger logger = Logger.getLogger(UserAttributeListPage.class);
+
+    private String name;
+
+    private String key;
+
+    private int userAttributeIndex;
+
+    private List<Map<String, Object>> userAttributeItems;
+
+    private String value;
+
+    private UserManagementService userManagementService;
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    /**
+     * @return the key
+     */
+    public String getKey()
+    {
+        return key;
+    }
+
+    /**
+     * @param key the key to set
+     */
+    public void setKey(String key)
+    {
+        this.key = key;
+    }
+
+    public int getUserAttributeIndex()
+    {
+        return userAttributeIndex;
+    }
+
+    public void setUserAttributeIndex(int userAttributeIndex)
+    {
+        this.userAttributeIndex = userAttributeIndex;
+    }
+
+    public List<Map<String, Object>> getUserAttributeItems()
+    {
+        return userAttributeItems;
+    }
+
+    public void setUserAttributeItems(List<Map<String, Object>> userAttributeItems)
+    {
+        this.userAttributeItems = userAttributeItems;
+    }
+
+    public String getValue()
+    {
+        return value;
+    }
+
+    public void setValue(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * @return the userManagementService
+     */
+    public UserManagementService getUserManagementService()
+    {
+        return userManagementService;
+    }
+
+    /**
+     * @param userManagementService the userManagementService to set
+     */
+    public void setUserManagementService(UserManagementService userManagementService)
+    {
+        this.userManagementService = userManagementService;
+    }
+
+    @TakeOver(properties = "crudType,name")
+    public Class doCreate()
+    {
+        setCrudType(CrudType.CREATE);
+        return UserAttributeEditPage.class;
+    }
+
+    public String initialize()
+    {
+        return null;
+    }
+
+    public String prerender()
+    {
+        try
+        {
+            getUserManagementService().loadPage(this);
+        }
+        catch (PALAdminException e)
+        {
+            FacesMessageUtil.addErrorMessage("failed.to.get.userattributes");
+            logger.error("Failed to get user attributes: " + getName(), e);
+        }
+        return null;
+    }
+
+}


Property changes on: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserAttributeListPage.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserListPage.java
===================================================================
--- pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserListPage.java	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/java/jp/sf/pal/admin/web/user/UserListPage.java	2007-06-26 04:03:56 UTC (rev 198)
@@ -110,8 +110,7 @@
     /**
      * @param userManagementService the userManagementService to set
      */
-    public void setUserManagementService(
-            UserManagementService userManagementService)
+    public void setUserManagementService(UserManagementService userManagementService)
     {
         this.userManagementService = userManagementService;
     }
@@ -130,7 +129,7 @@
         catch (PALAdminException e)
         {
             FacesMessageUtil.addErrorMessage("failed.to.get.users");
-            logger.error("Failed to add a new user: " + getName(), e);
+            logger.error("Failed to get users: " + getName(), e);
         }
 
         return null;

Modified: pal-admin/trunk/src/main/resources/appMessages.properties
===================================================================
--- pal-admin/trunk/src/main/resources/appMessages.properties	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/resources/appMessages.properties	2007-06-26 04:03:56 UTC (rev 198)
@@ -13,6 +13,11 @@
 deleted.group=Delete the Group({0}).
 failed.to.delete.group=Failed to delete the Group({0}).
 
+added.new.userattribute=Added a new User Attribute({0}).
+failed.to.add.new.userattribute=Failed to add a new User Attribute({0}).
+deleted.userattribute=Delete the User Attribute({0}).
+failed.to.delete.userattribute=Failed to delete the User Attribute({0}).
+
 could.not.find.user=Could not find the target user.
 updated.user.information= Updated the target user information({0}).
 failed.to.update.user.information=Failed to updated the user information({0}).
@@ -64,6 +69,7 @@
 failed.to.delete.repository=Failed to delete the repository.
 
 failed.to.get.users=Failed to load users.
+failed.to.get.userattributes=Failed to load user attributes.
 
 error.lacking.password=You must enter a password. 
 error.userid_already_exists=Requested User ID already exists.  Please select another User Id.

Modified: pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/user/label.properties
===================================================================
--- pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/user/label.properties	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/resources/jp/sf/pal/admin/web/user/label.properties	2007-06-26 04:03:56 UTC (rev 198)
@@ -6,8 +6,10 @@
 profilingRule=Profiling Rule
 userList=User List
 userInformation=User Information
+userAttributeList=User Attribute
 basicTab=Basic
 profilingRuleTab=Rule
+userAttributeTab=User Attribute
 
 # userList
 userList.delete=Delete
@@ -39,3 +41,15 @@
 userProfilingRuleEdit.profilingrule=Profiling Rule
 userProfilingRuleEdit.notFound=Not found.
 
+# userAttributeList
+userAttributeList.userAttributeKey=Key
+userAttributeList.userAttributeValue=Value
+
+# userAttributeEdit
+userAttributeEdit.userAttributeKey=Key
+userAttributeEdit.userAttributeValue=Value
+
+# userAttributeConfirm
+userAttributeConfirm.userAttributeKey=Key
+userAttributeConfirm.userAttributeValue=Value
+

Added: pal-admin/trunk/src/main/webapp/view/user/userAttributeConfirm.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userAttributeConfirm.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userAttributeConfirm.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="stylesheet" type="text/css" href="../../css/global.css"/>
+</head>
+<body>
+<form id="UserAttributeConfirmForm"><input type="hidden" id="crudType" />
+<!-- tab: BEGIN -->
+<div style="padding: 0px 0px 3px 10px; margin:5px 0px;border-bottom:1px solid #000000;">
+  <label id="userTabLabel" style="border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #ffffff;border-left:1px solid #000000;padding: 3px 5px 3px 5px; margin: 0px 0px;">User</label>
+  <a id="jumpRoleList" href="../role/roleList.html" style="text-decoration: none;">
+    <span id="roleTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Role</span>
+  </a>
+  <a id="jumpGroupList" href="../group/groupList.html" style="text-decoration: none;">
+    <span id="groupTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Group</span>
+  </a>
+</div>
+<!-- tab: END -->
+
+<div>
+    <span id="allMessages" fatalClass="portlet-msg-error" errorClass="portlet-msg-error" warnClass="portlet-msg-alert" infoClass="portlet-msg-info"></span>
+</div>
+
+<!-- content: BEGIN -->
+<div style="padding:5px 0px;">
+    <div class="portlet-section-header">
+      <label id="userAttributeInformationLabel">UserAttribute Information</label>
+    </div>
+
+    <div>
+        <a id="jumpUserEdit" href="userEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="basicTabLabel">Basic</span>
+        </a>
+        |
+        <a id="jumpUserRoleEdit" href="userRoleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="roleTabLabel">Role</span>
+        </a>
+        |
+        <a id="jumpUserGroupEdit" href="userGroupEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="groupTabLabel">Group</span>
+        </a>
+        |
+        <label id="userAttributeTabLabel">User Attribute</label>
+        |
+        <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="profilingRuleTabLabel">Profiling Rule</span>
+        </a>
+    </div>
+
+    <table class="tablebg">
+        <tr>
+            <td class="portlet-section-subheader"><label id="userAttributeKeyLabel">Key</label></td>
+	        <td class="portlet-section-body"><span id="key">key</span><input type="hidden" id="key-hidden" /></td>
+	        <td><span id="nameMessage"></span></td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader"><label id="userAttributeValueLabel">Value</label></td>
+	        <td class="portlet-section-body"><span id="value">value</span><input type="hidden" id="value-hidden" /></td>
+	        <td><span id="valueMessage"></span></td>
+        </tr>
+    </table>
+    <input type="hidden" id="name-hidden" />
+    
+    <div>
+      <div id="isComeFromList" style="display:inline;">
+	    <input type="button" id="jumpUserAttributeList" value="Back" 
+		    onclick="location.href='userAttributeList.html'" class="portlet-form-button"/>
+      </div>
+      <div id="isNotRead" style="display:inline;">
+        <input type="button" id="doUpdate" value="Finish" onclick="location.href='userAttributeList.html'" class="portlet-form-button"/>
+      </div>
+    </div>
+</div>
+<!-- content: END -->
+</form>
+</body></html>


Property changes on: pal-admin/trunk/src/main/webapp/view/user/userAttributeConfirm.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/webapp/view/user/userAttributeEdit.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userAttributeEdit.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userAttributeEdit.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="stylesheet" type="text/css" href="../../css/global.css"/>
+</head>
+<body>
+<form id="UserAttributeEditForm"><input type="hidden" id="crudType" />
+<!-- tab: BEGIN -->
+<div style="padding: 0px 0px 3px 10px; margin:5px 0px;border-bottom:1px solid #000000;">
+  <label id="userTabLabel" style="border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #ffffff;border-left:1px solid #000000;padding: 3px 5px 3px 5px; margin: 0px 0px;">User</label>
+  <a id="jumpRoleList" href="../role/roleList.html" style="text-decoration: none;">
+    <span id="roleTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Role</span>
+  </a>
+  <a id="jumpGroupList" href="../group/groupList.html" style="text-decoration: none;">
+    <span id="groupTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Group</span>
+  </a>
+</div>
+<!-- tab: END -->
+
+<div>
+    <span id="allMessages" fatalClass="portlet-msg-error" errorClass="portlet-msg-error" warnClass="portlet-msg-alert" infoClass="portlet-msg-info"></span>
+</div>
+
+<!-- content: BEGIN -->
+<div style="padding:5px 0px;">
+    <div class="portlet-section-header">
+      <label id="userAttributeInformationLabel">UserAttribute Information</label>
+    </div>
+
+    <div>
+        <a id="jumpUserEdit" href="userEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="basicTabLabel">Basic</span>
+        </a>
+        |
+        <a id="jumpUserRoleEdit" href="userRoleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="roleTabLabel">Role</span>
+        </a>
+        |
+        <a id="jumpUserGroupEdit" href="userGroupEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="groupTabLabel">Group</span>
+        </a>
+        |
+        <label id="userAttributeTabLabel">User Attribute</label>
+        |
+        <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="profilingRuleTabLabel">Profiling Rule</span>
+        </a>
+    </div>
+
+    <table class="tablebg">
+        <tr>
+            <td class="portlet-section-subheader"><label id="userAttributeKeyLabel">Key</label></td>
+	        <td class="portlet-section-body">
+                <div id="isUpdate" style="display:inline;"><input type="hidden" id="key-hidden"/><span id="key-text">Key</span></div>
+                <div id="isNotUpdate" style="display:inline;"><input type="text" id="key"/></div>
+            </td>
+	        <td><span id="keyMessage"></span></td>
+        </tr>
+        <tr>
+            <td class="portlet-section-subheader"><label id="userAttributeValueLabel">Value</label></td>
+	        <td class="portlet-section-body"><input type="text" id="value"/></td>
+	        <td><span id="valueMessage"></span></td>
+        </tr>
+    </table>
+    <input type="hidden" id="name-hidden"/>
+    
+    <div>
+      <input type="button" id="doBack" value="Back"
+	    onclick="location.href='userAttributeList.html'" class="portlet-form-button"/>
+      <div id="isNotRead" style="display:inline;">
+        <input type="button" id="goUserAttributeConfirm" value="Confirm"
+	        onclick="location.href='userAttributeConfirm.html'" class="portlet-form-button"/>
+      </div>
+    </div>
+</div>
+<!-- content: BEGIN -->
+</form>
+</body></html>


Property changes on: pal-admin/trunk/src/main/webapp/view/user/userAttributeEdit.html
___________________________________________________________________
Name: svn:eol-style
   + native

Added: pal-admin/trunk/src/main/webapp/view/user/userAttributeList.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userAttributeList.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userAttributeList.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:te="http://www.seasar.org/teeda/extension">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="stylesheet" type="text/css" href="../../css/global.css"/>
+</head>
+<body>
+<form id="UserAttributeListForm">
+<!-- tab: BEGIN -->
+<div style="padding: 0px 0px 3px 10px; margin:5px 0px;border-bottom:1px solid #000000;">
+  <label id="userTabLabel" style="border-top:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #ffffff;border-left:1px solid #000000;padding: 3px 5px 3px 5px; margin: 0px 0px;">User</label>
+  <a id="jumpRoleList" href="../role/roleList.html" style="text-decoration: none;">
+    <span id="roleTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Role</span>
+  </a>
+  <a id="jumpGroupList" href="../group/groupList.html" style="text-decoration: none;">
+    <span id="groupTabLabel" style="font-weight: bold;color:#ffffff;background-color:#999999;border:1px solid #000000; padding: 3px 5px 3px 5px; margin: 0px 0px;">Group</span>
+  </a>
+</div>
+<!-- tab: END -->
+
+<div>
+    <span id="allMessages" fatalClass="portlet-msg-error" errorClass="portlet-msg-error" warnClass="portlet-msg-alert" infoClass="portlet-msg-info"></span>
+</div>
+
+<!-- content: BEGIN -->
+<div style="padding:5px 0px;">
+    <div class="portlet-section-header">
+      <label id="userAttributeListLabel">UserAttribute List</label>
+    </div>
+
+    <div>
+        <a id="jumpUserEdit" href="userEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="basicTabLabel">Basic</span>
+        </a>
+        |
+        <a id="jumpUserRoleEdit" href="userRoleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="roleTabLabel">Role</span>
+        </a>
+        |
+        <a id="jumpUserGroupEdit" href="userGroupEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="groupTabLabel">Group</span>
+        </a>
+        |
+        <label id="userAttributeTabLabel">User Attribute</label>
+        |
+        <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
+            <span id="profilingRuleTabLabel">Profiling Rule</span>
+        </a>
+    </div>
+
+    <input type="hidden" id="name-hidden"/>
+    <div>
+      <label id="actionLabel" class="portlet-form-label">Action:</label>
+      <input type="button" id="doCreate" value="Create" onclick="location.href='userAttributeEdit.html'" class="portlet-form-button"/><br/>
+    </div>
+
+    <div>
+        <span id="count-header">10</span><!-- TODO: i18n--> <label id="foundLabel"> found.</label>
+        (<span id="currentPageNumber-header">3</span>/<span id="maxPageNumber-header">5</span>)
+    </div>
+
+    <div>
+        <a id="goPreviousPage-header" href="userAttributeList.html?previousPageNumber=12&name=name"
+            te:rendered="#{user_userAttributeListPage.previousPageNumber!=null}">
+            <span id="previousPageLabel-header">&lt;&lt;Previous</span>
+        </a>
+        <a id="goNextPage-header" href="userAttributeList.html?nextPageNumber=22&name=name"
+            te:rendered="#{user_userAttributeListPage.nextPageNumber!=null}">
+            <span id="nextPageLabel-header">Next&gt;&gt;</span>
+        </a>
+    </div>
+
+    <table>
+	    <thead class="portlet-section-subheader">
+		    <tr>
+			    <th><label id="userAttributeKeyLabel">Key</label></th>
+			    <th><label id="userAttributeValueLabel">Value</label></th>
+			    <th><br/></th>
+		    </tr>
+	    </thead>
+	    <tbody id="userAttributeItems">
+		    <tr>
+			    <td class="portlet-section-body"><span id="key">key</span></td>
+			    <td class="portlet-section-body"><span id="value">value</span></td>
+			    <td class="portlet-section-alternate">
+			    <a id="goUserAttributeEdit-edit" href="userAttributeEdit.html?fixed_crudType=2&name=name&key=key"><span id="editLabel">Edit</span></a>
+			    <a id="goUserAttributeConfirm-delete" href="userAttributeConfirm.html?fixed_crudType=3&name=name&key=key"><span id="deleteLabel">Delete</span></a>
+			    </td>
+		    </tr>
+	    </tbody>
+    </table>
+
+    <div>
+        <a id="goPreviousPage-footer" href="userAttributeList.html?previousPageNumber=12&name=name"
+            te:rendered="#{user_userAttributeListPage.previousPageNumber!=null}">
+            <span id="previousPageLabel-footer">&lt;&lt;Previous</span>
+        </a>
+        <a id="goNextPage-footer" href="userAttributeList.html?nextPageNumber=2&name=name"
+            te:rendered="#{user_userAttributeListPage.nextPageNumber!=null}">
+            <span id="nextPageLabel-footer">Next&gt;&gt;</span>
+        </a>
+    </div>
+</div>
+<!-- content: END -->
+</form>
+</body></html>


Property changes on: pal-admin/trunk/src/main/webapp/view/user/userAttributeList.html
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: pal-admin/trunk/src/main/webapp/view/user/userEdit.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userEdit.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userEdit.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -40,6 +40,10 @@
             <span id="groupTabLabel">Group</span>
         </a>
         |
+        <a id="jumpUserAttributeEdit" href="userAttributeList.html?fixed_crudType=1&name=name" style="text-decoration: none;">
+            <span id="userAttributeTabLabel">User Attribute</span>
+        </a>
+        |
         <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
             <span id="profilingRuleTabLabel">Profiling Rule</span>
         </a>

Modified: pal-admin/trunk/src/main/webapp/view/user/userGroupEdit.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userGroupEdit.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userGroupEdit.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -40,6 +40,10 @@
         |
         <label id="groupTabLabel">Group</label>
         |
+        <a id="jumpUserAttributeEdit" href="userAttributeEdit.html?fixed_crudType=1&name=name" style="text-decoration: none;">
+            <span id="userAttributeTabLabel">User Attribute</span>
+        </a>
+        |
         <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
             <span id="profilingRuleTabLabel">Profiling Rule</span>
         </a>

Modified: pal-admin/trunk/src/main/webapp/view/user/userProfilingRuleEdit.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userProfilingRuleEdit.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userProfilingRuleEdit.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -42,6 +42,10 @@
             <span id="groupTabLabel">Group</span>
         </a>
         |
+        <a id="jumpUserAttributeEdit" href="userAttributeEdit.html?fixed_crudType=1&name=name" style="text-decoration: none;">
+            <span id="userAttributeTabLabel">User Attribute</span>
+        </a>
+        |
         <label id="profilingRuleTabLabel">Profiling Rule</label>
     </div>
 

Modified: pal-admin/trunk/src/main/webapp/view/user/userRoleEdit.html
===================================================================
--- pal-admin/trunk/src/main/webapp/view/user/userRoleEdit.html	2007-06-26 04:03:14 UTC (rev 197)
+++ pal-admin/trunk/src/main/webapp/view/user/userRoleEdit.html	2007-06-26 04:03:56 UTC (rev 198)
@@ -40,6 +40,10 @@
             <span id="groupTabLabel">Group</span>
         </a>
         |
+        <a id="jumpUserAttributeEdit" href="userAttributeEdit.html?fixed_crudType=1&name=name" style="text-decoration: none;">
+            <span id="userAttributeTabLabel">User Attribute</span>
+        </a>
+        |
         <a id="jumpUserProfilingRuleEdit" href="userProfilingRuleEdit.html?fixed_crudType=3&name=name" style="text-decoration: none;">
             <span id="profilingRuleTabLabel">Profiling Rule</span>
         </a>


pal-cvs メーリングリストの案内
Back to archive index