diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/BasePackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/BasePackageCacheManager.java index bc7b25ec7..61b19a61a 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/BasePackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/BasePackageCacheManager.java @@ -11,6 +11,13 @@ public abstract class BasePackageCacheManager implements IPackageCacheManager { private List myPackageServers = new ArrayList<>(); + /** + * Constructor + */ + public BasePackageCacheManager() { + super(); + } + public List getPackageServers() { return myPackageServers; } @@ -26,12 +33,55 @@ public abstract class BasePackageCacheManager implements IPackageCacheManager { } + /** + * Load the latest version of the identified package from the cache - it it exists + * + * @param id + * @return + * @throws IOException + */ + public NpmPackage loadPackageFromCacheOnly(String id) throws IOException { + return loadPackageFromCacheOnly(id, null); + } + + protected abstract NpmPackage loadPackageFromCacheOnly(String id, String version) throws IOException; + @Override - public String getPackageId(String canonical) throws IOException { + public String getPackageUrl(String packageId) throws IOException { + String result = null; + NpmPackage npm = loadPackageFromCacheOnly(packageId); + if (npm != null) { + return npm.canonical(); + } + + for (String nextPackageServer : getPackageServers()) { + result = getPackageUrl(packageId, nextPackageServer); + if (result != null) { + return result; + } + } + + return result; + } + + + private String getPackageUrl(String packageId, String server) throws IOException { + PackageClient pc = new PackageClient(server); + List res = pc.search(packageId, null, null, false); + if (res.size() == 0) { + return null; + } else { + return res.get(0).getUrl(); + } + } + + + @Override + public String getPackageId(String canonicalUrl) throws IOException { String result = null; for (String nextPackageServer : getPackageServers()) { - result = getPackageId(canonical, nextPackageServer); + result = getPackageId(canonicalUrl, nextPackageServer); if (result != null) { break; } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/FilesystemPackageCacheManager.java index 7ac21b3c3..f01110b86 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/FilesystemPackageCacheManager.java @@ -80,10 +80,12 @@ import java.util.Map.Entry; * @author Grahame Grieve */ public class FilesystemPackageCacheManager extends BasePackageCacheManager implements IPackageCacheManager { - private static final Logger ourLog = LoggerFactory.getLogger(FilesystemPackageCacheManager.class); public static final String PACKAGE_REGEX = "^[a-z][a-z0-9\\_\\-]*(\\.[a-z0-9\\_\\-]+)+$"; public static final String PACKAGE_VERSION_REGEX = "^[a-z][a-z0-9\\_\\-]*(\\.[a-z0-9\\_\\-]+)+\\#[a-z0-9\\-\\_]+(\\.[a-z0-9\\-\\_]+)*$"; + private static final Logger ourLog = LoggerFactory.getLogger(FilesystemPackageCacheManager.class); private static final String CACHE_VERSION = "3"; // second version - see wiki page + public static final String PRIMARY_SERVER = "http://packages.fhir.org"; + public static final String SECONDARY_SERVER = "http://packages2.fhir.org/packages"; private String cacheFolder; private boolean progress = true; private List temporaryPackages = new ArrayList(); @@ -95,8 +97,8 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple * Constructor */ public FilesystemPackageCacheManager(boolean userMode, int toolsVersion) throws IOException { - addPackageServer("http://packages.fhir.org"); - addPackageServer("http://packages2.fhir.org/packages"); + addPackageServer(PRIMARY_SERVER); + addPackageServer(SECONDARY_SERVER); if (userMode) cacheFolder = Utilities.path(System.getProperty("user.home"), ".fhir", "packages"); @@ -196,15 +198,6 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } } - private String getPackageUrl(String packageId, String server) throws IOException { - PackageClient pc = new PackageClient(server); - List res = pc.search(packageId, null, null, false); - if (res.size() == 0) { - return null; - } else { - return res.get(0).getUrl(); - } - } private void listSpecs(Map specList, String server) throws IOException { PackageClient pc = new PackageClient(server); @@ -234,7 +227,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } // ok, well, we'll try the old way - return fetchTheOldWay(id, version); + return fetchTheOldWay(id, version); } public String getLatestVersion(String id) throws IOException { @@ -293,17 +286,6 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } } - /** - * Load the latest version of the identified package from the cache - it it exists - * - * @param id - * @return - * @throws IOException - */ - public NpmPackage loadPackageFromCacheOnly(String id) throws IOException { - return loadPackageFromCacheOnly(id, null); - } - /** * Load the identified package from the cache - it it exists *

@@ -315,7 +297,8 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple * @return * @throws IOException */ - public NpmPackage loadPackageFromCacheOnly(String id, String version) throws IOException { + @Override + protected NpmPackage loadPackageFromCacheOnly(String id, String version) throws IOException { if (!Utilities.noString(version) && version.startsWith("file:")) { return loadPackageFromFile(id, version.substring(5)); } @@ -345,14 +328,15 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple /** * Add an already fetched package to the cache */ - public NpmPackage addPackageToCache(String id, String version, InputStream tgz, String sourceDesc) throws IOException { + @Override + public NpmPackage addPackageToCache(String id, String version, InputStream packageTgzInputStream, String sourceDesc) throws IOException { checkValidVersionString(version, id); if (progress) { System.out.println("Installing " + id + "#" + (version == null ? "?" : version) + " to the package cache"); System.out.print(" Fetching:"); } - NpmPackage npm = NpmPackage.fromPackage(tgz, sourceDesc, true); + NpmPackage npm = NpmPackage.fromPackage(packageTgzInputStream, sourceDesc, true); if (progress) { System.out.println(); @@ -435,23 +419,11 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple @Override public String getPackageUrl(String packageId) throws IOException { - String result = null; - NpmPackage npm = loadPackageFromCacheOnly(packageId); - if (npm != null) { - return npm.canonical(); - } - - for (String nextPackageServer : getPackageServers()) { - result = getPackageUrl(nextPackageServer); - if (result != null) { - return result; - } - } - + String result = super.getPackageUrl(packageId); if (result == null) { result = getPackageUrlFromBuildList(packageId); } - + return result; } @@ -459,8 +431,9 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple for (NpmPackage p : temporaryPackages) { specList.put(p.name(), p.canonical()); } - listSpecs(specList, PRIMARY_SERVER); - listSpecs(specList, SECONDARY_SERVER); + for (String next : getPackageServers()) { + listSpecs(specList, next); + } addCIBuildSpecs(specList); } @@ -550,11 +523,11 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple } @Override - public String getPackageId(String canonical) throws IOException { - String retVal = super.getPackageId(canonical); + public String getPackageId(String canonicalUrl) throws IOException { + String retVal = super.getPackageId(canonicalUrl); if (retVal == null) { - retVal = getPackageIdFromBuildList(canonical); + retVal = getPackageIdFromBuildList(canonicalUrl); } return retVal; diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/IPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/IPackageCacheManager.java index 40a6e61c7..5ff0529c4 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/IPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/cache/IPackageCacheManager.java @@ -3,11 +3,14 @@ package org.hl7.fhir.utilities.cache; import org.hl7.fhir.exceptions.FHIRException; import java.io.IOException; +import java.io.InputStream; public interface IPackageCacheManager { - String getPackageId(String canonical) throws IOException; + String getPackageId(String canonicalUrl) throws IOException; + + NpmPackage addPackageToCache(String id, String version, InputStream packageTgzInputStream, String sourceDesc) throws IOException; String getPackageUrl(String packageId) throws IOException;