001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.databind.codegen.config;
007
008import java.util.List;
009import java.util.Map;
010
011import edu.umd.cs.findbugs.annotations.NonNull;
012import edu.umd.cs.findbugs.annotations.Nullable;
013
014/**
015 * Provides binding configuration for a specific Metaschema definition.
016 * <p>
017 * This interface defines how an individual field or assembly definition is
018 * mapped to a generated Java class, including the class name, base class, and
019 * interfaces to implement.
020 */
021public interface IDefinitionBindingConfiguration {
022  /**
023   * Get the class name to use for the generated class associated with this
024   * binding.
025   *
026   * @return a class name
027   */
028  @Nullable
029  String getClassName();
030
031  /**
032   * Get the class that the associated generated class will extend.
033   *
034   * @return a full type, including the package
035   */
036  @Nullable
037  String getQualifiedBaseClassName();
038
039  /**
040   * A collection of interfaces that the associated generated class will
041   * implement.
042   *
043   * @return a list of fully qualified type names for interfaces
044   */
045  @NonNull
046  List<String> getInterfacesToImplement();
047
048  /**
049   * Get the choice group binding configurations for this definition.
050   *
051   * <p>
052   * Choice group bindings provide configuration for choice groups within this
053   * assembly definition, keyed by the choice group's {@code group-as} name.
054   *
055   * @return a map of group-as name to choice group binding configuration
056   */
057  @NonNull
058  Map<String, IChoiceGroupBindingConfiguration> getChoiceGroupBindings();
059}