String fullPath = SecurityHelper.getPreferencesFullPath(principal);
ArgUtil.notNull(new Object[] { fullPath, permission }, new String[] { "fullPath", "permission" },
"revokePermission(java.security.Principal, java.security.Permission)");
// Remove permissions on principal.
InternalPrincipal internalPrincipal = getInternalPrincipal(fullPath);
if (null != internalPrincipal)
{
Collection internalPermissions = internalPrincipal.getPermissions();
if (null != internalPermissions)
{
boolean revokePermission = false;
ArrayList newInternalPermissions = new ArrayList();
Iterator internalPermissionsIter = internalPermissions.iterator();
while (internalPermissionsIter.hasNext())
{
InternalPermission internalPermission = (InternalPermission) internalPermissionsIter.next();
if (!((internalPermission.getClassname().equals(permission.getClass().getName()))
&& (internalPermission.getName().equals(permission.getName())) && (internalPermission.getActions()
.equals(permission.getActions()))))
{
newInternalPermissions.add(internalPermission);
}
else
{
revokePermission = true;
}
}
if (revokePermission)
{
// clear the whole ThreadLocal permissions cache
permissionsCache.set(null);
try
{
internalPrincipal.setModifiedDate(new Timestamp(System.currentTimeMillis()));
internalPrincipal.setPermissions(newInternalPermissions);
getPersistenceBrokerTemplate().store(internalPrincipal);
}
catch (Exception e)
{