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}