code: @Override
      public PolicyFinderResult findPolicy(EvaluationCtx context) {
          try {
              AbstractPolicy policy = m_policyManager.getPolicy(context);
  
              if (policy == null) {
                  return new PolicyFinderResult();
              }
  
              return new PolicyFinderResult(policy);
          } catch (TopLevelPolicyException tlpe) {
              return new PolicyFinderResult(tlpe.getStatus());
          } catch (PolicyIndexException pdme) {
              if (logger.isDebugEnabled()) {
                  logger.debug("problem processing policy", pdme);
              }
  
              List<String> codes = new ArrayList<String>();
              codes.add(Status.STATUS_PROCESSING_ERROR);
              return new PolicyFinderResult(new Status(codes, pdme.getMessage()));
          }
      }
docs: Finds a policy based on a request's context. If more than one policy
  matches, then this either returns an error or a new policy wrapping the
  multiple policies (depending on which constructor was used to construct
  this instance).
  
  @param context
  the representation of the request data
  @return the result of trying to find an applicable policy