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}