class AccessTokenCacheFetcher extends CacheFetcher {

    @Override
    protected Object computeResult() {
        String googleIdentity;
        try {
            googleIdentity = AbstractUserMapper.getInstance().map(owner);
            EmailValidation.validateEmail(googleIdentity);
        }
        catch (IllegalArgumentException e) {
            throw Status.PERMISSION_DENIED.withDescription("Principal `" + owner + "` cannot be matched to a Google identity.").asRuntimeException();
        }
        MDC.put(LoggingUtils.MDC_ACCESS_TOKEN_USER_KEY, googleIdentity);
        AccessToken accessToken = AbstractProvider.getInstance().getAccessToken(googleIdentity, scopes);
        return AccessBoundaryUtils.addAccessBoundary(accessToken, target);
    }

    public  AccessTokenCacheFetcher(String owner, List<String> scopes, String target);

}