001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.databind.codegen.config;
007
008import dev.metaschema.databind.config.binding.MetaschemaBindings;
009import edu.umd.cs.findbugs.annotations.NonNull;
010import edu.umd.cs.findbugs.annotations.Nullable;
011
012/**
013 * Default implementation of {@link IChoiceGroupBindingConfiguration}.
014 *
015 * <p>
016 * This implementation wraps a
017 * {@link MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding}
018 * instance from the binding configuration and provides the configuration
019 * interface methods.
020 *
021 * <p>
022 * The class stores:
023 * <ul>
024 * <li>The required group-as name (guaranteed non-null from the schema)</li>
025 * <li>The optional fully-qualified Java type name for collection items</li>
026 * <li>A flag indicating whether to use wildcard bounded types (defaults to
027 * {@code true})</li>
028 * </ul>
029 */
030public class DefaultChoiceGroupBindingConfiguration implements IChoiceGroupBindingConfiguration {
031  @NonNull
032  private final String groupAsName;
033  @Nullable
034  private final String itemTypeName;
035  private final boolean useWildcard;
036
037  /**
038   * Constructs a new choice group binding configuration from a binding
039   * configuration object.
040   *
041   * @param binding
042   *          the binding configuration object from the parsed binding
043   *          configuration file
044   */
045  public DefaultChoiceGroupBindingConfiguration(
046      @NonNull MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding binding) {
047    this.groupAsName = binding.getName();
048
049    MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding.ItemType itemType
050        = binding.getItemType();
051    if (itemType != null) {
052      this.itemTypeName = itemType.getValue();
053      // Default to true if not explicitly set
054      Boolean useWildcardFlag = itemType.getUseWildcard();
055      this.useWildcard = useWildcardFlag == null || useWildcardFlag;
056    } else {
057      this.itemTypeName = null;
058      this.useWildcard = true; // default value
059    }
060  }
061
062  @Override
063  @NonNull
064  public String getGroupAsName() {
065    return groupAsName;
066  }
067
068  @Override
069  @Nullable
070  public String getItemTypeName() {
071    return itemTypeName;
072  }
073
074  @Override
075  public boolean isUseWildcard() {
076    return useWildcard;
077  }
078}