@Override
  public void initialize(
      Subject subject,
      CallbackHandler callbackHandler,
      Map<String, ?> sharedState,
      Map<String, ?> options) {

    if (delegateLoginModule == null) {
      delegateLoginModule = new DummyLoginModule();
      delegateLoginModule.initialize(subject, callbackHandler, sharedState, options);
    }
  }
  @Override
  public Set<Principal> rolesOf(Subject subject) {
    Set<DummyUserPrincipal> dummyPrincipals = subject.getPrincipals(DummyUserPrincipal.class);
    assert dummyPrincipals.size() <= 1;

    // DummyUserPrincipal found
    if (!dummyPrincipals.isEmpty()) {
      return getOnlyElement(dummyPrincipals).getRoles();
    }
    //
    else {
      Set<UserPrincipal> users = subject.getPrincipals(UserPrincipal.class);
      assert users.size() == 1 : "Too many/less UserPrincipals in subject: " + users;
      DummyUserPrincipal dummyUser =
          delegateLoginModule.userForName(getOnlyElement(users).getName());
      return dummyUser != null ? dummyUser.getRoles() : Collections.EMPTY_SET;
    }
  }