@Override
  public PolicyFinderResult findPolicy(EvaluationCtx context) {
    AbstractPolicy lookupPolicy = null;

    try {
      lookupPolicy = policies.getPolicy(context);

      // no matched policy found in the current policy collection, loading new one
      if (lookupPolicy == null) {
        try {
          AbstractPolicy loadedPolicy = policyResolver.lookup(context);
          policies.addPolicy(loadedPolicy);
          lookupPolicy = policies.getPolicy(context);
        } catch (PolicyException e) {
          e.printStackTrace();
        }
      }
    } catch (TopLevelPolicyException e) {
      e.printStackTrace();
    }

    return new PolicyFinderResult(lookupPolicy);
  }
 @Override
 public void init(PolicyFinder finder) {
   this.finder = finder;
   policyResolver.init(finder);
 }