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