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}