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}