Browse Source

Generifying DefaultPermissionFactory

Luke Taylor 16 years ago
parent
commit
8570d864dc

+ 1 - 1
acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java

@@ -49,7 +49,7 @@ public class BasePermission extends AbstractPermission {
         super(mask, code);
     }
 
-    protected final static void registerPermissionsFor(Class<?> subClass) {
+    protected final static void registerPermissionsFor(Class<? extends Permission> subClass) {
         defaultPermissionFactory.registerPublicPermissions(subClass);
     }
 

+ 11 - 15
acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java

@@ -10,32 +10,28 @@ import org.springframework.util.Assert;
 
 /**
  * Default implementation of {@link PermissionFactory}.
- * 
  * <p>
  * Generally this class will be used by a {@link Permission} instance, as opposed to being dependency
  * injected into a {@link LookupStrategy} or similar. Nevertheless, the latter mode of operation is
  * fully supported (in which case your {@link Permission} implementations probably should extend
  * {@link AbstractPermission} instead of {@link AbstractRegisteredPermission}).
- * </p>
- * 
+ *
  * @author Ben Alex
  * @since 2.0.3
- *
  */
 public class DefaultPermissionFactory implements PermissionFactory {
-    private Map registeredPermissionsByInteger = new HashMap();
-    private Map registeredPermissionsByName = new HashMap();
+    private final Map<Integer, Permission> registeredPermissionsByInteger = new HashMap<Integer, Permission>();
+    private final Map<String, Permission> registeredPermissionsByName = new HashMap<String, Permission>();
 
     /**
      * Permit registration of a {@link DefaultPermissionFactory} class. The class must provide
      * public static fields of type {@link Permission} to represent the possible permissions.
-     * 
+     *
      * @param clazz a {@link Permission} class with public static fields to register
      */
-    public void registerPublicPermissions(Class clazz) {
+    public void registerPublicPermissions(Class<? extends Permission> clazz) {
         Assert.notNull(clazz, "Class required");
-        Assert.isAssignable(Permission.class, clazz);
-        
+
         Field[] fields = clazz.getFields();
 
         for (int i = 0; i < fields.length; i++) {
@@ -46,7 +42,7 @@ public class DefaultPermissionFactory implements PermissionFactory {
                     // Found a Permission static field
                     Permission perm = (Permission) fieldValue;
                     String permissionName = fields[i].getName();
-                    
+
                     registerPermission(perm, permissionName);
                 }
             } catch (Exception ignore) {}
@@ -56,18 +52,18 @@ public class DefaultPermissionFactory implements PermissionFactory {
     public void registerPermission(Permission perm, String permissionName) {
         Assert.notNull(perm, "Permission required");
         Assert.hasText(permissionName, "Permission name required");
-        
+
         Integer mask = new Integer(perm.getMask());
 
         // Ensure no existing Permission uses this integer or code
         Assert.isTrue(!registeredPermissionsByInteger.containsKey(mask), "An existing Permission already provides mask " + mask);
         Assert.isTrue(!registeredPermissionsByName.containsKey(permissionName), "An existing Permission already provides name '" + permissionName + "'");
-        
+
         // Register the new Permission
         registeredPermissionsByInteger.put(mask, perm);
         registeredPermissionsByName.put(permissionName, perm);
     }
-    
+
     public Permission buildFromMask(int mask) {
         if (registeredPermissionsByInteger.containsKey(new Integer(mask))) {
             // The requested mask has an exactly match against a statically-defined Permission, so return it
@@ -123,5 +119,5 @@ public class DefaultPermissionFactory implements PermissionFactory {
 
         return permissions;
     }
-    
+
 }