001package org.hl7.fhir.validation.packages; 002 003import java.io.IOException; 004import java.io.InputStream; 005import java.util.List; 006 007import org.hl7.fhir.exceptions.FHIRException; 008import org.hl7.fhir.exceptions.FHIRFormatError; 009import org.hl7.fhir.utilities.VersionUtilities; 010import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager; 011import org.hl7.fhir.utilities.npm.NpmPackage; 012import org.hl7.fhir.utilities.npm.PackageClient; 013import org.hl7.fhir.utilities.npm.PackageInfo; 014import org.hl7.fhir.utilities.npm.ToolsVersion; 015 016public class PackageValidator { 017 018 public static void main(String[] args) throws IOException { 019 new PackageValidator().execute(); 020 } 021 022 private void execute() throws IOException { 023 FilesystemPackageCacheManager pcm = new FilesystemPackageCacheManager(true, ToolsVersion.TOOLS_VERSION); 024 025 PackageClient pc = new PackageClient(PackageClient.PRIMARY_SERVER); 026 for (PackageInfo t : pc.search(null, null, null, false)) { 027 System.out.println("Check Package "+t.getId()); 028 List<PackageInfo> vl = pc.getVersions(t.getId()); 029 PackageInfo v = vl.get(vl.size()-1); 030 System.out.println(" v"+v.getVersion()); 031 try { 032 NpmPackage pi = pcm.loadPackage(v.getId(), v.getVersion()); 033 if (VersionUtilities.isR4Ver(pi.fhirVersion()) || VersionUtilities.isR3Ver(pi.fhirVersion()) || VersionUtilities.isR2Ver(pi.fhirVersion())) { 034 for (String n : pi.list("package")) { 035 if (n.endsWith(".json") && !n.equals("ig-r4.json")) { 036 InputStream s = pi.load("package", n); 037 try { 038 parseResource(s, pi.fhirVersion()); 039 } catch (Exception e) { 040 System.out.println(" error parsing "+n+" for "+pi.fhirVersion()+": "+e.getMessage()); 041 } 042 } 043 } 044 } else { 045 System.out.println(" Unsupported FHIR version "+pi.fhirVersion()); 046 } 047 } catch (Exception e) { 048 System.out.println(" Error - no FHIR version"); 049 } 050 } 051 } 052 053 private Object parseResource(InputStream s, String fhirVersion) throws FHIRFormatError, IOException { 054 if (VersionUtilities.isR4Ver((fhirVersion))) { 055 return new org.hl7.fhir.r4.formats.JsonParser().parse(s); 056 } 057 if (VersionUtilities.isR3Ver((fhirVersion))) { 058 return new org.hl7.fhir.dstu3.formats.JsonParser().parse(s); 059 } 060 if (VersionUtilities.isR2Ver((fhirVersion))) { 061 return new org.hl7.fhir.dstu2.formats.JsonParser().parse(s); 062 } 063 throw new FHIRException("Unknown version "+fhirVersion); 064 } 065}