1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.databind.model.impl;
7   
8   import gov.nist.secauto.metaschema.core.model.IGroupable;
9   import gov.nist.secauto.metaschema.core.model.JsonGroupAsBehavior;
10  import gov.nist.secauto.metaschema.core.model.XmlGroupAsBehavior;
11  import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
12  import gov.nist.secauto.metaschema.databind.model.IGroupAs;
13  
14  import edu.umd.cs.findbugs.annotations.NonNull;
15  
16  public interface IFeatureInstanceModelGroupAs extends IGroupable {
17    /**
18     * Get the underlying group-as provider.
19     *
20     * @return the group-as provider
21     */
22    @NonNull
23    IGroupAs getGroupAs();
24  
25    @Override
26    default String getGroupAsName() {
27      IEnhancedQName qname = getGroupAs().getGroupAsQName();
28      return qname == null ? null : qname.getLocalName();
29    }
30  
31    @Override
32    default IEnhancedQName getEffectiveXmlGroupAsQName() {
33      IEnhancedQName retval = null;
34      if (XmlGroupAsBehavior.GROUPED.equals(getXmlGroupAsBehavior())) {
35        IEnhancedQName qname = getGroupAs().getGroupAsQName();
36        if (qname == null) {
37          throw new IllegalStateException("Instance is grouped, but no group-as QName was provided.");
38        }
39        retval = qname;
40      }
41      return retval;
42    }
43  
44    @Override
45    default JsonGroupAsBehavior getJsonGroupAsBehavior() {
46      return getGroupAs().getJsonGroupAsBehavior();
47    }
48  
49    @Override
50    default XmlGroupAsBehavior getXmlGroupAsBehavior() {
51      return getGroupAs().getXmlGroupAsBehavior();
52    }
53  }