diff --git a/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java b/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java
index 575b9f32c9..21611cb3ac 100644
--- a/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java
+++ b/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);
}
diff --git a/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java b/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java
index 55f62c778f..e9fe4d34d7 100644
--- a/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java
+++ b/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}.
- *
*
* 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}).
- *
- *
+ *
* @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 registeredPermissionsByInteger = new HashMap();
+ private final Map registeredPermissionsByName = new HashMap();
/**
* 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;
}
-
+
}