1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.metaschema.schemagen;
28
29 import gov.nist.secauto.metaschema.core.configuration.IConfiguration;
30 import gov.nist.secauto.metaschema.core.model.IModule;
31 import gov.nist.secauto.metaschema.schemagen.json.JsonSchemaGenerator;
32 import gov.nist.secauto.metaschema.schemagen.xml.XmlSchemaGenerator;
33
34 import java.io.IOException;
35 import java.io.OutputStream;
36 import java.io.OutputStreamWriter;
37 import java.io.Writer;
38 import java.nio.charset.StandardCharsets;
39 import java.nio.file.Files;
40 import java.nio.file.Path;
41 import java.nio.file.StandardOpenOption;
42
43 import edu.umd.cs.findbugs.annotations.NonNull;
44
45 public interface ISchemaGenerator {
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 void generateFromModule(
61 @NonNull IModule metaschema,
62 @NonNull Writer writer,
63 @NonNull IConfiguration<SchemaGenerationFeature<?>> configuration);
64
65 static void generateSchema(
66 @NonNull IModule module,
67 @NonNull Path destination,
68 @NonNull SchemaFormat asFormat,
69 @NonNull IConfiguration<SchemaGenerationFeature<?>> configuration)
70 throws IOException {
71 ISchemaGenerator schemaGenerator = asFormat.getSchemaGenerator();
72
73 try (Writer writer = Files.newBufferedWriter(
74 destination,
75 StandardCharsets.UTF_8,
76 StandardOpenOption.CREATE,
77 StandardOpenOption.WRITE,
78 StandardOpenOption.TRUNCATE_EXISTING)) {
79 assert writer != null;
80 schemaGenerator.generateFromModule(module, writer, configuration);
81 writer.flush();
82 }
83 }
84
85 static void generateSchema(
86 @NonNull IModule module,
87 @NonNull OutputStream os,
88 @NonNull SchemaFormat asFormat,
89 @NonNull IConfiguration<SchemaGenerationFeature<?>> configuration)
90 throws IOException {
91 ISchemaGenerator schemaGenerator = asFormat.getSchemaGenerator();
92
93 Writer writer = new OutputStreamWriter(os, StandardCharsets.UTF_8);
94 schemaGenerator.generateFromModule(module, writer, configuration);
95 writer.flush();
96
97 }
98
99
100
101
102 enum SchemaFormat {
103
104
105
106 JSON(new JsonSchemaGenerator()),
107
108
109
110 XML(new XmlSchemaGenerator());
111
112 private final ISchemaGenerator schemaGenerator;
113
114 SchemaFormat(@NonNull ISchemaGenerator schemaGenerator) {
115 this.schemaGenerator = schemaGenerator;
116 }
117
118 public ISchemaGenerator getSchemaGenerator() {
119 return schemaGenerator;
120 }
121 }
122 }