1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.databind.model;
7   
8   import dev.metaschema.core.model.JsonGroupAsBehavior;
9   import dev.metaschema.core.model.XmlGroupAsBehavior;
10  import dev.metaschema.core.qname.IEnhancedQName;
11  import edu.umd.cs.findbugs.annotations.NonNull;
12  import edu.umd.cs.findbugs.annotations.Nullable;
13  
14  /**
15   * A data object to record the group as selections.
16   */
17  public interface IGroupAs {
18    /**
19     * A singleton instance representing a group-as for non-grouped (singleton)
20     * items.
21     */
22    @NonNull
23    IGroupAs SINGLETON_GROUP_AS = new IGroupAs() {
24      @Override
25      public IEnhancedQName getGroupAsQName() {
26        return null;
27      }
28  
29      @Override
30      public JsonGroupAsBehavior getJsonGroupAsBehavior() {
31        return JsonGroupAsBehavior.NONE;
32      }
33  
34      @Override
35      public XmlGroupAsBehavior getXmlGroupAsBehavior() {
36        return XmlGroupAsBehavior.UNGROUPED;
37      }
38    };
39  
40    /**
41     * Get the qualified name for the group-as, which is used for JSON/YAML key
42     * naming.
43     *
44     * @return the qualified name, or {@code null} if this is a singleton group-as
45     */
46    @Nullable
47    IEnhancedQName getGroupAsQName();
48  
49    /**
50     * Get the JSON group-as behavior that determines how grouped items are
51     * serialized in JSON/YAML formats.
52     *
53     * @return the JSON group-as behavior
54     */
55    @NonNull
56    JsonGroupAsBehavior getJsonGroupAsBehavior();
57  
58    /**
59     * Get the XML group-as behavior that determines how grouped items are
60     * serialized in XML format.
61     *
62     * @return the XML group-as behavior
63     */
64    @NonNull
65    XmlGroupAsBehavior getXmlGroupAsBehavior();
66  }