Merge pull request #1018 from hapifhir/ja_20221129_graphql_type_cleanup
Correct GraphQL Schema Validation Errors
This commit is contained in:
commit
5225640e50
|
@ -277,8 +277,14 @@ public class GraphQLSchemaGenerator {
|
||||||
|
|
||||||
private void generateElementBase(Writer writer, EnumSet<FHIROperationType> operations) throws IOException {
|
private void generateElementBase(Writer writer, EnumSet<FHIROperationType> operations) throws IOException {
|
||||||
if (operations.contains(FHIROperationType.READ) || operations.contains(FHIROperationType.SEARCH)) {
|
if (operations.contains(FHIROperationType.READ) || operations.contains(FHIROperationType.SEARCH)) {
|
||||||
|
writer.write("interface IElement {\r\n");
|
||||||
|
writer.write(" id: String\r\n");
|
||||||
|
writer.write(" extension: [Extension]\r\n");
|
||||||
|
writer.write("}\r\n");
|
||||||
|
writer.write("\r\n");
|
||||||
|
|
||||||
writer.write("type ElementBase {\r\n");
|
writer.write("type ElementBase {\r\n");
|
||||||
writer.write(" id: ID\r\n");
|
writer.write(" id: String\r\n");
|
||||||
writer.write(" extension: [Extension]\r\n");
|
writer.write(" extension: [Extension]\r\n");
|
||||||
writer.write("}\r\n");
|
writer.write("}\r\n");
|
||||||
writer.write("\r\n");
|
writer.write("\r\n");
|
||||||
|
@ -298,19 +304,25 @@ public class GraphQLSchemaGenerator {
|
||||||
List<StringBuilder> list = new ArrayList<>();
|
List<StringBuilder> list = new ArrayList<>();
|
||||||
StringBuilder b = new StringBuilder();
|
StringBuilder b = new StringBuilder();
|
||||||
list.add(b);
|
list.add(b);
|
||||||
b.append("type ");
|
b.append("interface ");
|
||||||
b.append(sd.getName());
|
b.append("I" + sd.getName());
|
||||||
StructureDefinition sdp = context.fetchResource(StructureDefinition.class, sd.getBaseDefinition());
|
generateTypeSuperinterfaceDeclaration(sd, b);
|
||||||
if (sdp != null) {
|
|
||||||
b.append(" implements ");
|
|
||||||
b.append(sdp.getType());
|
|
||||||
}
|
|
||||||
b.append(" {\r\n");
|
b.append(" {\r\n");
|
||||||
ElementDefinition ed = sd.getSnapshot().getElementFirstRep();
|
ElementDefinition ed = sd.getSnapshot().getElementFirstRep();
|
||||||
generateProperties(existingTypeNames, list, b, sd.getName(), sd, ed, "type", "");
|
generateProperties(existingTypeNames, list, b, sd.getName(), sd, ed, "type", "");
|
||||||
b.append("}");
|
b.append("}");
|
||||||
b.append("\r\n");
|
b.append("\r\n");
|
||||||
b.append("\r\n");
|
b.append("\r\n");
|
||||||
|
|
||||||
|
b.append("type ");
|
||||||
|
b.append(sd.getName());
|
||||||
|
generateTypeSuperinterfaceDeclaration(sd, b);
|
||||||
|
b.append(" {\r\n");
|
||||||
|
generateProperties(existingTypeNames, list, b, sd.getName(), sd, ed, "type", "");
|
||||||
|
b.append("}");
|
||||||
|
b.append("\r\n");
|
||||||
|
b.append("\r\n");
|
||||||
|
|
||||||
for (StringBuilder bs : list) {
|
for (StringBuilder bs : list) {
|
||||||
writer.write(bs.toString());
|
writer.write(bs.toString());
|
||||||
}
|
}
|
||||||
|
@ -336,6 +348,23 @@ public class GraphQLSchemaGenerator {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void generateTypeSuperinterfaceDeclaration(StructureDefinition theParentSd, StringBuilder theBuilder) {
|
||||||
|
StructureDefinition baseSd = theParentSd;
|
||||||
|
boolean first = true;
|
||||||
|
while (baseSd != null && baseSd.getBaseDefinition() != null) {
|
||||||
|
baseSd = context.fetchResource(StructureDefinition.class, baseSd.getBaseDefinition());
|
||||||
|
if (baseSd != null) {
|
||||||
|
if (first) {
|
||||||
|
theBuilder.append(" implements ");
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
theBuilder.append(" & ");
|
||||||
|
}
|
||||||
|
theBuilder.append("I" + baseSd.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void generateProperties(Map<String, String> existingTypeNames, List<StringBuilder> list, StringBuilder b, String typeName, StructureDefinition sd, ElementDefinition ed, String mode, String suffix) throws IOException {
|
private void generateProperties(Map<String, String> existingTypeNames, List<StringBuilder> list, StringBuilder b, String typeName, StructureDefinition sd, ElementDefinition ed, String mode, String suffix) throws IOException {
|
||||||
List<ElementDefinition> children = profileUtilities.getChildList(sd, ed);
|
List<ElementDefinition> children = profileUtilities.getChildList(sd, ed);
|
||||||
for (ElementDefinition child : children) {
|
for (ElementDefinition child : children) {
|
||||||
|
|
Loading…
Reference in New Issue