© 2026 Hedgehog Software, LLC
public class UISchemaGenerator { private readonly ConcurrentDictionary<(CustomFieldSet, CultureInfo), UISchemaSpecification> _cache = new(); public UISchemaSpecification Generate( CustomFieldSet fieldSet, MandatorySecurityScope scope, CultureInfo culture = default) { culture ??= CultureInfo.CurrentCulture; return _cache.GetOrAdd( key: (fieldSet, culture), valueFactory: _ => InternalGenerator(fieldSet, scope, culture)); } private UISchemaSpecification InternalGenerator( CustomFieldSet fieldSet, MandatorySecurityScope scope, CultureInfo culture) { var schemaBuilder = new UISchemaBuilder(); foreach (var group in fieldSet.Groups) { schemaBuilder .StartGroup(group.Title) .AddFields(scope, group.Fields) .EndGroup(); } return schemaBuilder.Build(); } private UISchemaSpecification InternalGenerator( CustomField.CustomField fieldSet, MandatorySecurityScope scope, CultureInfo culture) { var schemaBuilder = new UISchemaBuilder() .AddField(fieldSet) .Build(); return schemaBuilder; } }
public UISchemaSpecification Generate( Union<CustomField, CustomFieldSet> fieldSet, MandatorySecurityScope scope, CultureInfo culture = default) { // if someone passed CustomField then call InternalGenerator for CustomField // if someone passed CustomFieldSetthen call InternalGenerator for CustomFieldSet }
dictionary x2, Generate x2, InternalGenerator x2