001/*
002 * SPDX-FileCopyrightText: none
003 * SPDX-License-Identifier: CC0-1.0
004 */
005
006package gov.nist.secauto.metaschema.schemagen;
007
008import gov.nist.secauto.metaschema.core.configuration.IConfiguration;
009import gov.nist.secauto.metaschema.core.model.IDefinition;
010
011import edu.umd.cs.findbugs.annotations.NonNull;
012
013@FunctionalInterface
014public interface IInlineStrategy {
015  @NonNull
016  IInlineStrategy NONE_INLINE = new IInlineStrategy() {
017    @Override
018    public boolean isInline(
019        @NonNull IDefinition definition,
020        @NonNull ModuleIndex metaschemaIndex) {
021      return false;
022    }
023  };
024
025  @NonNull
026  IInlineStrategy DEFINED_AS_INLINE = new IInlineStrategy() {
027    @Override
028    public boolean isInline(
029        @NonNull IDefinition definition,
030        @NonNull ModuleIndex metaschemaIndex) {
031      return definition.isInline();
032    }
033  };
034
035  @NonNull
036  IInlineStrategy CHOICE_NOT_INLINE = new ChoiceNotInlineStrategy();
037
038  @NonNull
039  static IInlineStrategy newInlineStrategy(@NonNull IConfiguration<SchemaGenerationFeature<?>> configuration) {
040    IInlineStrategy retval;
041    if (configuration.isFeatureEnabled(SchemaGenerationFeature.INLINE_DEFINITIONS)) {
042      if (configuration.isFeatureEnabled(SchemaGenerationFeature.INLINE_CHOICE_DEFINITIONS)) {
043        retval = DEFINED_AS_INLINE;
044      } else {
045        retval = CHOICE_NOT_INLINE;
046      }
047    } else {
048      retval = NONE_INLINE;
049    }
050    return retval;
051  }
052
053  boolean isInline(
054      @NonNull IDefinition definition,
055      @NonNull ModuleIndex metaschemaIndex);
056}