Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -169,19 +169,19 @@ private Consumer<ValidationPackageEntry> doParseResources(FhirContext context, L
resourceString = resourceString.replaceAll("<h2>[\\s\\w\\[\\]]*</tt>", "");
IBaseResource resource = context.newJsonParser().parseResource(resourceString);

if (resource instanceof CodeSystem)
codeSystems.add((CodeSystem) resource);
else if (resource instanceof NamingSystem)
namingSystems.add((NamingSystem) resource);
else if (resource instanceof StructureDefinition)
if (resource instanceof CodeSystem c)
codeSystems.add(c);
else if (resource instanceof NamingSystem n)
namingSystems.add(n);
else if (resource instanceof StructureDefinition s)
{
if (!StructureDefinitionKind.LOGICAL.equals(((StructureDefinition) resource).getKind()))
structureDefinitions.add((StructureDefinition) resource);
if (!StructureDefinitionKind.LOGICAL.equals(s.getKind()))
structureDefinitions.add(s);
else
logger.debug("Ignoring StructureDefinition with kind = logical");
}
else if (resource instanceof ValueSet)
valueSets.add((ValueSet) resource);
else if (resource instanceof ValueSet v)
valueSets.add(v);
else
logger.debug("Ignoring resource of type {}", resource.getClass().getName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ public ValidationPackage download(ValidationPackageIdentifier identifier)
{
Objects.requireNonNull(identifier, "identifier");

try (InputStream in = getResource().path(identifier.getName()).path(identifier.getVersion())
try (InputStream in = getResource().path(identifier.name()).path(identifier.version())
.request("application/tar+gzip").get(InputStream.class))
{
return ValidationPackage.from(identifier.getName(), identifier.getVersion(), in);
return ValidationPackage.from(identifier.name(), identifier.version(), in);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package dev.dsf.fhir.validator.implementation_guide;

import java.util.Objects;

public class ValidationPackageIdentifier
public record ValidationPackageIdentifier(String name, String version)
{
public static ValidationPackageIdentifier fromString(String nameAndVersion)
{
Expand All @@ -14,65 +12,9 @@ public static ValidationPackageIdentifier fromString(String nameAndVersion)
return new ValidationPackageIdentifier(split[0], split[1]);
}

private final String name;
private final String version;

public ValidationPackageIdentifier(String name, String version)
{
this.name = Objects.requireNonNull(name, "name");
this.version = Objects.requireNonNull(version, "version");
}

public String getName()
{
return name;
}

public String getVersion()
{
return version;
}

@Override
public String toString()
{
return name + "|" + version;
}

@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((version == null) ? 0 : version.hashCode());
return result;
}

@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ValidationPackageIdentifier other = (ValidationPackageIdentifier) obj;
if (name == null)
{
if (other.name != null)
return false;
}
else if (!name.equals(other.name))
return false;
if (version == null)
{
if (other.version != null)
return false;
}
else if (!version.equals(other.version))
return false;
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -72,6 +74,11 @@ public List<ValidationPackageWithDepedencies> downloadPackagesWithDependencies(
packages.add(ValidationPackageWithDepedencies.from(packagesByNameAndVersion, identifier));
}

logger.info("Using packages {} for validation",
packages.stream().flatMap(p -> Stream.concat(Stream.of(p), p.getDependencies().stream()))
.map(ValidationPackage::getIdentifier).map(ValidationPackageIdentifier::toString).sorted()
.collect(Collectors.joining(", ", "[", "]")));

return packages;
}

Expand Down Expand Up @@ -102,6 +109,20 @@ else if (noDownloadPackages.contains(identifier))
}

ValidationPackage vPackage = downloadAndHandleException(identifier);
identifier = vPackage.getIdentifier();

// check again, as the identifier may have changed from a A.B.x wildcard
if (allPackagesByNameAndVersion.containsKey(identifier))
{
// already downloaded
return;
}
else if (noDownloadPackages.contains(identifier))
{
logger.debug("Not using package {}", identifier.toString());
return;
}

packagesByNameAndVersion.put(identifier, vPackage);
allPackagesByNameAndVersion.put(identifier, vPackage);

Expand All @@ -112,15 +133,15 @@ else if (noDownloadPackages.contains(identifier))

private ValidationPackage downloadAndHandleException(ValidationPackageIdentifier identifier)
{
if (identifier.getVersion().matches("\\d+\\.\\d+\\.x"))
if (identifier.version().matches("\\d+\\.\\d+\\.x"))
{
String versoinPrefix = identifier.getVersion().substring(0, identifier.getVersion().length() - 1);
String versoinPrefix = identifier.version().substring(0, identifier.version().length() - 1);

PackageVersions versions = validationPackageClient.list(identifier.getName());
PackageVersions versions = validationPackageClient.list(identifier.name());
Optional<String> latest = versions.getLatest(versoinPrefix);

if (latest.isPresent())
identifier = new ValidationPackageIdentifier(identifier.getName(), latest.get());
identifier = new ValidationPackageIdentifier(identifier.name(), latest.get());
}

try
Expand Down