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}