public ProfilingRule getRuleForPrincipal(Principal principal, String locatorName) { ProfilingRule rule = null; // lookup the rule for the given principal in our user/rule table PrincipalRule pr = lookupPrincipalRule(principal.getName(), locatorName); // if not found, fallback to the locator named rule or system wide rule if (pr == null) { // find rule on locator name rule = getRule(locatorName); if (rule == null) { // if not found, fallback to the system wide rule rule = getDefaultRule(); } pr = new PrincipalRuleImpl(); pr.setLocatorName(locatorName); pr.setPrincipalName(principal.getName()); pr.setProfilingRule(rule); principalRules.put(makePrincipalRuleKey(principal.getName(), locatorName), pr); // track cached principal rules trackCachedPrincipalRulesPut(principal.getName(), pr); } else { // Get the associated rule rule = pr.getProfilingRule(); } return rule; }
public void setRuleForPrincipal(Principal principal, ProfilingRule rule, String locatorName) { Criteria c = new Criteria(); c.addEqualTo("principalName", principal.getName()); c.addEqualTo("locatorName", locatorName); PrincipalRule pr = (PrincipalRule) getPersistenceBrokerTemplate() .getObjectByQuery( QueryFactory.newQuery(getPrincipalRuleClass(), c)); if (pr == null) { pr = new PrincipalRuleImpl(); // TODO: factory pr.setPrincipalName(principal.getName()); pr.setLocatorName(locatorName); pr.setProfilingRule(rule); } rule.setResolvers(resolvers); pr.setProfilingRule(rule); getPersistenceBrokerTemplate().store(pr); principalRules.put(makePrincipalRuleKey(principal.getName(), locatorName), pr); // track cached principal rules trackCachedPrincipalRulesPut(principal.getName(), pr); // reset persistent rules per principal rulesPerPrincipal.remove(principal.getName()); }