001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package dev.metaschema.databind.codegen.config;
007
008import java.util.LinkedHashMap;
009import java.util.LinkedList;
010import java.util.List;
011import java.util.Map;
012
013import dev.metaschema.core.util.CollectionUtil;
014import edu.umd.cs.findbugs.annotations.NonNull;
015import edu.umd.cs.findbugs.annotations.Nullable;
016
017/**
018 * Default implementation of {@link IMutableDefinitionBindingConfiguration} that
019 * provides mutable binding configuration for a specific Metaschema definition.
020 */
021public class DefaultDefinitionBindingConfiguration implements IMutableDefinitionBindingConfiguration {
022  @Nullable
023  private String className;
024  @Nullable
025  private String baseClassName;
026  @NonNull
027  private final List<String> interfacesToImplement = new LinkedList<>();
028  @NonNull
029  private final Map<String, IChoiceGroupBindingConfiguration> choiceGroupBindings = new LinkedHashMap<>();
030
031  /**
032   * Create a new definition binding configuration.
033   */
034  public DefaultDefinitionBindingConfiguration() {
035    // empty configuration
036  }
037
038  /**
039   * Create a new definition binding configuration based on a previous
040   * configuration.
041   *
042   * @param config
043   *          the previous configuration
044   */
045  public DefaultDefinitionBindingConfiguration(@NonNull IDefinitionBindingConfiguration config) {
046    this.className = config.getClassName();
047    this.baseClassName = config.getQualifiedBaseClassName();
048    this.interfacesToImplement.addAll(config.getInterfacesToImplement());
049    this.choiceGroupBindings.putAll(config.getChoiceGroupBindings());
050  }
051
052  @Override
053  public String getClassName() {
054    return className;
055  }
056
057  @Override
058  public void setClassName(String name) {
059    this.className = name;
060  }
061
062  @Override
063  public String getQualifiedBaseClassName() {
064    return baseClassName;
065  }
066
067  @Override
068  public void setQualifiedBaseClassName(String name) {
069    this.baseClassName = name;
070  }
071
072  @Override
073  public List<String> getInterfacesToImplement() {
074    return interfacesToImplement;
075  }
076
077  @Override
078  public void addInterfaceToImplement(String interfaceName) {
079    this.interfacesToImplement.add(interfaceName);
080  }
081
082  @Override
083  public Map<String, IChoiceGroupBindingConfiguration> getChoiceGroupBindings() {
084    return CollectionUtil.unmodifiableMap(choiceGroupBindings);
085  }
086
087  /**
088   * Add a choice group binding configuration.
089   *
090   * @param groupAsName
091   *          the group-as name from the Metaschema module
092   * @param config
093   *          the choice group binding configuration
094   */
095  public void addChoiceGroupBinding(@NonNull String groupAsName, @NonNull IChoiceGroupBindingConfiguration config) {
096    this.choiceGroupBindings.put(groupAsName, config);
097  }
098}