1
2
3
4
5
6 package gov.nist.secauto.oscal.lib;
7
8 import gov.nist.secauto.metaschema.core.metapath.StaticContext;
9 import gov.nist.secauto.metaschema.core.model.IModuleLoader;
10 import gov.nist.secauto.metaschema.databind.DefaultBindingContext;
11 import gov.nist.secauto.oscal.lib.model.AssessmentPlan;
12 import gov.nist.secauto.oscal.lib.model.AssessmentResults;
13 import gov.nist.secauto.oscal.lib.model.Catalog;
14 import gov.nist.secauto.oscal.lib.model.ComponentDefinition;
15 import gov.nist.secauto.oscal.lib.model.PlanOfActionAndMilestones;
16 import gov.nist.secauto.oscal.lib.model.Profile;
17 import gov.nist.secauto.oscal.lib.model.SystemSecurityPlan;
18
19 import java.io.File;
20 import java.io.IOException;
21 import java.net.URISyntaxException;
22 import java.net.URL;
23 import java.nio.file.Path;
24 import java.util.List;
25
26 import edu.umd.cs.findbugs.annotations.NonNull;
27 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
28
29 public class OscalBindingContext
30 extends DefaultBindingContext {
31 @NonNull
32 public static final StaticContext OSCAL_STATIC_METAPATH_CONTEXT = StaticContext.builder()
33 .defaultModelNamespace(OscalModelConstants.NS_URI_OSCAL)
34 .build();
35 @NonNull
36 private static final OscalBindingContext SINGLETON = new OscalBindingContext();
37
38 @NonNull
39 @SuppressFBWarnings(value = "SING_SINGLETON_GETTER_NOT_SYNCHRONIZED", justification = "class initialization")
40 public static OscalBindingContext instance() {
41 return SINGLETON;
42 }
43
44
45
46
47
48
49
50 @SuppressFBWarnings(value = "SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR",
51 justification = "public constructor allows customized use in specialized usecases")
52 public OscalBindingContext(@NonNull List<IModuleLoader.IModulePostProcessor> modulePostProcessors) {
53 super(modulePostProcessors);
54 registerBindingMatcher(Catalog.class);
55 registerBindingMatcher(Profile.class);
56 registerBindingMatcher(SystemSecurityPlan.class);
57 registerBindingMatcher(ComponentDefinition.class);
58 registerBindingMatcher(AssessmentPlan.class);
59 registerBindingMatcher(AssessmentResults.class);
60 registerBindingMatcher(PlanOfActionAndMilestones.class);
61 }
62
63
64
65
66 protected OscalBindingContext() {
67 registerBindingMatcher(Catalog.class);
68 registerBindingMatcher(Profile.class);
69 registerBindingMatcher(SystemSecurityPlan.class);
70 registerBindingMatcher(ComponentDefinition.class);
71 registerBindingMatcher(AssessmentPlan.class);
72 registerBindingMatcher(AssessmentResults.class);
73 registerBindingMatcher(PlanOfActionAndMilestones.class);
74 }
75
76 @NonNull
77 public Catalog loadCatalog(@NonNull URL url) throws IOException, URISyntaxException {
78 return newBoundLoader().load(Catalog.class, url);
79 }
80
81 @NonNull
82 public Catalog loadCatalog(@NonNull Path path) throws IOException {
83 return newBoundLoader().load(Catalog.class, path);
84 }
85
86 @NonNull
87 public Catalog loadCatalog(@NonNull File file) throws IOException {
88 return newBoundLoader().load(Catalog.class, file);
89 }
90
91 @NonNull
92 public Profile loadProfile(@NonNull URL url) throws IOException, URISyntaxException {
93 return newBoundLoader().load(Profile.class, url);
94 }
95
96 @NonNull
97 public Profile loadProfile(@NonNull Path path) throws IOException {
98 return newBoundLoader().load(Profile.class, path);
99 }
100
101 @NonNull
102 public Profile loadProfile(@NonNull File file) throws IOException {
103 return newBoundLoader().load(Profile.class, file);
104 }
105
106 @NonNull
107 public SystemSecurityPlan loadSystemSecurityPlan(@NonNull URL url) throws IOException, URISyntaxException {
108 return newBoundLoader().load(SystemSecurityPlan.class, url);
109 }
110
111 @NonNull
112 public SystemSecurityPlan loadSystemSecurityPlan(@NonNull Path path) throws IOException {
113 return newBoundLoader().load(SystemSecurityPlan.class, path);
114 }
115
116 @NonNull
117 public SystemSecurityPlan loadSystemSecurityPlan(@NonNull File file) throws IOException {
118 return newBoundLoader().load(SystemSecurityPlan.class, file);
119 }
120
121 @NonNull
122 public ComponentDefinition loadComponentDefinition(@NonNull URL url) throws IOException, URISyntaxException {
123 return newBoundLoader().load(ComponentDefinition.class, url);
124 }
125
126 @NonNull
127 public ComponentDefinition loadComponentDefinition(@NonNull Path path) throws IOException {
128 return newBoundLoader().load(ComponentDefinition.class, path);
129 }
130
131 @NonNull
132 public ComponentDefinition loadComponentDefinition(@NonNull File file) throws IOException {
133 return newBoundLoader().load(ComponentDefinition.class, file);
134 }
135
136 @NonNull
137 public AssessmentPlan loadAssessmentPlan(@NonNull URL url) throws IOException, URISyntaxException {
138 return newBoundLoader().load(AssessmentPlan.class, url);
139 }
140
141 @NonNull
142 public AssessmentPlan loadAssessmentPlan(@NonNull Path path) throws IOException {
143 return newBoundLoader().load(AssessmentPlan.class, path);
144 }
145
146 @NonNull
147 public AssessmentPlan loadAssessmentPlan(@NonNull File file) throws IOException {
148 return newBoundLoader().load(AssessmentPlan.class, file);
149 }
150
151 @NonNull
152 public AssessmentResults loadAssessmentResults(@NonNull URL url) throws IOException, URISyntaxException {
153 return newBoundLoader().load(AssessmentResults.class, url);
154 }
155
156 @NonNull
157 public AssessmentResults loadAssessmentResults(@NonNull Path path) throws IOException {
158 return newBoundLoader().load(AssessmentResults.class, path);
159 }
160
161 @NonNull
162 public AssessmentResults loadAssessmentResults(@NonNull File file) throws IOException {
163 return newBoundLoader().load(AssessmentResults.class, file);
164 }
165
166 @NonNull
167 public PlanOfActionAndMilestones loadPlanOfActionAndMilestones(@NonNull URL url)
168 throws IOException, URISyntaxException {
169 return newBoundLoader().load(PlanOfActionAndMilestones.class, url);
170 }
171
172 @NonNull
173 public PlanOfActionAndMilestones loadPlanOfActionAndMilestones(@NonNull Path path) throws IOException {
174 return newBoundLoader().load(PlanOfActionAndMilestones.class, path);
175 }
176
177 @NonNull
178 public PlanOfActionAndMilestones loadPlanOfActionAndMilestones(@NonNull File file) throws IOException {
179 return newBoundLoader().load(PlanOfActionAndMilestones.class, file);
180 }
181 }