Merge branch 'master' of https://github.com/hapifhir/org.hl7.fhir.core
This commit is contained in:
commit
697b23e855
|
@ -193,6 +193,16 @@ public class VersionUtilities {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getPatch(String version) {
|
||||||
|
if (version == null)
|
||||||
|
return null;
|
||||||
|
if (Utilities.charCount(version, '.') == 2) {
|
||||||
|
String[] p = version.split("\\.");
|
||||||
|
return p[2];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isSemVer(String version) {
|
public static boolean isSemVer(String version) {
|
||||||
if (Utilities.charCount(version, '.') != 2) {
|
if (Utilities.charCount(version, '.') != 2) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -202,7 +212,7 @@ public class VersionUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return true if the current vresion equals test, or later
|
* return true if the current version equals test, or later
|
||||||
*
|
*
|
||||||
* so if a feature is defined in 4.0, if (VersionUtilities.isThisOrLater("4.0", version))...
|
* so if a feature is defined in 4.0, if (VersionUtilities.isThisOrLater("4.0", version))...
|
||||||
*
|
*
|
||||||
|
@ -213,10 +223,36 @@ public class VersionUtilities {
|
||||||
public static boolean isThisOrLater(String test, String current) {
|
public static boolean isThisOrLater(String test, String current) {
|
||||||
String t = getMajMin(test);
|
String t = getMajMin(test);
|
||||||
String c = getMajMin(current);
|
String c = getMajMin(current);
|
||||||
|
if (c.compareTo(t) == 0) {
|
||||||
|
return isMajMinOrLaterPatch(test, current);
|
||||||
|
}
|
||||||
boolean ok = c.compareTo(t) >= 0;
|
boolean ok = c.compareTo(t) >= 0;
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return true if the current version equals test for major and min, or later patch
|
||||||
|
*
|
||||||
|
* @param test
|
||||||
|
* @param current
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isMajMinOrLaterPatch(String test, String current) {
|
||||||
|
String t = getMajMin(test);
|
||||||
|
String c = getMajMin(current);
|
||||||
|
if (c.compareTo(t) == 0) {
|
||||||
|
String pt = getPatch(test);
|
||||||
|
String pc = getPatch(current);
|
||||||
|
if (pt==null || "x".equals(pt)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (pc!=null) {
|
||||||
|
return pc.compareTo(pt) >= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static String incMajorVersion(String v) {
|
public static String incMajorVersion(String v) {
|
||||||
assert isSemVer(v);
|
assert isSemVer(v);
|
||||||
int[] parts = splitParts(v);
|
int[] parts = splitParts(v);
|
||||||
|
|
|
@ -69,6 +69,9 @@ public abstract class BasePackageCacheManager implements IPackageCacheManager {
|
||||||
if (Utilities.noString(version)) {
|
if (Utilities.noString(version)) {
|
||||||
version = packageClient.getLatestVersion(id);
|
version = packageClient.getLatestVersion(id);
|
||||||
}
|
}
|
||||||
|
if (version.endsWith(".x")) {
|
||||||
|
version = packageClient.getLatestVersion(id, version);
|
||||||
|
}
|
||||||
InputStream stream = packageClient.fetch(id, version);
|
InputStream stream = packageClient.fetch(id, version);
|
||||||
String url = packageClient.url(id, version);
|
String url = packageClient.url(id, version);
|
||||||
return new InputStreamWithSrc(stream, url, version);
|
return new InputStreamWithSrc(stream, url, version);
|
||||||
|
|
|
@ -39,6 +39,7 @@ import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.utilities.IniFile;
|
import org.hl7.fhir.utilities.IniFile;
|
||||||
import org.hl7.fhir.utilities.TextFile;
|
import org.hl7.fhir.utilities.TextFile;
|
||||||
import org.hl7.fhir.utilities.Utilities;
|
import org.hl7.fhir.utilities.Utilities;
|
||||||
|
import org.hl7.fhir.utilities.VersionUtilities;
|
||||||
import org.hl7.fhir.utilities.cache.NpmPackage.NpmPackageFolder;
|
import org.hl7.fhir.utilities.cache.NpmPackage.NpmPackageFolder;
|
||||||
import org.hl7.fhir.utilities.json.JSONUtil;
|
import org.hl7.fhir.utilities.json.JSONUtil;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -283,7 +284,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the identified package from the cache - it it exists
|
* Load the identified package from the cache - if it exists
|
||||||
* <p>
|
* <p>
|
||||||
* This is for special purpose only (testing, control over speed of loading).
|
* This is for special purpose only (testing, control over speed of loading).
|
||||||
* Generally, use the loadPackage method
|
* Generally, use the loadPackage method
|
||||||
|
@ -307,10 +308,22 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
String foundPackage = null;
|
||||||
|
String foundVersion = null;
|
||||||
for (String f : sorted(new File(cacheFolder).list())) {
|
for (String f : sorted(new File(cacheFolder).list())) {
|
||||||
if (f.equals(id + "#" + version) || (Utilities.noString(version) && f.startsWith(id + "#"))) {
|
if (f.equals(id + "#" + version) || (Utilities.noString(version) && f.startsWith(id + "#"))) {
|
||||||
return loadPackageInfo(Utilities.path(cacheFolder, f));
|
return loadPackageInfo(Utilities.path(cacheFolder, f));
|
||||||
}
|
}
|
||||||
|
if (version!=null && version.endsWith(".x") && f.contains("#")) {
|
||||||
|
String[] parts = f.split("#");
|
||||||
|
if (parts[0].equals(id) && VersionUtilities.isMajMinOrLaterPatch((foundVersion!=null ? foundVersion : version),parts[1])) {
|
||||||
|
foundVersion = parts[1];
|
||||||
|
foundPackage = f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (foundPackage!=null) {
|
||||||
|
return loadPackageInfo(Utilities.path(cacheFolder, foundPackage));
|
||||||
}
|
}
|
||||||
if ("dev".equals(version))
|
if ("dev".equals(version))
|
||||||
return loadPackageFromCacheOnly(id, "current");
|
return loadPackageFromCacheOnly(id, "current");
|
||||||
|
|
|
@ -208,5 +208,19 @@ public class PackageClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLatestVersion(String id, String majMinVersion) throws IOException {
|
||||||
|
List<PackageInfo> list = getVersions(id);
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
throw new IOException("Package not found: "+id);
|
||||||
|
} else {
|
||||||
|
String v = majMinVersion;
|
||||||
|
for (PackageInfo p : list) {
|
||||||
|
if (VersionUtilities.isMajMinOrLaterPatch(v, p.version)) {
|
||||||
|
v = p.version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -762,6 +762,18 @@ public class ValidationEngine implements IValidatorResourceFetcher, IPackageInst
|
||||||
context.getLoadedPackages().add(pi.name()+"#"+pi.version());
|
context.getLoadedPackages().add(pi.name()+"#"+pi.version());
|
||||||
Map<String, byte[]> res = new HashMap<String, byte[]>();
|
Map<String, byte[]> res = new HashMap<String, byte[]>();
|
||||||
for (String s : pi.dependencies()) {
|
for (String s : pi.dependencies()) {
|
||||||
|
if (s.endsWith(".x") && s.length()>2) {
|
||||||
|
String packageMajorMinor = s.substring(0, s.length()-2);
|
||||||
|
boolean found = false;
|
||||||
|
for (int i=0; i<context.getLoadedPackages().size() && !found; ++i) {
|
||||||
|
String loadedPackage = context.getLoadedPackages().get(i);
|
||||||
|
if (loadedPackage.startsWith(packageMajorMinor)) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
continue ;
|
||||||
|
}
|
||||||
if (! context.getLoadedPackages().contains(s)) {
|
if (! context.getLoadedPackages().contains(s)) {
|
||||||
if (!VersionUtilities.isCorePackage(s)) {
|
if (!VersionUtilities.isCorePackage(s)) {
|
||||||
System.out.println("+ .. load IG from "+s);
|
System.out.println("+ .. load IG from "+s);
|
||||||
|
|
Loading…
Reference in New Issue