1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.databind.codegen.config;
7   
8   import dev.metaschema.databind.config.binding.MetaschemaBindings;
9   import edu.umd.cs.findbugs.annotations.NonNull;
10  import edu.umd.cs.findbugs.annotations.Nullable;
11  
12  /**
13   * Default implementation of {@link IChoiceGroupBindingConfiguration}.
14   *
15   * <p>
16   * This implementation wraps a
17   * {@link MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding}
18   * instance from the binding configuration and provides the configuration
19   * interface methods.
20   *
21   * <p>
22   * The class stores:
23   * <ul>
24   * <li>The required group-as name (guaranteed non-null from the schema)</li>
25   * <li>The optional fully-qualified Java type name for collection items</li>
26   * <li>A flag indicating whether to use wildcard bounded types (defaults to
27   * {@code true})</li>
28   * </ul>
29   */
30  public class DefaultChoiceGroupBindingConfiguration implements IChoiceGroupBindingConfiguration {
31    @NonNull
32    private final String groupAsName;
33    @Nullable
34    private final String itemTypeName;
35    private final boolean useWildcard;
36  
37    /**
38     * Constructs a new choice group binding configuration from a binding
39     * configuration object.
40     *
41     * @param binding
42     *          the binding configuration object from the parsed binding
43     *          configuration file
44     */
45    public DefaultChoiceGroupBindingConfiguration(
46        @NonNull MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding binding) {
47      this.groupAsName = binding.getName();
48  
49      MetaschemaBindings.MetaschemaBinding.DefineAssemblyBinding.ChoiceGroupBinding.ItemType itemType
50          = binding.getItemType();
51      if (itemType != null) {
52        this.itemTypeName = itemType.getValue();
53        // Default to true if not explicitly set
54        Boolean useWildcardFlag = itemType.getUseWildcard();
55        this.useWildcard = useWildcardFlag == null || useWildcardFlag;
56      } else {
57        this.itemTypeName = null;
58        this.useWildcard = true; // default value
59      }
60    }
61  
62    @Override
63    @NonNull
64    public String getGroupAsName() {
65      return groupAsName;
66    }
67  
68    @Override
69    @Nullable
70    public String getItemTypeName() {
71      return itemTypeName;
72    }
73  
74    @Override
75    public boolean isUseWildcard() {
76      return useWildcard;
77    }
78  }