Allow Fulltext search Svc to be null

This commit is contained in:
James Agnew 2017-10-17 16:43:03 -04:00
parent 4fb588d7a6
commit 90ecaef87c
5 changed files with 150 additions and 138 deletions

View File

@ -24,6 +24,7 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
import java.util.*; import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import ca.uhn.fhir.jpa.provider.dstu3.JpaSystemProviderDstu3;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
@ -47,7 +48,7 @@ public class JpaSystemProviderDstu2 extends BaseJpaSystemProviderDstu2Plus<Bundl
@Qualifier("mySystemDaoDstu2") @Qualifier("mySystemDaoDstu2")
private IFhirSystemDao<Bundle, MetaDt> mySystemDao; private IFhirSystemDao<Bundle, MetaDt> mySystemDao;
@Autowired @Autowired(required = false)
private IFulltextSearchSvc mySearchDao; private IFulltextSearchSvc mySearchDao;
//@formatter:off //@formatter:off
@ -178,7 +179,8 @@ public class JpaSystemProviderDstu2 extends BaseJpaSystemProviderDstu2Plus<Bundl
@OperationParam(name="searchParam", min=1, max=1) String theSearchParam, @OperationParam(name="searchParam", min=1, max=1) String theSearchParam,
@OperationParam(name="text", min=1, max=1) String theText @OperationParam(name="text", min=1, max=1) String theText
) { ) {
JpaSystemProviderDstu3.validateFulltextSearchEnabled(mySearchDao);
if (isBlank(theContext)) { if (isBlank(theContext)) {
throw new InvalidRequestException("Parameter 'context' must be provided"); throw new InvalidRequestException("Parameter 'context' must be provided");
} }
@ -188,16 +190,14 @@ public class JpaSystemProviderDstu2 extends BaseJpaSystemProviderDstu2Plus<Bundl
if (isBlank(theText)) { if (isBlank(theText)) {
throw new InvalidRequestException("Parameter 'text' must be provided"); throw new InvalidRequestException("Parameter 'text' must be provided");
} }
List<Suggestion> keywords = mySearchDao.suggestKeywords(theContext, theSearchParam, theText); List<Suggestion> keywords = mySearchDao.suggestKeywords(theContext, theSearchParam, theText);
Parameters retVal = new Parameters(); Parameters retVal = new Parameters();
for (Suggestion next : keywords) { for (Suggestion next : keywords) {
//@formatter:off
retVal.addParameter() retVal.addParameter()
.addPart(new Parameter().setName("keyword").setValue(new StringDt(next.getTerm()))) .addPart(new Parameter().setName("keyword").setValue(new StringDt(next.getTerm())))
.addPart(new Parameter().setName("score").setValue(new DecimalDt(next.getScore()))); .addPart(new Parameter().setName("score").setValue(new DecimalDt(next.getScore())));
//@formatter:on
} }
return retVal; return retVal;

View File

@ -1,5 +1,27 @@
package ca.uhn.fhir.jpa.provider.dstu3; package ca.uhn.fhir.jpa.provider.dstu3;
import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl.Suggestion;
import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
import ca.uhn.fhir.jpa.provider.BaseJpaSystemProviderDstu2Plus;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.annotation.Transaction;
import ca.uhn.fhir.rest.annotation.TransactionParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import org.hl7.fhir.dstu3.model.*;
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.isBlank;
/* /*
@ -11,9 +33,9 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -21,23 +43,6 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
* limitations under the License. * limitations under the License.
* #L% * #L%
*/ */
import java.util.*;
import java.util.Map.Entry;
import org.hl7.fhir.dstu3.model.*;
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl.Suggestion;
import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
import ca.uhn.fhir.jpa.provider.BaseJpaSystemProviderDstu2Plus;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.rest.annotation.*;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundle, Meta> { public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundle, Meta> {
@ -45,122 +50,122 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
@Qualifier("mySystemDaoDstu3") @Qualifier("mySystemDaoDstu3")
private IFhirSystemDao<Bundle, Meta> mySystemDao; private IFhirSystemDao<Bundle, Meta> mySystemDao;
@Autowired @Autowired(required = false)
private IFulltextSearchSvc mySearchDao; private IFulltextSearchSvc mySearchDao;
//@formatter:off //@formatter:off
// This is generated by hand: // This is generated by hand:
// ls hapi-fhir-structures-dstu2/target/generated-sources/tinder/ca/uhn/fhir/model/dstu2/resource/ | sort | sed "s/.java//" | sed "s/^/@OperationParam(name=\"/" | sed "s/$/\", type=IntegerType.class, min=0, max=1),/" // ls hapi-fhir-structures-dstu2/target/generated-sources/tinder/ca/uhn/fhir/model/dstu2/resource/ | sort | sed "s/.java//" | sed "s/^/@OperationParam(name=\"/" | sed "s/$/\", type=IntegerType.class, min=0, max=1),/"
@Operation(name="$get-resource-counts", idempotent=true, returnParameters= { @Operation(name = "$get-resource-counts", idempotent = true, returnParameters = {
@OperationParam(name="AllergyIntolerance", type=IntegerType.class, min=0, max=1), @OperationParam(name = "AllergyIntolerance", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Appointment", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Appointment", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="AppointmentResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "AppointmentResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="AuditEvent", type=IntegerType.class, min=0, max=1), @OperationParam(name = "AuditEvent", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Basic", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Basic", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Binary", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Binary", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="BodySite", type=IntegerType.class, min=0, max=1), @OperationParam(name = "BodySite", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Bundle", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Bundle", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="CarePlan", type=IntegerType.class, min=0, max=1), @OperationParam(name = "CarePlan", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="CarePlan2", type=IntegerType.class, min=0, max=1), @OperationParam(name = "CarePlan2", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Claim", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Claim", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ClaimResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ClaimResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ClinicalImpression", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ClinicalImpression", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Communication", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Communication", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="CommunicationRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "CommunicationRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Composition", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Composition", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ConceptMap", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ConceptMap", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Condition", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Condition", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Conformance", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Conformance", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Contract", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Contract", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Contraindication", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Contraindication", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Coverage", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Coverage", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DataElement", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DataElement", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Device", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Device", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DeviceComponent", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DeviceComponent", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DeviceMetric", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DeviceMetric", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DeviceUseRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DeviceUseRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DeviceUseStatement", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DeviceUseStatement", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DiagnosticOrder", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DiagnosticOrder", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DiagnosticReport", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DiagnosticReport", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DocumentManifest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DocumentManifest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="DocumentReference", type=IntegerType.class, min=0, max=1), @OperationParam(name = "DocumentReference", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="EligibilityRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "EligibilityRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="EligibilityResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "EligibilityResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Encounter", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Encounter", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="EnrollmentRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "EnrollmentRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="EnrollmentResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "EnrollmentResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="EpisodeOfCare", type=IntegerType.class, min=0, max=1), @OperationParam(name = "EpisodeOfCare", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ExplanationOfBenefit", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ExplanationOfBenefit", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="FamilyMemberHistory", type=IntegerType.class, min=0, max=1), @OperationParam(name = "FamilyMemberHistory", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Flag", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Flag", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Goal", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Goal", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Group", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Group", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="HealthcareService", type=IntegerType.class, min=0, max=1), @OperationParam(name = "HealthcareService", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ImagingObjectSelection", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ImagingObjectSelection", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ImagingStudy", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ImagingStudy", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Immunization", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Immunization", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ImmunizationRecommendation", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ImmunizationRecommendation", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ListResource", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ListResource", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Location", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Location", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Media", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Media", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Medication", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Medication", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="MedicationAdministration", type=IntegerType.class, min=0, max=1), @OperationParam(name = "MedicationAdministration", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="MedicationDispense", type=IntegerType.class, min=0, max=1), @OperationParam(name = "MedicationDispense", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="MedicationPrescription", type=IntegerType.class, min=0, max=1), @OperationParam(name = "MedicationPrescription", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="MedicationStatement", type=IntegerType.class, min=0, max=1), @OperationParam(name = "MedicationStatement", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="MessageHeader", type=IntegerType.class, min=0, max=1), @OperationParam(name = "MessageHeader", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="NamingSystem", type=IntegerType.class, min=0, max=1), @OperationParam(name = "NamingSystem", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="NutritionOrder", type=IntegerType.class, min=0, max=1), @OperationParam(name = "NutritionOrder", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Observation", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Observation", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="OperationDefinition", type=IntegerType.class, min=0, max=1), @OperationParam(name = "OperationDefinition", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="OperationOutcome", type=IntegerType.class, min=0, max=1), @OperationParam(name = "OperationOutcome", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Order", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Order", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="OrderResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "OrderResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Organization", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Organization", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Parameters", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Parameters", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Patient", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Patient", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="PaymentNotice", type=IntegerType.class, min=0, max=1), @OperationParam(name = "PaymentNotice", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="PaymentReconciliation", type=IntegerType.class, min=0, max=1), @OperationParam(name = "PaymentReconciliation", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Person", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Person", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Practitioner", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Practitioner", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Procedure", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Procedure", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ProcedureRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ProcedureRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ProcessRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ProcessRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ProcessResponse", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ProcessResponse", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Provenance", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Provenance", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Questionnaire", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Questionnaire", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="QuestionnaireAnswers", type=IntegerType.class, min=0, max=1), @OperationParam(name = "QuestionnaireAnswers", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ReferralRequest", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ReferralRequest", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="RelatedPerson", type=IntegerType.class, min=0, max=1), @OperationParam(name = "RelatedPerson", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="RiskAssessment", type=IntegerType.class, min=0, max=1), @OperationParam(name = "RiskAssessment", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Schedule", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Schedule", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="SearchParameter", type=IntegerType.class, min=0, max=1), @OperationParam(name = "SearchParameter", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Slot", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Slot", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Specimen", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Specimen", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="StructureDefinition", type=IntegerType.class, min=0, max=1), @OperationParam(name = "StructureDefinition", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Subscription", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Subscription", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Substance", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Substance", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="Supply", type=IntegerType.class, min=0, max=1), @OperationParam(name = "Supply", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="ValueSet", type=IntegerType.class, min=0, max=1), @OperationParam(name = "ValueSet", type = IntegerType.class, min = 0, max = 1),
@OperationParam(name="VisionPrescription", type=IntegerType.class, min=0, max=1) @OperationParam(name = "VisionPrescription", type = IntegerType.class, min = 0, max = 1)
}) })
@Description(shortDefinition="Provides the number of resources currently stored on the server, broken down by resource type") @Description(shortDefinition = "Provides the number of resources currently stored on the server, broken down by resource type")
//@formatter:on //@formatter:on
public Parameters getResourceCounts() { public Parameters getResourceCounts() {
Parameters retVal = new Parameters(); Parameters retVal = new Parameters();
Map<String, Long> counts = mySystemDao.getResourceCounts(); Map<String, Long> counts = mySystemDao.getResourceCounts();
counts = new TreeMap<String, Long>(counts); counts = new TreeMap<String, Long>(counts);
for (Entry<String, Long> nextEntry : counts.entrySet()) { for (Entry<String, Long> nextEntry : counts.entrySet()) {
retVal.addParameter().setName((nextEntry.getKey())).setValue(new IntegerType(nextEntry.getValue().intValue())); retVal.addParameter().setName((nextEntry.getKey())).setValue(new IntegerType(nextEntry.getValue().intValue()));
} }
return retVal; return retVal;
} }
//@formatter:off //@formatter:off
@Operation(name="$meta", idempotent=true, returnParameters= { @Operation(name = "$meta", idempotent = true, returnParameters = {
@OperationParam(name="return", type=Meta.class) @OperationParam(name = "return", type = Meta.class)
}) })
//@formatter:on //@formatter:on
public Parameters meta(RequestDetails theRequestDetails) { public Parameters meta(RequestDetails theRequestDetails) {
@ -168,14 +173,15 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
parameters.addParameter().setName("return").setValue(getDao().metaGetOperation(theRequestDetails)); parameters.addParameter().setName("return").setValue(getDao().metaGetOperation(theRequestDetails));
return parameters; return parameters;
} }
@Operation(name="$suggest-keywords", idempotent=true) @Operation(name = "$suggest-keywords", idempotent = true)
public Parameters suggestKeywords( public Parameters suggestKeywords(
@OperationParam(name="context", min=1, max=1) String theContext, @OperationParam(name = "context", min = 1, max = 1) String theContext,
@OperationParam(name="searchParam", min=1, max=1) String theSearchParam, @OperationParam(name = "searchParam", min = 1, max = 1) String theSearchParam,
@OperationParam(name="text", min=1, max=1) String theText @OperationParam(name = "text", min = 1, max = 1) String theText
) { ) {
JpaSystemProviderDstu3.validateFulltextSearchEnabled(mySearchDao);
if (isBlank(theContext)) { if (isBlank(theContext)) {
throw new InvalidRequestException("Parameter 'context' must be provided"); throw new InvalidRequestException("Parameter 'context' must be provided");
} }
@ -185,21 +191,21 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
if (isBlank(theText)) { if (isBlank(theText)) {
throw new InvalidRequestException("Parameter 'text' must be provided"); throw new InvalidRequestException("Parameter 'text' must be provided");
} }
List<Suggestion> keywords = mySearchDao.suggestKeywords(theContext, theSearchParam, theText); List<Suggestion> keywords = mySearchDao.suggestKeywords(theContext, theSearchParam, theText);
Parameters retVal = new Parameters(); Parameters retVal = new Parameters();
for (Suggestion next : keywords) { for (Suggestion next : keywords) {
//@formatter:off //@formatter:off
retVal.addParameter() retVal.addParameter()
.addPart(new ParametersParameterComponent().setName("keyword").setValue(new StringType(next.getTerm()))) .addPart(new ParametersParameterComponent().setName("keyword").setValue(new StringType(next.getTerm())))
.addPart(new ParametersParameterComponent().setName("score").setValue(new DecimalType(next.getScore()))); .addPart(new ParametersParameterComponent().setName("score").setValue(new DecimalType(next.getScore())));
//@formatter:on //@formatter:on
} }
return retVal; return retVal;
} }
@Transaction @Transaction
public Bundle transaction(RequestDetails theRequestDetails, @TransactionParam Bundle theResources) { public Bundle transaction(RequestDetails theRequestDetails, @TransactionParam Bundle theResources) {
startRequest(((ServletRequestDetails) theRequestDetails).getServletRequest()); startRequest(((ServletRequestDetails) theRequestDetails).getServletRequest());
@ -210,4 +216,10 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
} }
} }
public static void validateFulltextSearchEnabled(IFulltextSearchSvc theSearchDao) {
if (theSearchDao == null || theSearchDao.isDisabled()) {
throw new InvalidRequestException("Fulltext searching is disabled on this server");
}
}
} }

View File

@ -120,7 +120,7 @@ public abstract class BaseJpaDstu2Test extends BaseJpaTest {
protected Object myResourceProviders; protected Object myResourceProviders;
@Autowired @Autowired
protected ISearchCoordinatorSvc mySearchCoordinatorSvc; protected ISearchCoordinatorSvc mySearchCoordinatorSvc;
@Autowired @Autowired(required = false)
protected IFulltextSearchSvc mySearchDao; protected IFulltextSearchSvc mySearchDao;
@Autowired @Autowired
protected ISearchParamPresenceSvc mySearchParamPresenceSvc; protected ISearchParamPresenceSvc mySearchParamPresenceSvc;

View File

@ -172,7 +172,7 @@ public abstract class BaseJpaDstu3Test extends BaseJpaTest {
protected IResourceTagDao myResourceTagDao; protected IResourceTagDao myResourceTagDao;
@Autowired @Autowired
protected ISearchCoordinatorSvc mySearchCoordinatorSvc; protected ISearchCoordinatorSvc mySearchCoordinatorSvc;
@Autowired @Autowired(required = false)
protected IFulltextSearchSvc mySearchDao; protected IFulltextSearchSvc mySearchDao;
@Autowired @Autowired
protected ISearchDao mySearchEntityDao; protected ISearchDao mySearchEntityDao;

View File

@ -181,7 +181,7 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
protected IResourceTagDao myResourceTagDao; protected IResourceTagDao myResourceTagDao;
@Autowired @Autowired
protected ISearchCoordinatorSvc mySearchCoordinatorSvc; protected ISearchCoordinatorSvc mySearchCoordinatorSvc;
@Autowired @Autowired(required = false)
protected IFulltextSearchSvc mySearchDao; protected IFulltextSearchSvc mySearchDao;
@Autowired @Autowired
protected ISearchDao mySearchEntityDao; protected ISearchDao mySearchEntityDao;