001package gov.nist.secauto.oscal.lib.model; 002 003import gov.nist.secauto.metaschema.core.datatype.markup.MarkupLine; 004import gov.nist.secauto.metaschema.core.datatype.markup.MarkupMultiline; 005import gov.nist.secauto.metaschema.databind.IBindingContext; 006import gov.nist.secauto.metaschema.databind.model.AbstractBoundModule; 007import gov.nist.secauto.metaschema.databind.model.IBoundModule; 008import gov.nist.secauto.metaschema.databind.model.annotations.MetaschemaModule; 009import java.lang.Override; 010import java.lang.String; 011import java.net.URI; 012import java.util.List; 013 014@MetaschemaModule( 015 assemblies = { 016 Profile.class, 017 ProfileImport.class, 018 Merge.class, 019 ProfileGroup.class, 020 Modify.class, 021 InsertControls.class, 022 ProfileSelectControlById.class, 023 Matching.class 024 }, 025 imports = { 026 OscalMetadataModule.class, 027 OscalControlCommonModule.class 028 }, 029 remarks = "In OSCAL a profile represents a set of selected [controls](https://pages.nist.gov/OSCAL/concepts/terminology/#control) from one or more control catalogs. Such a set of controls can be referenced by an OSCAL [system security plan](https://pages.nist.gov/OSCAL/concepts/layer/implementation/ssp/) (SSP) to establish a control [baseline](https://pages.nist.gov/OSCAL/concepts/terminology/#baseline). This effective set of controls is produced from an OSCAL profile using a deterministic, predictable process called [profile resolution](https://pages.nist.gov/OSCAL/concepts/processing/profile-resolution/).\n" 030 + "\n" 031 + "A profile references one or more OSCAL catalogs or profiles to import controls for control selection and tailoring. A profile can also describe how a resulting catalog is structured. When the profile is resolved, these selections and modifications are processed to produce a resulting OSCAL catalog.\n" 032 + "\n" 033 + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations." 034) 035public final class OscalProfileModule extends AbstractBoundModule { 036 private static final MarkupLine NAME = MarkupLine.fromMarkdown("OSCAL Profile Model"); 037 038 private static final String SHORT_NAME = "oscal-profile"; 039 040 private static final String VERSION = "1.1.3"; 041 042 private static final URI XML_NAMESPACE = URI.create("http://csrc.nist.gov/ns/oscal/1.0"); 043 044 private static final URI JSON_BASE_URI = URI.create("http://csrc.nist.gov/ns/oscal"); 045 046 private static final MarkupMultiline REMARKS = MarkupMultiline.fromMarkdown("In OSCAL a profile represents a set of selected [controls](https://pages.nist.gov/OSCAL/concepts/terminology/#control) from one or more control catalogs. Such a set of controls can be referenced by an OSCAL [system security plan](https://pages.nist.gov/OSCAL/concepts/layer/implementation/ssp/) (SSP) to establish a control [baseline](https://pages.nist.gov/OSCAL/concepts/terminology/#baseline). This effective set of controls is produced from an OSCAL profile using a deterministic, predictable process called [profile resolution](https://pages.nist.gov/OSCAL/concepts/processing/profile-resolution/).\n" 047 + "\n" 048 + "A profile references one or more OSCAL catalogs or profiles to import controls for control selection and tailoring. A profile can also describe how a resulting catalog is structured. When the profile is resolved, these selections and modifications are processed to produce a resulting OSCAL catalog.\n" 049 + "\n" 050 + "OSCAL profiles have uses beyond establishing control baselines, such as documentation generation or as reference tables for validations."); 051 052 public OscalProfileModule(List<? extends IBoundModule> importedModules, 053 IBindingContext bindingContext) { 054 super(importedModules, bindingContext); 055 } 056 057 @Override 058 public MarkupLine getName() { 059 return NAME; 060 } 061 062 @Override 063 public String getShortName() { 064 return SHORT_NAME; 065 } 066 067 @Override 068 public String getVersion() { 069 return VERSION; 070 } 071 072 @Override 073 public URI getXmlNamespace() { 074 return XML_NAMESPACE; 075 } 076 077 @Override 078 public URI getJsonBaseUri() { 079 return JSON_BASE_URI; 080 } 081 082 @Override 083 public MarkupMultiline getRemarks() { 084 return REMARKS; 085 } 086}