@Override
  public LdapAuthorizationBuilder build() {
    assertNotBuilt();
    if (cacheBuilder != null && cacheBuilder.isBuilt() == false) {
      cacheBuilder.build();
    }
    built = true;

    ModelNode add = new ModelNode();
    add.get(OP).set(ADD);
    add.get(ADDRESS).set(address);

    if (groupDnAttribute != null) {
      add.get(GROUP_DN_ATTRIBUTE).set(groupDnAttribute);
    }
    if (groupName != null) {
      add.get(GROUP_NAME).set(groupName.toString());
    }
    if (groupNameAttribute != null) {
      add.get(GROUP_NAME_ATTRIBUTE).set(groupNameAttribute);
    }
    if (iterative) {
      add.get(ITERATIVE).set(true);
    }
    if (groupAttribute != null) {
      add.get(GROUP_ATTRIBUTE).set(groupAttribute);
    }
    if (preferOriginalConnection == false) {
      add.get(PREFER_ORIGINAL_CONNECTION).set(preferOriginalConnection);
    }
    if (skipMissingGroups == true) {
      add.get(SKIP_MISSING_GROUPS).set(skipMissingGroups);
    }

    parent.addStep(add);
    for (ModelNode current : additionalSteps) {
      parent.addStep(current);
    }

    return parent;
  }
 PrincipalToGroupBuilder(LdapAuthorizationBuilder parent) {
   this.parent = parent;
   address = parent.getLdapAuthorizationAddress().add(GROUP_SEARCH, PRINCIPAL_TO_GROUP);
 }
 void assertNotBuilt() {
   parent.assertNotBuilt();
   if (built) {
     throw new IllegalStateException("Already built.");
   }
 }