Package org.jboss.seam.example.seamspace

Source Code of org.jboss.seam.example.seamspace.ImagePermission

package org.jboss.seam.example.seamspace;

import static org.jboss.seam.ScopeType.CONVERSATION;

import java.io.Serializable;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.core.Conversation;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.security.Role;
import org.jboss.seam.security.SimplePrincipal;
import org.jboss.seam.security.management.IdentityManager;
import org.jboss.seam.security.permission.Permission;
import org.jboss.seam.security.permission.PermissionManager;
import org.jboss.seam.security.permission.action.PermissionSearch;

@Name("imagePermission")
@Scope(CONVERSATION)
public class ImagePermission implements Serializable
{
   private static final long serialVersionUID = -4943654157860780587L;

   private List<String> selectedRoles;  
   private List<Member> selectedFriends;
   private List<String> selectedActions;
  
   private List<String> originalActions;
  
   private List<Member> availableFriends;  
  
   @In IdentityManager identityManager;
   @In PermissionManager permissionManager;
  
   @In EntityManager entityManager;
  
   @In PermissionSearch permissionSearch;  
  
   private MemberImage target;
  
   private Principal recipient;
  
   @SuppressWarnings("unchecked")
   @Begin(nested = true)
   public void createPermission()
   {
      target = (MemberImage) permissionSearch.getTarget();
     
      selectedFriends = new ArrayList<Member>();
     
      availableFriends = entityManager.createQuery(
            "select f.friend from MemberFriend f where f.member = :member and f.authorized = true")
            .setParameter("member", target.getMember())
            .getResultList();     
   }
  
   @Begin(nested = true)
   public void editPermission()
   {
      target = (MemberImage) permissionSearch.getTarget();
      recipient = permissionSearch.getSelectedRecipient();
           
      List<Permission> permissions = permissionManager.listPermissions(target);
     
      selectedActions = new ArrayList<String>();     
     
      for (Permission permission : permissions)
      {
         if (permission.getRecipient().equals(recipient))
         {
            if (!selectedActions.contains(permission.getAction()))
            {
               selectedActions.add(permission.getAction());
            }
         }
      }
     
      originalActions = new ArrayList<String>(selectedActions);
   }

   public List<String> getSelectedRoles()
   {
      return selectedRoles;
   }
  
   public void setSelectedRoles(List<String> selectedRoles)
   {
      this.selectedRoles = selectedRoles;
   }
  
   public List<Member> getSelectedFriends()
   {
      return selectedFriends;
   }
  
   public void setSelectedFriends(List<Member> selectedFriends)
   {
      this.selectedFriends = selectedFriends;
   }
  
   public List<String> getSelectedActions()
   {
      return selectedActions;
   }
  
   public void setSelectedActions(List<String> selectedActions)
   {
      this.selectedActions = selectedActions;
   }
  
   public String applyPermissions()
   {
      // If the recipient isn't null, it means we're editing existing permissions
      if (recipient != null)
      {
         List<Permission> grantedPermissions = new ArrayList<Permission>();
         List<Permission> revokedPermissions = new ArrayList<Permission>();
        
         for (String action : selectedActions)
         {
            if (!originalActions.contains(action))
            {
               grantedPermissions.add(new Permission(target, action, recipient));
            }
         }
        
         for (String action : originalActions)
         {
            if (!selectedActions.contains(action))
            {
               revokedPermissions.add(new Permission(target, action, recipient));
            }
         }
        
         if (!grantedPermissions.isEmpty()) permissionManager.grantPermissions(grantedPermissions);
         if (!revokedPermissions.isEmpty()) permissionManager.revokePermissions(revokedPermissions);
      }
      // otherwise this is a set of new permissions
      else
      {
         if (selectedActions.size() == 0)
         {
            FacesMessages.instance().add("You must select at least one action");
            return "failure";
         }
        
         List<Permission> permissions = new ArrayList<Permission>();
  
         for (String role : selectedRoles)
         {
            Principal r = new Role(role);
            for (String action : selectedActions)
            {           
               permissions.add(new Permission(target, action, r));
            }
         }
        
         for (Member friend : selectedFriends)
         {
            MemberAccount acct = (MemberAccount) entityManager.createQuery(
                  "select a from MemberAccount a where a.member = :member")
                  .setParameter("member", friend)
                  .getSingleResult();
           
            Principal p = new SimplePrincipal(acct.getUsername());
           
            for (String action : selectedActions)
            {
               permissions.add(new Permission(target, action, p));
            }
         }
        
         permissionManager.grantPermissions(permissions);
      }
      Conversation.instance().endBeforeRedirect();
      return "success";
   }
  
   public List<Member> getAvailableFriends()
   {
      return availableFriends;
   }
  
   public MemberImage getTarget()
   {
      return target;
   }
  
   public Principal getRecipient()
   {
      return recipient;
   }
}
TOP

Related Classes of org.jboss.seam.example.seamspace.ImagePermission

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.