AbstractKeyConstraintBuilder.java

/*
 * SPDX-FileCopyrightText: none
 * SPDX-License-Identifier: CC0-1.0
 */

package gov.nist.secauto.metaschema.core.model.constraint;

import gov.nist.secauto.metaschema.core.util.CollectionUtil;

import java.util.LinkedList;
import java.util.List;

import edu.umd.cs.findbugs.annotations.NonNull;

public abstract class AbstractKeyConstraintBuilder<
    T extends AbstractKeyConstraintBuilder<T, R>,
    R extends IKeyConstraint>
    extends AbstractConfigurableMessageConstraintBuilder<T, R> {
  @NonNull
  private final List<IKeyField> keyFields = new LinkedList<>();

  /**
   * Add a key field to the list of key fields.
   *
   * @param keyField
   *          the key field to add
   * @return this builder
   */
  @NonNull
  public T keyField(@NonNull IKeyField keyField) {
    this.keyFields.add(keyField);
    return getThis();
  }

  /**
   * Get the list of key fields set on this builder.
   *
   * @return the list of key fields
   */
  @NonNull
  protected List<IKeyField> getKeyFields() {
    return keyFields;
  }

  @Override
  protected void validate() {
    super.validate();

    CollectionUtil.requireNonEmpty(getKeyFields());
  }
}