001/* 002 * SPDX-FileCopyrightText: none 003 * SPDX-License-Identifier: CC0-1.0 004 */ 005 006package dev.metaschema.databind.model; 007 008import dev.metaschema.core.model.JsonGroupAsBehavior; 009import dev.metaschema.core.model.XmlGroupAsBehavior; 010import dev.metaschema.core.qname.IEnhancedQName; 011import edu.umd.cs.findbugs.annotations.NonNull; 012import edu.umd.cs.findbugs.annotations.Nullable; 013 014/** 015 * A data object to record the group as selections. 016 */ 017public interface IGroupAs { 018 /** 019 * A singleton instance representing a group-as for non-grouped (singleton) 020 * items. 021 */ 022 @NonNull 023 IGroupAs SINGLETON_GROUP_AS = new IGroupAs() { 024 @Override 025 public IEnhancedQName getGroupAsQName() { 026 return null; 027 } 028 029 @Override 030 public JsonGroupAsBehavior getJsonGroupAsBehavior() { 031 return JsonGroupAsBehavior.NONE; 032 } 033 034 @Override 035 public XmlGroupAsBehavior getXmlGroupAsBehavior() { 036 return XmlGroupAsBehavior.UNGROUPED; 037 } 038 }; 039 040 /** 041 * Get the qualified name for the group-as, which is used for JSON/YAML key 042 * naming. 043 * 044 * @return the qualified name, or {@code null} if this is a singleton group-as 045 */ 046 @Nullable 047 IEnhancedQName getGroupAsQName(); 048 049 /** 050 * Get the JSON group-as behavior that determines how grouped items are 051 * serialized in JSON/YAML formats. 052 * 053 * @return the JSON group-as behavior 054 */ 055 @NonNull 056 JsonGroupAsBehavior getJsonGroupAsBehavior(); 057 058 /** 059 * Get the XML group-as behavior that determines how grouped items are 060 * serialized in XML format. 061 * 062 * @return the XML group-as behavior 063 */ 064 @NonNull 065 XmlGroupAsBehavior getXmlGroupAsBehavior(); 066}