001package org.hl7.fhir.r4.elementmodel;
002
003import java.io.File;
004import java.io.FileInputStream;
005import java.io.FileOutputStream;
006import java.util.Map.Entry;
007
008import org.hl7.fhir.r4.context.IWorkerContext;
009import org.hl7.fhir.r4.context.SimpleWorkerContext;
010import org.hl7.fhir.r4.elementmodel.Manager.FhirFormat;
011import org.hl7.fhir.r4.formats.IParser.OutputStyle;
012import org.hl7.fhir.utilities.TextFile;
013import org.hl7.fhir.utilities.Utilities;
014
015import com.google.gson.JsonArray;
016import com.google.gson.JsonElement;
017import com.google.gson.JsonObject;
018
019public class Tester {
020
021        public static void main(String[] args) throws Exception {
022                IWorkerContext context = SimpleWorkerContext.fromPack(Utilities.path("C:\\work\\org.hl7.fhir\\build\\publish", "validation-min.xml.zip"));
023                int t = 0;
024                int ok = 0;
025                for (String f : new File("C:\\work\\org.hl7.fhir\\build\\publish").list()) {
026                        if (f.endsWith(".xml") && !f.endsWith(".canonical.xml") && !f.contains("profile") && !f.contains("questionnaire") && new File("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".ttl")).exists()) {
027//                              if (f.equals("account-questionnaire.xml")) {
028                                System.out.print("convert "+f);
029//                              Manager.convert(context, new FileInputStream("C:\\work\\org.hl7.fhir\\build\\publish\\"+f), FhirFormat.XML, 
030//                                              new FileOutputStream("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".mm.json")), FhirFormat.JSON, OutputStyle.PRETTY);
031//                              String src = normalise(TextFile.fileToString("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".mm.json")));
032//                              String tgt = normalise(TextFile.fileToString("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".json")));
033                                Element e = Manager.parse(context, new FileInputStream("C:\\work\\org.hl7.fhir\\build\\publish\\"+f), FhirFormat.XML);
034                                Manager.compose(context, e, new FileOutputStream("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".mm.ttl")), FhirFormat.TURTLE, OutputStyle.PRETTY, null);
035        Manager.compose(context, e, new FileOutputStream("C:\\temp\\resource.xml"), FhirFormat.XML, OutputStyle.PRETTY, null);
036                                String src = TextFile.fileToString("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".mm.ttl"));
037                                String tgt = TextFile.fileToString("C:\\work\\org.hl7.fhir\\build\\publish\\"+Utilities.changeFileExt(f, ".ttl"));
038                                t++;
039                                if (src.equals(tgt)) {
040                                        System.out.println(".. ok");
041                                        ok++;
042                                } else
043                                        System.out.println(".. fail");
044                                }
045//                      }
046                }
047                System.out.println("done - "+Integer.toString(t)+" files, "+Integer.toString(ok)+" ok");
048        }
049
050        private static com.google.gson.JsonParser  parser = new com.google.gson.JsonParser();
051        
052        private static String normalise(String s) {
053                JsonObject json = parser.parse(s).getAsJsonObject();
054                JsonElement txt = json.get("text");
055                if (txt != null) {
056                        if (((JsonObject) txt).has("div"))
057                        ((JsonObject) txt).remove("div");
058                }
059                removeComments(json);
060          return json.toString();
061        }
062
063        private static void removeComments(JsonArray arr) {
064          for (JsonElement i : arr) {
065                if (i instanceof JsonObject)
066                        removeComments((JsonObject) i);
067                if (i instanceof JsonArray) 
068                        removeComments((JsonArray) i);
069          }
070        }
071        
072        private static void removeComments(JsonObject json) {
073                if (json.has("fhir_comments"))
074                        json.remove("fhir_comments");
075          for (Entry<String, JsonElement> p : json.entrySet()) {
076                if (p.getValue() instanceof JsonObject) 
077                        removeComments((JsonObject) p.getValue());
078                if (p.getValue() instanceof JsonArray) 
079                        removeComments((JsonArray) p.getValue());
080          }
081        
082        }
083
084}