"', groupType='" + groupType + "', permissionOwner='" +
permissionOwner + "', permissionActivities='" +
Arrays.toString(permissionActivities) + "'");
}
final IAuthorizationPrincipal principal = AuthorizationPrincipalHelper.principalFromUser(person);
final JsonEntityBean canonicalRootGroup = getRootEntity(groupType);
if (log.isDebugEnabled()) {
log.debug("Found for groupType='" + groupType +
"' the following canonicalRootGroup: " +
canonicalRootGroup);
}
// First check the appropriate canonical super-target for the specified type
String canonicalSuperTarget = null;
switch (groupType) {
case JsonEntityBean.ENTITY_GROUP:
canonicalSuperTarget = IPermission.ALL_GROUPS_TARGET;
break;
case JsonEntityBean.ENTITY_CATEGORY:
canonicalSuperTarget = IPermission.ALL_CATEGORIES_TARGET;
break;
default:
throw new RuntimeException("Unrecognized groupType: " + groupType);
}
if (log.isDebugEnabled()) {
log.debug("Identified for groupType='" + groupType +
"' the following canonicalSuperTarget: " +
canonicalSuperTarget);
}
for (String activity : permissionActivities) {
if (principal.hasPermission(permissionOwner, activity, canonicalSuperTarget)) {
return canonicalRootGroup;
}
}
// Next check the canonical root group itself
for (String activity : permissionActivities) {
if (principal.hasPermission(permissionOwner, activity, canonicalRootGroup.getId())) {
return canonicalRootGroup;
}
}
// So much for the easy paths -- see if the user has any records at all for this specific owner/activity
JsonEntityBean rslt = null; // Default
final List<IPermission> permissionsOfRelevantActivity = new ArrayList<IPermission>();
for (String activity : permissionActivities) {
permissionsOfRelevantActivity.addAll(
Arrays.asList(principal.getAllPermissions(permissionOwner, activity, null))
);
}
if (log.isDebugEnabled()) {
log.debug("For user='" + person.getUserName() +
"', groupType='" + groupType + "', permissionOwner='" +