1
2
3
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 }