diff --git a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java index 8a1a1bf0..9f7437a0 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitor.java @@ -1,5 +1,6 @@ package gov.cms.madie.madiefhirservice.cql; +import gov.cms.madie.madiefhirservice.utils.FhirResourceHelpers; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.antlr.v4.runtime.ParserRuleContext; @@ -35,14 +36,9 @@ public class LibraryCqlVisitor extends cqlBaseVisitor { private final Map libraryCacheMap = new HashMap<>(); private final Map valueSetNameUri = new HashMap<>(); private final List> includedLibraries = new ArrayList<>(); - private String fhirBaseUrl; private String name; private String version; - public LibraryCqlVisitor(String fhirBaseUrl) { - this.fhirBaseUrl = fhirBaseUrl; - } - /** * Stores off lib name and version. * @@ -70,7 +66,11 @@ public String visitIncludeDefinition(cqlParser.IncludeDefinitionContext ctx) { RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); var nameVersion = getNameVersionFromInclude(ctx); - relatedArtifact.setUrl(fhirBaseUrl + "/Library/" + nameVersion.getLeft()); + String url = + FhirResourceHelpers.buildResourceFullUrl("Library", nameVersion.getLeft()) + + "|" + + nameVersion.getRight(); + relatedArtifact.setResource(url); relatedArtifacts.add(relatedArtifact); includedLibraries.add(nameVersion); includes.add(ctx); @@ -94,7 +94,7 @@ public String visitValuesetDefinition(cqlParser.ValuesetDefinitionContext ctx) { .add(new ValuesetModel(vsName, uri, null, null)); RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); - relatedArtifact.setUrl(uri); + relatedArtifact.setResource(uri); relatedArtifacts.add(relatedArtifact); // need to be polished once we human readable file @@ -108,7 +108,7 @@ public String visitCodesystemDefinition(cqlParser.CodesystemDefinitionContext ct codeSystems.add(ctx); RelatedArtifact relatedArtifact = new RelatedArtifact(); relatedArtifact.setType(RelatedArtifact.RelatedArtifactType.DEPENDSON); - relatedArtifact.setUrl( + relatedArtifact.setResource( getUnquotedFullText(ctx.codesystemId()) + (ctx.versionSpecifier() != null ? "|" + getUnquotedFullText(ctx.versionSpecifier()) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java index 943722de..655c5e71 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/cql/LibraryCqlVisitorFactory.java @@ -4,7 +4,6 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.cqframework.cql.gen.cqlLexer; import org.cqframework.cql.gen.cqlParser; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; @@ -13,11 +12,8 @@ @Service public class LibraryCqlVisitorFactory { - @Value("${fhir-base-url}") - private String fhirBaseUrl; - public LibraryCqlVisitor visit(String cql) { - LibraryCqlVisitor result = new LibraryCqlVisitor(fhirBaseUrl); + LibraryCqlVisitor result = new LibraryCqlVisitor(); cqlParser.LibraryContext ctx = getLibraryContext(cql); result.visit(ctx); return result; diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java index f72ecef8..6416a0b6 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/HumanReadableService.java @@ -197,14 +197,13 @@ private void sortParameters( if (madieMeasure.getGroups() != null) { madieMeasure.getGroups().stream() .forEach( - (g) -> - { - if (CollectionUtils.isNotEmpty(g.getStratifications())) { - strats.addAll( - g.getStratifications().stream() - .map(s -> s.getCqlDefinition()) - .collect(Collectors.toList())); - } + (g) -> { + if (CollectionUtils.isNotEmpty(g.getStratifications())) { + strats.addAll( + g.getStratifications().stream() + .map(s -> s.getCqlDefinition()) + .collect(Collectors.toList())); + } }); } diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java index f59b1fc4..92b58211 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/LibraryTranslatorService.java @@ -2,6 +2,7 @@ import gov.cms.madie.madiefhirservice.constants.UriConstants; import gov.cms.madie.madiefhirservice.cql.LibraryCqlVisitorFactory; +import gov.cms.madie.madiefhirservice.utils.FhirResourceHelpers; import gov.cms.madie.models.library.CqlLibrary; import gov.cms.madie.models.common.Version; import lombok.extern.slf4j.Slf4j; @@ -17,7 +18,6 @@ import org.hl7.fhir.r4.model.Meta; import org.hl7.fhir.r4.model.RelatedArtifact; import org.hl7.fhir.r4.model.Identifier.IdentifierUse; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -39,9 +39,6 @@ public class LibraryTranslatorService { private final LibraryCqlVisitorFactory libCqlVisitorFactory; - @Value("${fhir-base-url}") - private String fhirBaseUrl; - public LibraryTranslatorService(LibraryCqlVisitorFactory libCqlVisitorFactory) { this.libCqlVisitorFactory = libCqlVisitorFactory; } @@ -64,7 +61,8 @@ public Library convertToFhirLibrary(CqlLibrary cqlLibrary) { library.setContent( createContent(cqlLibrary.getCql(), cqlLibrary.getElmJson(), cqlLibrary.getElmXml())); library.setType(createType(UriConstants.LIBRARY_SYSTEM_TYPE_URI, SYSTEM_CODE)); - library.setUrl(fhirBaseUrl + "/Library/" + cqlLibrary.getCqlLibraryName()); + library.setUrl( + FhirResourceHelpers.buildResourceFullUrl("Library", cqlLibrary.getCqlLibraryName())); library.setDataRequirement(distinctDataRequirements(visitor.getDataRequirements())); library.setRelatedArtifact(distinctArtifacts(visitor.getRelatedArtifacts())); library.setMeta(createLibraryMeta()); @@ -148,7 +146,7 @@ private List distinctArtifacts(List artifacts) result.add(a); } }); - result.sort(Comparator.comparing(RelatedArtifact::getUrl)); + result.sort(Comparator.comparing(RelatedArtifact::getResource)); return result; } diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java index 34419336..c64f9e4a 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureBundleService.java @@ -19,7 +19,6 @@ import org.hl7.fhir.r4.model.Library; import org.hl7.fhir.r4.model.Narrative; import org.hl7.fhir.r4.model.Reference; -import org.hl7.fhir.r4.model.Resource; import org.springframework.stereotype.Service; import java.util.HashMap; @@ -50,7 +49,8 @@ public Bundle createMeasureBundle( measureTranslatorService.createFhirMeasureForMadieMeasure(madieMeasure); // Bundle entry for Measure resource - Bundle.BundleEntryComponent measureEntryComponent = getBundleEntryComponent(measure); + Bundle.BundleEntryComponent measureEntryComponent = + FhirResourceHelpers.getBundleEntryComponent(measure, "Transaction"); Bundle bundle = new Bundle().setType(Bundle.BundleType.TRANSACTION).addEntry(measureEntryComponent); // Bundle entries for all the library resources of a MADiE Measure @@ -90,31 +90,20 @@ public Bundle createMeasureBundle( public List createBundleComponentsForLibrariesOfMadieMeasure( Measure madieMeasure, final String bundleType, final String accessToken) { Library library = getMeasureLibraryResourceForMadieMeasure(madieMeasure); - Bundle.BundleEntryComponent mainLibraryBundleComponent = getBundleEntryComponent(library); + Bundle.BundleEntryComponent mainLibraryBundleComponent = + FhirResourceHelpers.getBundleEntryComponent(library, "Transaction"); Map includedLibraryMap = new HashMap<>(); libraryService.getIncludedLibraries( madieMeasure.getCql(), includedLibraryMap, bundleType, accessToken); List libraryBundleComponents = includedLibraryMap.values().stream() - .map(this::getBundleEntryComponent) + .map((lib) -> FhirResourceHelpers.getBundleEntryComponent(lib, "Transaction")) .collect(Collectors.toList()); // add main library first in the list libraryBundleComponents.add(0, mainLibraryBundleComponent); return libraryBundleComponents; } - /** Creates BundleEntryComponent for given resource */ - public Bundle.BundleEntryComponent getBundleEntryComponent(Resource resource) { - Bundle.BundleEntryRequestComponent requestComponent = - new Bundle.BundleEntryRequestComponent() - .setMethod(Bundle.HTTPVerb.PUT) - .setUrl(resource.getResourceType() + "/" + resource.getIdPart()); - return new Bundle.BundleEntryComponent() - .setFullUrl(FhirResourceHelpers.getFullUrl(resource)) - .setResource(resource) - .setRequest(requestComponent); - } - /** * Creates Library resource for main library of MADiE Measure * diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java index 33a29a15..6e45dfab 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/MeasureTranslatorService.java @@ -59,7 +59,8 @@ public org.hl7.fhir.r4.model.Measure createFhirMeasureForMadieMeasure(Measure ma .setTitle(madieMeasure.getMeasureName()) .setIdentifier(buildMeasureIdentifiers(madieMeasure)) .setExperimental(madieMeasure.getMeasureMetaData().isExperimental()) - .setUrl(FhirResourceHelpers.buildMeasureUrl(madieMeasure.getCqlLibraryName())) + .setUrl( + FhirResourceHelpers.buildResourceFullUrl("Measure", madieMeasure.getCqlLibraryName())) .setVersion(madieMeasure.getVersion().toString()) .setEffectivePeriod( getPeriodFromDates( @@ -76,7 +77,8 @@ public org.hl7.fhir.r4.model.Measure createFhirMeasureForMadieMeasure(Measure ma .setLibrary( Collections.singletonList( new CanonicalType( - FhirResourceHelpers.buildLibraryUrl(madieMeasure.getCqlLibraryName())))) + FhirResourceHelpers.buildResourceFullUrl( + "Library", madieMeasure.getCqlLibraryName())))) .setPurpose(UNKNOWN) .setContact(buildContactDetail(madieMeasure.getMeasureMetaData().getSteward(), false)) .setGroup(buildGroups(madieMeasure.getGroups())) diff --git a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java index 5a0a77d6..7611a1f8 100644 --- a/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java +++ b/src/main/java/gov/cms/madie/madiefhirservice/services/TestCaseBundleService.java @@ -73,9 +73,9 @@ public Map getTestCaseExportBundle(Measure measure, List