[jboss-cvs] JBossBlog SVN: r223 - in trunk: resources/WEB-INF and 8 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Feb 26 11:11:12 EST 2008


Author: adamw
Date: 2008-02-26 11:11:12 -0500 (Tue, 26 Feb 2008)
New Revision: 223

Added:
   trunk/src/action/org/jboss/blog/session/security/SecurityObserver.java
   trunk/src/action/org/jboss/blog/session/security/SecurityUserConverter.java
   trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityUser.java
   trunk/view/security/security_user_add.xhtml
Modified:
   trunk/resources/WEB-INF/pages.xml
   trunk/resources/messages_en.properties
   trunk/src/action/org/jboss/blog/session/cache/FeedsChangesObserver.java
   trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java
   trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java
   trunk/src/action/org/jboss/blog/session/group/GroupModBean.java
   trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
   trunk/src/action/org/jboss/blog/session/security/Authenticator.java
   trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
   trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
   trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
   trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java
   trunk/src/model/org/jboss/blog/model/security/SecurityUser.java
   trunk/view/security/security_manager.xhtml
Log:


Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/resources/WEB-INF/pages.xml	2008-02-26 16:11:12 UTC (rev 223)
@@ -290,6 +290,7 @@
 
     <page view-id="/security/security_manager.xhtml">
         <param name="securityGroup" converterId="securityGroupConverter" value="#{securityMod.restrictedSecurityGroup}" />
+        <param name="securityUser" converterId="securityUserConverter" value="#{securityMod.restrictedSecurityUser}" />
         <param name="group" converterId="groupConverter" value="#{securityMod.group}" />
         <param name="feed" converterId="feedConverter" value="#{securityMod.feed}" />
         <param name="role" converterId="securityRoleConverter" value="#{securityMod.role}" />
@@ -305,6 +306,16 @@
         </navigation>
     </page>
 
+    <page view-id="/security/security_user_add.xhtml">
+        <param name="group" converterId="groupConverter" value="#{securityMod.group}" />
+        <param name="feed" converterId="feedConverter" value="#{securityMod.feed}" />
+        <param name="role" converterId="securityRoleConverter" value="#{securityMod.role}" />
+
+        <navigation from-action="#{securityMod.addSecurityUser}">
+            <redirect view-id="/security/security_manager.xhtml" />
+        </navigation>
+    </page>
+
     <!-- Exceptions -->
 
     <exception class="org.jboss.seam.framework.EntityNotFoundException">

Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/resources/messages_en.properties	2008-02-26 16:11:12 UTC (rev 223)
@@ -134,4 +134,13 @@
 blog.security.group.group.deleted=Group {0} deleted from administrators of group {1}.
 
 blog.security.group.feed.added=Group {0} added to administrators of feed {1}.
-blog.security.group.feed.deleted=Group {0} deleted from administrators of feed {1}.
\ No newline at end of file
+blog.security.group.feed.deleted=Group {0} deleted from administrators of feed {1}.
+
+blog.security.user.admin.added=User {0} added to administrators.
+blog.security.user.admin.deleted=User {0} deleted from administrators.
+
+blog.security.user.group.added=User {0} added to administrators of group {1}.
+blog.security.user.group.deleted=User {0} deleted from administrators of group {1}.
+
+blog.security.user.feed.added=User {0} added to administrators of feed {1}.
+blog.security.user.feed.deleted=User {0} deleted from administrators of feed {1}.
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/session/cache/FeedsChangesObserver.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/FeedsChangesObserver.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/cache/FeedsChangesObserver.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -3,6 +3,8 @@
 import org.jboss.seam.annotations.Observer;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.In;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.Post;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
@@ -13,22 +15,22 @@
     private CacheManager cacheManager;
     
     @Observer({"org.jboss.blog.feed.updated", "org.jboss.blog.feed.deleted"})
-    public void feedUpdated(String feedName) {
+    public void feedUpdated(Feed feed) {
         cacheManager.evictAll();
     }
 
     @Observer({"org.jboss.blog.feed.added"})
-    public void feedAdded(String feedName) {
+    public void feedAdded(Feed feed) {
         cacheManager.evictAll();
     }
 
     @Observer({"org.jboss.blog.post.updated", "org.jboss.blog.post.deleted"})
-    public void postUpdated(String postTitleAsId, String feedName) {
+    public void postUpdated(Post post) {
         cacheManager.evictAll();
     }
 
     @Observer("org.jboss.blog.post.added")
-    public void postAdded(String postTitleAsId, String feedName) {
+    public void postAdded(Post post) {
         cacheManager.evictAll();
     }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/AggregatedFeedModBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -211,6 +211,6 @@
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.aggregated.updated",
                 getAggregatedFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getAggregatedFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getAggregatedFeed());
     }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/FeedModBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -102,7 +102,7 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.added", getFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.added", getFeed().getName()); 
+        Events.instance().raiseEvent("org.jboss.blog.feed.added", getFeed()); 
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
@@ -111,7 +111,7 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.updated", getFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getFeed());
     }
 
     @Restrict("#{identity.hasPermission('feed', 'delete', feedMod.feed, feedMod.feed.group)}")
@@ -120,6 +120,6 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.deleted", getFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.deleted", getFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.feed.deleted", getFeed());
     }
 }

Modified: trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/feed/mod/RemoteFeedModBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -139,7 +139,7 @@
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.remote.address.updated",
                 getRemoteFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getRemoteFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getRemoteFeed());
     }
 
     @Restrict("#{identity.hasPermission('feed', 'edit', feedMod.feed, feedMod.feed.group)}")
@@ -155,6 +155,6 @@
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.feed.remote.postauthor.updated",
                 getRemoteFeed().getName());
 
-        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getRemoteFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.feed.updated", getRemoteFeed());
     }
 }

Modified: trunk/src/action/org/jboss/blog/session/group/GroupModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/group/GroupModBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/group/GroupModBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -4,6 +4,7 @@
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.security.Restrict;
 import org.jboss.seam.faces.FacesMessages;
+import org.jboss.seam.core.Events;
 import org.jboss.blog.model.Group;
 import org.jboss.blog.service.GroupsService;
 
@@ -45,6 +46,8 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.added", group.getDisplayName(),
                 group.getName());
+
+        Events.instance().raiseEvent("org.jboss.blog.group.added", group);
     }
 
     @Restrict("#{identity.hasPermission('group', 'edit', groupMod.group)}")
@@ -53,6 +56,8 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.updated", group.getDisplayName(),
                 group.getName());
+
+        Events.instance().raiseEvent("org.jboss.blog.group.updated", group);
     }
 
     @Restrict("#{identity.hasPermission('group', 'delete', groupMod.group)}")
@@ -68,6 +73,8 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.group.deleted", group.getDisplayName(),
                 group.getName());
+
+        Events.instance().raiseEvent("org.jboss.blog.group.deleted", group);
     }
 
     // Marker actions

Modified: trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/merge/MergeServiceBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -54,7 +54,7 @@
 
         entityManager.flush();
 
-        Events.instance().raiseEvent("org.jboss.blog.post.added", post.getTitleAsId(), feed.getName());
+        Events.instance().raiseEvent("org.jboss.blog.post.added", post);
     }
 
     /**
@@ -72,11 +72,10 @@
      *
      * Also, in case of a title change, the titleAsId is not changed.
      *
-     * @param feed Feed to which the posts belong
      * @param mergeTo Post to which to merge the changes.
      * @param mergeFrom Post from which to merge the changes.
      */
-    private void mergePosts(Feed feed, Post mergeTo, RestrictedPost mergeFrom) {
+    private void mergePosts(Post mergeTo, RestrictedPost mergeFrom) {
         boolean changes = false;
 
         if (!GeneralTools.objectsEqual(mergeTo.getAuthor(), mergeFrom.getAuthor())) {
@@ -119,7 +118,7 @@
 
             entityManager.flush();
 
-            Events.instance().raiseEvent("org.jboss.blog.post.updated", mergeTo.getTitleAsId(), feed.getName());
+            Events.instance().raiseEvent("org.jboss.blog.post.updated", mergeTo);
         }
     }
 
@@ -144,7 +143,7 @@
                     savePost(feed, mergeFrom.getCurrent());
                     mergeFrom.next();
                 } else if (compare == 0) {
-                    mergePosts(feed, feedsService.getPost(mergeTo.getCurrent().getTitleAsId()), mergeFrom.getCurrent());
+                    mergePosts(feedsService.getPost(mergeTo.getCurrent().getTitleAsId()), mergeFrom.getCurrent());
                     mergeFrom.next();
                     mergeTo.next();
                 } else {

Modified: trunk/src/action/org/jboss/blog/session/security/Authenticator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/Authenticator.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/security/Authenticator.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -40,6 +40,7 @@
 
         List<SecurityGroup> securityGroups = externalSecurityService.getGroupsOfUser(user);
 
+        addFeedRolesFromMappings(user.getMappings());
         for (SecurityGroup securityGroup : securityGroups) {
             addFeedRolesFromMappings(securityGroup.getMappings());
         }

Modified: trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -8,6 +8,7 @@
 import org.jboss.blog.model.security.SecurityUser;
 import org.jboss.blog.model.security.SecurityGroup;
 import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
 
 import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
@@ -28,7 +29,7 @@
         SecurityUser user = new SecurityUser();
         user.setExternalId(Long.parseLong(username));
 
-        return user;
+        return getUnrestrictedSecurityUser(user);
     }
 
     public SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup) {
@@ -50,6 +51,25 @@
         }
     }
 
+    public SecurityUser getUnrestrictedSecurityUser(RestrictedSecurityUser securityUser) {
+        try {
+            SecurityUser entitySu = (SecurityUser) entityManager.createQuery(
+                    "select su from SecurityUser su where su.externalId = ?1")
+                    .setParameter(1, securityUser.getExternalId()).getSingleResult();
+            entitySu.setRealUser(securityUser.getRealUser());
+
+            return entitySu;
+        } catch (NoResultException e) {
+            SecurityUser su = new SecurityUser();
+            su.setExternalId(securityUser.getExternalId());
+            su.setRealUser(securityUser.getRealUser());
+
+            entityManager.persist(su);
+
+            return su;
+        }
+    }
+
     public List<RestrictedSecurityGroup> getAllGroups() {
         List<RestrictedSecurityGroup> groups = new ArrayList<RestrictedSecurityGroup>();
         groups.add(new SecurityGroup("group1", 1l));
@@ -59,6 +79,15 @@
         return groups;
     }
 
+    public List<RestrictedSecurityUser> getAllUsers() {
+        List<RestrictedSecurityUser> users = new ArrayList<RestrictedSecurityUser>();
+        users.add(new SecurityUser("1", 1l));
+        users.add(new SecurityUser("2", 2l));
+        users.add(new SecurityUser("2", 3l));
+
+        return users;
+    }
+
     public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
         List<SecurityGroup> groups = new ArrayList<SecurityGroup>();
         groups.add(getUnrestrictedSecurityGroup(
@@ -67,6 +96,10 @@
         return groups;
     }
 
+    public String getDisplayName(RestrictedSecurityUser securityUser) {
+        return securityUser.getExternalId().toString();
+    }
+
     public String getDisplayName(RestrictedSecurityGroup securityGroup) {
         if (securityGroup.getRealGroup() == null) {
             securityGroup.setRealGroup("group" + securityGroup.getExternalId());

Modified: trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -33,6 +33,7 @@
     private FacesMessages facesMessages;
 
     private RestrictedSecurityGroup restrictedSecurityGroup;
+    private RestrictedSecurityUser restrictedSecurityUser;
     private Group group;
     private Feed feed;
     private FeedsSecurityRole role;
@@ -45,6 +46,14 @@
         this.restrictedSecurityGroup = restrictedSecurityGroup;
     }
 
+    public RestrictedSecurityUser getRestrictedSecurityUser() {
+        return restrictedSecurityUser;
+    }
+
+    public void setRestrictedSecurityUser(RestrictedSecurityUser restrictedSecurityUser) {
+        this.restrictedSecurityUser = restrictedSecurityUser;
+    }
+
     public Group getGroup() {
         return group;
     }
@@ -103,6 +112,18 @@
         return getMapping(FeedsSecurityRole.FEED_ADMIN, feed.getId()).getGroups();
     }
 
+    public List<SecurityUser> getAdministratorUsers() {
+        return getMapping(FeedsSecurityRole.ADMIN, null).getUsers();
+    }
+
+    public List<SecurityUser> getGroupAdministratorUsers(Group group) {
+        return getMapping(FeedsSecurityRole.GROUP_ADMIN, group.getId()).getUsers();
+    }
+
+    public List<SecurityUser> getFeedAdministratorUsers(Feed feed) {
+        return getMapping(FeedsSecurityRole.FEED_ADMIN, feed.getId()).getUsers();
+    }
+
     private SecurityMapping getMapping() {
         Integer idForRole;
 
@@ -154,4 +175,44 @@
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, bundleId,
                 externalSecurityService.getDisplayName(sg), param);
     }
+
+    public void addSecurityUser() {
+        SecurityUser su = externalSecurityService.getUnrestrictedSecurityUser(getRestrictedSecurityUser());
+        SecurityMapping mapping = getMapping();
+
+        if (!mapping.getUsers().contains(su)) {
+            mapping.getUsers().add(su);
+        }
+
+        String bundleId;
+        Object param = null;
+        switch (getRole()) {
+            case ADMIN: bundleId = "blog.security.user.admin.added"; break;
+            case GROUP_ADMIN: bundleId = "blog.security.user.group.added"; param = getGroup().getDisplayName(); break;
+            case FEED_ADMIN: bundleId = "blog.security.user.feed.added"; param = getFeed().getName(); break;
+            default: return;
+        }
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, bundleId,
+                externalSecurityService.getDisplayName(su), param);
+    }
+
+    public void deleteSecurityUser() {
+        SecurityUser su = externalSecurityService.getUnrestrictedSecurityUser(getRestrictedSecurityUser());
+        SecurityMapping mapping = getMapping();
+
+        mapping.getUsers().remove(su);
+
+        String bundleId;
+        Object param = null;
+        switch (getRole()) {
+            case ADMIN: bundleId = "blog.security.user.admin.deleted"; break;
+            case GROUP_ADMIN: bundleId = "blog.security.user.group.deleted"; param = getGroup().getDisplayName(); break;
+            case FEED_ADMIN: bundleId = "blog.security.user.feed.deleted"; param = getFeed().getName(); break;
+            default: return;
+        }
+
+        facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, bundleId,
+                externalSecurityService.getDisplayName(su), param);
+    }
 }

Added: trunk/src/action/org/jboss/blog/session/security/SecurityObserver.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityObserver.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityObserver.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -0,0 +1,52 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Observer;
+import org.jboss.seam.annotations.In;
+import org.jboss.blog.model.Group;
+import org.jboss.blog.model.feed.Feed;
+import org.jboss.blog.model.security.FeedsSecurityRole;
+
+import javax.persistence.EntityManager;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("securityObserver")
+public class SecurityObserver {
+    @In
+    private FeedsIdentity identity;
+
+    @In
+    private EntityManager entityManager;
+
+    @Observer({"org.jboss.blog.group.updated"})
+    public void groupUpdated(Group group) { }
+
+    @Observer({"org.jboss.blog.group.added"})
+    public void groupAdded(Group group) {
+
+    }
+
+    @Observer({"org.jboss.blog.group.deleted"})
+    public void groupDeleted(Group group) {
+        entityManager.createQuery("delete from SecurityMapping sm where sm.idForRole = ?1 and sm.role = ?2")
+                .setParameter(1, group.getId()).setParameter(2, FeedsSecurityRole.GROUP_ADMIN)
+                .executeUpdate();
+    }
+
+    @Observer({"org.jboss.blog.feed.updated"})
+    public void feedUpdated(Feed feed) { }
+
+    @Observer({"org.jboss.blog.feed.added"})
+    public void feedAdded(Feed feed) {
+
+    }
+
+    @Observer({"org.jboss.blog.feed.deleted"})
+    public void feedDeleted(Feed feed) {
+        entityManager.createQuery("delete from SecurityMapping sm where sm.idForRole = ?1 and sm.role = ?2")
+                .setParameter(1, feed.getId()).setParameter(2, FeedsSecurityRole.FEED_ADMIN)
+                .executeUpdate();
+    }
+}

Copied: trunk/src/action/org/jboss/blog/session/security/SecurityUserConverter.java (from rev 221, trunk/src/action/org/jboss/blog/session/security/SecurityGroupConverter.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityUserConverter.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityUserConverter.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -0,0 +1,28 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.faces.Converter;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("securityUserConverter")
+ at BypassInterceptors
+ at Converter
+public class SecurityUserConverter implements javax.faces.convert.Converter {
+    @Transactional
+    public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+        return new SecurityUser(null, Long.parseLong(value));
+    }
+
+    public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+        return ((RestrictedSecurityUser) value).getExternalId().toString();
+    }
+}
\ No newline at end of file

Modified: trunk/src/action/org/jboss/blog/session/view/PostViewBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/action/org/jboss/blog/session/view/PostViewBean.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -39,7 +39,6 @@
 
         facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, "blog.post.deleted", post.getTitle());
 
-        Events.instance().raiseEvent("org.jboss.blog.post.deleted", post.getTitleAsId(),
-                post.getFeed().getName());
+        Events.instance().raiseEvent("org.jboss.blog.post.deleted", post);
     }
 }

Added: trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityUser.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityUser.java	                        (rev 0)
+++ trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityUser.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -0,0 +1,12 @@
+package org.jboss.blog.model.security;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedSecurityUser {
+    Long getExternalId();
+
+    Object getRealUser();
+
+    void setRealUser(Object realUser);
+}

Modified: trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -26,6 +26,9 @@
     @ManyToMany
     private List<SecurityGroup> groups;
 
+    @ManyToMany
+    private List<SecurityUser> users;
+
     public Integer getId() {
         return id;
     }
@@ -58,6 +61,14 @@
         this.groups = groups;
     }
 
+    public List<SecurityUser> getUsers() {
+        return users;
+    }
+
+    public void setUsers(List<SecurityUser> users) {
+        this.users = users;
+    }
+
     public boolean equals(Object o) {
         if (this == o) return true;
         if (!(o instanceof SecurityMapping)) return false;

Modified: trunk/src/model/org/jboss/blog/model/security/SecurityUser.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/SecurityUser.java	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/src/model/org/jboss/blog/model/security/SecurityUser.java	2008-02-26 16:11:12 UTC (rev 223)
@@ -3,12 +3,13 @@
 import org.hibernate.validator.NotNull;
 
 import javax.persistence.*;
+import java.util.List;
 
 /**
  * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 @Entity
-public class SecurityUser {
+public class SecurityUser implements RestrictedSecurityUser {
     @Id
     @GeneratedValue
     @Column(updatable = false)
@@ -18,6 +19,19 @@
     @NotNull
     private Long externalId;
 
+    @ManyToMany(mappedBy = "users")
+    private List<SecurityMapping> mappings;
+
+    @Transient
+    private Object realUser;
+
+    public SecurityUser() { }
+
+    public SecurityUser(Object realUser, Long externalId) {
+        this.externalId = externalId;
+        this.realUser = realUser;
+    }
+
     public Integer getId() {
         return id;
     }
@@ -34,6 +48,22 @@
         this.externalId = externalId;
     }
 
+    public Object getRealUser() {
+        return realUser;
+    }
+
+    public void setRealUser(Object realUser) {
+        this.realUser = realUser;
+    }
+
+    public List<SecurityMapping> getMappings() {
+        return mappings;
+    }
+
+    public void setMappings(List<SecurityMapping> mappings) {
+        this.mappings = mappings;
+    }
+
     public boolean equals(Object o) {
         if (this == o) return true;
         if (!(o instanceof SecurityUser)) return false;

Modified: trunk/view/security/security_manager.xhtml
===================================================================
--- trunk/view/security/security_manager.xhtml	2008-02-26 13:49:03 UTC (rev 222)
+++ trunk/view/security/security_manager.xhtml	2008-02-26 16:11:12 UTC (rev 223)
@@ -8,44 +8,120 @@
                 xmlns:rich="http://richfaces.org/rich"
                 xmlns:a="http://richfaces.org/a4j"
                 template="../layout/template.xhtml">
-    <ui:define name="header">
-        Security manager
-    </ui:define>
-    <ui:define name="body">
-        <h3>Administrators:</h3>
+<ui:define name="header">
+    Security manager
+</ui:define>
+<ui:define name="body">
+<h3>Administrators:</h3>
 
-        <ul>
-            <ui:repeat var="securityGroup" value="#{securityMod.administratorGroups}">
-                <li>
-                    #{externalSecurityService.getDisplayName(securityGroup)}
-                    (
-                    <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
-                        <f:param name="role" value="ADMIN" />
-                        <f:param name="securityGroup" value="#{securityGroup.externalId}" />
-                    </s:link>
-                    )
-                </li>
-            </ui:repeat>
-        </ul>
+<table cellspacing="5" class="deftable" width="75%">
+    <tr>
+        <td class="term" width="15%" />
+        <td class="def">
+            <ul>
+                <ui:repeat var="securityGroup" value="#{securityMod.administratorGroups}">
+                    <li>
+                        #{externalSecurityService.getDisplayName(securityGroup)}
+                        (
+                        <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
+                            <f:param name="role" value="ADMIN" />
+                            <f:param name="securityGroup" value="#{securityGroup.externalId}" />
+                        </s:link>
+                        )
+                    </li>
+                </ui:repeat>
 
-        <s:link value="Add group" view="/security/security_group_add.xhtml">
-            <f:param name="role" value="ADMIN" />
-        </s:link>
+                <s:link value="Add group" view="/security/security_group_add.xhtml">
+                    <f:param name="role" value="ADMIN" />
+                </s:link>
+            </ul>
+        </td>
+        <td class="def">
+            <ul>
+                <ui:repeat var="securityUser" value="#{securityMod.administratorUsers}">
+                    <li>
+                        #{externalSecurityService.getDisplayName(securityUser)}
+                        (
+                        <s:link value="delete" action="#{securityMod.deleteSecurityUser}">
+                            <f:param name="role" value="ADMIN" />
+                            <f:param name="securityUser" value="#{securityUser.externalId}" />
+                        </s:link>
+                        )
+                    </li>
+                </ui:repeat>
 
-        <h3>Feed groups administrators:</h3>
+                <s:link value="Add user" view="/security/security_user_add.xhtml">
+                    <f:param name="role" value="ADMIN" />
+                </s:link>
+            </ul>
+        </td>
+    </tr>
+</table>
+<h3>Feed groups administrators:</h3>
 
+<table cellspacing="5" class="deftable" width="75%">
+    <ui:repeat var="group" value="#{groupsService.allGroups}">
+        <tr>
+            <td class="term" width="15%">#{group.displayName}</td>
+            <td class="def">
+                <ui:repeat var="securityGroup" value="#{securityMod.getGroupAdministratorGroups(group)}">
+                    <li>
+                        #{externalSecurityService.getDisplayName(securityGroup)}
+                        (
+                        <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
+                            <f:param name="role" value="GROUP_ADMIN" />
+                            <f:param name="group" value="#{group.id}" />
+                            <f:param name="securityGroup" value="#{securityGroup.externalId}" />
+                        </s:link>
+                        )
+                    </li>
+                </ui:repeat>
+
+                <s:link value="Add group" view="/security/security_group_add.xhtml">
+                    <f:param name="role" value="GROUP_ADMIN" />
+                    <f:param name="group" value="#{group.id}" />
+                </s:link>
+            </td>
+            <td class="def">
+                <ui:repeat var="securityUser" value="#{securityMod.getGroupAdministratorUsers(group)}">
+                    <li>
+                        #{externalSecurityService.getDisplayName(securityUser)}
+                        (
+                        <s:link value="delete" action="#{securityMod.deleteSecurityUser}">
+                            <f:param name="role" value="GROUP_ADMIN" />
+                            <f:param name="group" value="#{group.id}" />
+                            <f:param name="securityUser" value="#{securityUser.externalId}" />
+                        </s:link>
+                        )
+                    </li>
+                </ui:repeat>
+
+                <s:link value="Add user" view="/security/security_user_add.xhtml">
+                    <f:param name="role" value="GROUP_ADMIN" />
+                    <f:param name="group" value="#{group.id}" />
+                </s:link>
+            </td>
+        </tr>
+    </ui:repeat>
+</table>
+
+<h3>Feed administrators:</h3>
+
+<ui:repeat var="group" value="#{groupsService.allGroups}">
+    <s:fragment rendered="#{groupsService.acceptedFeeds(group).size() > 0}">
+        #{group.displayName}:
         <table cellspacing="5" class="deftable" width="75%">
-            <ui:repeat var="group" value="#{groupsService.allGroups}">
+            <ui:repeat var="feed" value="#{groupsService.acceptedFeeds(group)}">
                 <tr>
-                    <td class="term" width="15%">#{group.displayName}</td>
+                    <td class="term" width="15%">#{feed.name}</td>
                     <td class="def">
-                        <ui:repeat var="securityGroup" value="#{securityMod.getGroupAdministratorGroups(group)}">
+                        <ui:repeat var="securityGroup" value="#{securityMod.getFeedAdministratorGroups(feed)}">
                             <li>
                                 #{externalSecurityService.getDisplayName(securityGroup)}
                                 (
                                 <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
-                                    <f:param name="role" value="GROUP_ADMIN" />
-                                    <f:param name="group" value="#{group.id}" />
+                                    <f:param name="role" value="FEED_ADMIN" />
+                                    <f:param name="feed" value="#{feed.name}" />
                                     <f:param name="securityGroup" value="#{securityGroup.externalId}" />
                                 </s:link>
                                 )
@@ -53,46 +129,33 @@
                         </ui:repeat>
 
                         <s:link value="Add group" view="/security/security_group_add.xhtml">
-                            <f:param name="role" value="GROUP_ADMIN" />
-                            <f:param name="group" value="#{group.id}" />
+                            <f:param name="role" value="FEED_ADMIN" />
+                            <f:param name="feed" value="#{feed.name}" />
                         </s:link>
                     </td>
+                    <td class="def">
+                        <ui:repeat var="securityUser" value="#{securityMod.getFeedAdministratorUsers(feed)}">
+                            <li>
+                                #{externalSecurityService.getDisplayName(securityUser)}
+                                (
+                                <s:link value="delete" action="#{securityMod.deleteSecurityUser}">
+                                    <f:param name="role" value="FEED_ADMIN" />
+                                    <f:param name="feed" value="#{feed.name}" />
+                                    <f:param name="securityUser" value="#{securityUser.externalId}" />
+                                </s:link>
+                                )
+                            </li>
+                        </ui:repeat>
+
+                        <s:link value="Add user" view="/security/security_user_add.xhtml">
+                            <f:param name="role" value="FEED_ADMIN" />
+                            <f:param name="feed" value="#{feed.name}" />
+                        </s:link>
+                    </td>
                 </tr>
             </ui:repeat>
         </table>
-
-        <h3>Feed administrators:</h3>
-
-        <ui:repeat var="group" value="#{groupsService.allGroups}">
-            <s:fragment rendered="#{groupsService.acceptedFeeds(group).size() > 0}">
-                #{group.displayName}:
-                <table cellspacing="5" class="deftable" width="75%">
-                    <ui:repeat var="feed" value="#{groupsService.acceptedFeeds(group)}">
-                        <tr>
-                            <td class="term" width="15%">#{feed.name}</td>
-                            <td class="def">
-                                <ui:repeat var="securityGroup" value="#{securityMod.getFeedAdministratorGroups(feed)}">
-                                    <li>
-                                        #{externalSecurityService.getDisplayName(securityGroup)}
-                                        (
-                                        <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
-                                            <f:param name="role" value="FEED_ADMIN" />
-                                            <f:param name="feed" value="#{feed.name}" />
-                                            <f:param name="securityGroup" value="#{securityGroup.externalId}" />
-                                        </s:link>
-                                        )
-                                    </li>
-                                </ui:repeat>
-
-                                <s:link value="Add group" view="/security/security_group_add.xhtml">
-                                    <f:param name="role" value="FEED_ADMIN" />
-                                    <f:param name="feed" value="#{feed.name}" />
-                                </s:link>
-                            </td>
-                        </tr>
-                    </ui:repeat>
-                </table>
-            </s:fragment>
-        </ui:repeat>
-    </ui:define>
+    </s:fragment>
+</ui:repeat>
+</ui:define>
 </ui:composition>

Copied: trunk/view/security/security_user_add.xhtml (from rev 222, trunk/view/security/security_group_add.xhtml)
===================================================================
--- trunk/view/security/security_user_add.xhtml	                        (rev 0)
+++ trunk/view/security/security_user_add.xhtml	2008-02-26 16:11:12 UTC (rev 223)
@@ -0,0 +1,39 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:s="http://jboss.com/products/seam/taglib"
+                xmlns:ui="http://java.sun.com/jsf/facelets"
+                xmlns:f="http://java.sun.com/jsf/core"
+                xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:rich="http://richfaces.org/rich"
+                xmlns:a="http://richfaces.org/a4j"
+                template="../layout/template.xhtml">
+    <ui:define name="header">
+        Select user to add:
+    </ui:define>
+    <ui:define name="body">
+        <h:form>
+            <div class="adminforms">
+                <br />
+                <h:panelGrid columns="1">
+                    <h:selectOneListbox required="true" value="#{securityMod.restrictedSecurityUser}"
+                                        converter="securityUserConverter">
+                        <s:selectItems var="user" value="#{externalSecurityService.allUsers}"
+                                       label="#{externalSecurityService.getDisplayName(user)}" />
+                    </h:selectOneListbox>
+                </h:panelGrid>
+
+                <div class="formbuttons">
+                    <ul>
+                        <li>
+                            <h:commandButton value="Add" styleClass="submit" action="#{securityMod.addSecurityUser}" />
+                        </li>
+                        <li>
+                            <s:button value="Cancel" view="/security/security_manager.xhtml" styleClass="submit" />
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </h:form>
+    </ui:define>
+</ui:composition>




More information about the jboss-cvs-commits mailing list