1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package gov.nist.secauto.metaschema.schemagen;
7   
8   import gov.nist.secauto.metaschema.core.configuration.IConfiguration;
9   import gov.nist.secauto.metaschema.core.model.IDefinition;
10  
11  import edu.umd.cs.findbugs.annotations.NonNull;
12  
13  @FunctionalInterface
14  public interface IInlineStrategy {
15    @NonNull
16    IInlineStrategy NONE_INLINE = new IInlineStrategy() {
17      @Override
18      public boolean isInline(
19          @NonNull IDefinition definition,
20          @NonNull ModuleIndex metaschemaIndex) {
21        return false;
22      }
23    };
24  
25    @NonNull
26    IInlineStrategy DEFINED_AS_INLINE = new IInlineStrategy() {
27      @Override
28      public boolean isInline(
29          @NonNull IDefinition definition,
30          @NonNull ModuleIndex metaschemaIndex) {
31        return definition.isInline();
32      }
33    };
34  
35    @NonNull
36    IInlineStrategy CHOICE_NOT_INLINE = new ChoiceNotInlineStrategy();
37  
38    @NonNull
39    static IInlineStrategy newInlineStrategy(@NonNull IConfiguration<SchemaGenerationFeature<?>> configuration) {
40      IInlineStrategy retval;
41      if (configuration.isFeatureEnabled(SchemaGenerationFeature.INLINE_DEFINITIONS)) {
42        if (configuration.isFeatureEnabled(SchemaGenerationFeature.INLINE_CHOICE_DEFINITIONS)) {
43          retval = DEFINED_AS_INLINE;
44        } else {
45          retval = CHOICE_NOT_INLINE;
46        }
47      } else {
48        retval = NONE_INLINE;
49      }
50      return retval;
51    }
52  
53    boolean isInline(
54        @NonNull IDefinition definition,
55        @NonNull ModuleIndex metaschemaIndex);
56  }