class KerberosKeytabDescriptor extends AbstractKerberosDescriptor {

  @Override
  public Map<String, Object> toMap() {
    Map<String, Object> map = new TreeMap<>();

    String data;

    data = getFile();
    map.put(KEY_FILE, data);

    // Build file owner map
    Map<String, String> owner = new TreeMap<>();

    data = getOwnerName();
    if (data != null) {
      owner.put(KEY_ACL_NAME, data);
    }

    data = getOwnerAccess();
    if (data != null) {
      owner.put(KEY_ACL_ACCESS, data);
    }

    if (!owner.isEmpty()) {
      map.put(KEY_OWNER, owner);
    }
    // Build file owner map (end)

    // Build file owner map
    Map<String, String> group = new TreeMap<>();

    data = getGroupName();
    if (data != null) {
      group.put(KEY_ACL_NAME, data);
    }

    data = getGroupAccess();
    if (data != null) {
      group.put(KEY_ACL_ACCESS, data);
    }

    if (!group.isEmpty()) {
      map.put(KEY_GROUP, group);
    }
    // Build file owner map (end)

    data = getConfiguration();
    if (data != null) {
      map.put(KEY_CONFIGURATION, data);
    }

    return map;
  }

  public  KerberosKeytabDescriptor(String file, String ownerName, String ownerAccess, String groupName,
                                  String groupAccess, String configuration, boolean cachable);
  public  KerberosKeytabDescriptor(Map<?, ?> data);

}