mirror of
https://github.com/hapifhir/hapi-fhir.git
synced 2025-02-16 09:55:09 +00:00
Work on term svc
This commit is contained in:
parent
c94f4bb19b
commit
abd8bc2f14
@ -112,6 +112,9 @@ public abstract class RequestDetails {
|
||||
}
|
||||
|
||||
public Map<String, String[]> getParameters() {
|
||||
if (myParameters == null) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return myParameters;
|
||||
}
|
||||
|
||||
|
@ -77,6 +77,9 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
|
||||
setRangeFromDatesInclusive(theDateParam.getValueAsString(), theDateParam.getValueAsString());
|
||||
} else {
|
||||
switch (theDateParam.getPrefix()) {
|
||||
case EQUAL:
|
||||
setRangeFromDatesInclusive(theDateParam.getValueAsString(), theDateParam.getValueAsString());
|
||||
break;
|
||||
case STARTS_AFTER:
|
||||
case GREATERTHAN:
|
||||
case GREATERTHAN_OR_EQUALS:
|
||||
|
@ -27,6 +27,7 @@ import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
@ -249,7 +250,8 @@ private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger
|
||||
|
||||
private void streamResponse(RequestDetails theRequestDetails, HttpServletResponse theServletResponse, IBaseResource resource) {
|
||||
IParser p;
|
||||
if (theRequestDetails.getParameters().containsKey(Constants.PARAM_FORMAT)) {
|
||||
Map<String, String[]> parameters = theRequestDetails.getParameters();
|
||||
if (parameters.containsKey(Constants.PARAM_FORMAT)) {
|
||||
p = RestfulServerUtils.getNewParser(theRequestDetails.getServer().getFhirContext(), theRequestDetails);
|
||||
} else {
|
||||
EncodingEnum defaultResponseEncoding = theRequestDetails.getServer().getDefaultResponseEncoding();
|
||||
@ -263,11 +265,11 @@ private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger
|
||||
theServletResponse.setContentType(Constants.CT_HTML_WITH_UTF8);
|
||||
|
||||
StringBuilder rawB = new StringBuilder();
|
||||
for (String next : theRequestDetails.getParameters().keySet()) {
|
||||
for (String next : parameters.keySet()) {
|
||||
if (next.equals(PARAM_RAW)) {
|
||||
continue;
|
||||
}
|
||||
for (String nextValue : theRequestDetails.getParameters().get(next)) {
|
||||
for (String nextValue : parameters.get(next)) {
|
||||
if (isBlank(nextValue)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import java.util.Collection;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.ForeignKey;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
@ -56,7 +57,7 @@ public class TermCodeSystemVersion implements Serializable {
|
||||
private Long myPid;
|
||||
|
||||
@OneToOne()
|
||||
@JoinColumn(name = "RES_ID", referencedColumnName = "RES_ID", nullable = false, updatable = false)
|
||||
@JoinColumn(name = "RES_ID", referencedColumnName = "RES_ID", nullable = false, updatable = false, foreignKey=@ForeignKey(name="FK_CODESYSVER_RES_ID"))
|
||||
private ResourceTable myResource;
|
||||
|
||||
@Column(name = "RES_VERSION_ID", nullable = false, updatable = false)
|
||||
|
@ -190,6 +190,16 @@ public class BaseJpaTest {
|
||||
@Override
|
||||
public Void doInTransaction(TransactionStatus theStatus) {
|
||||
entityManager.createQuery("DELETE from " + TermConcept.class.getSimpleName() + " d").executeUpdate();
|
||||
for (TermCodeSystem next : entityManager.createQuery("SELECT c FROM " + TermCodeSystem.class.getName() + " c", TermCodeSystem.class).getResultList()) {
|
||||
next.setCurrentVersion(null);
|
||||
entityManager.merge(next);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
txTemplate.execute(new TransactionCallback<Void>() {
|
||||
@Override
|
||||
public Void doInTransaction(TransactionStatus theStatus) {
|
||||
entityManager.createQuery("DELETE from " + TermCodeSystemVersion.class.getSimpleName() + " d").executeUpdate();
|
||||
entityManager.createQuery("DELETE from " + TermCodeSystem.class.getSimpleName() + " d").executeUpdate();
|
||||
return null;
|
||||
|
@ -116,6 +116,22 @@ public class FhirResourceDaoDstu3SearchNoFtTest extends BaseJpaDstu3Test {
|
||||
map.add(Subscription.SP_STATUS, new TokenParam(null, SubscriptionStatus.ACTIVE.toCode()));
|
||||
assertThat(toUnqualifiedVersionlessIds(mySubscriptionDao.search(map)), contains(id));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDatePeriod() {
|
||||
Encounter enc = new Encounter();
|
||||
enc.getPeriod().setStartElement(new DateTimeType("2016-05-10")).setEndElement(new DateTimeType("2016-05-20"));
|
||||
String id = myEncounterDao.create(enc, mySrd).getId().toUnqualifiedVersionless().getValue();
|
||||
|
||||
List<String> ids;
|
||||
|
||||
ids = toUnqualifiedVersionlessIdValues(myEncounterDao.search(Encounter.SP_DATE, new DateParam("2016-05-15")));
|
||||
assertThat(ids, contains(id));
|
||||
|
||||
ids = toUnqualifiedVersionlessIdValues(myEncounterDao.search(Encounter.SP_DATE, new DateParam("eq2016-05-15")));
|
||||
assertThat(ids, contains(id));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
|
@ -20,6 +20,7 @@ import ca.uhn.fhir.jpa.entity.ResourceTable;
|
||||
import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
|
||||
import ca.uhn.fhir.jpa.entity.TermConcept;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
|
||||
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
||||
import ca.uhn.fhir.util.TestUtil;
|
||||
|
||||
@ -202,7 +203,7 @@ public class TerminologySvcImplTest extends BaseJpaDstu3Test {
|
||||
try {
|
||||
myTermSvc.storeNewCodeSystemVersion(table.getId(), "http://example.com/my_code_system", cs);
|
||||
fail();
|
||||
} catch (InvalidRequestException e) {
|
||||
} catch (UnprocessableEntityException e) {
|
||||
assertThat(e.getMessage(), containsString("Can not create multiple code systems with URI \"http://example.com/my_code_system\", already have one with resource ID: CodeSystem/"));
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
|
||||
import ca.uhn.fhir.rest.server.interceptor.LoggingInterceptor;
|
||||
import ca.uhn.fhirtest.joke.HolyFooCowInterceptor;
|
||||
|
||||
@Configuration
|
||||
public class CommonConfig {
|
||||
@ -34,5 +35,15 @@ public class CommonConfig {
|
||||
retVal.setLogExceptions(false);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a joke
|
||||
*
|
||||
* https://chat.fhir.org/#narrow/stream/implementers/topic/Unsupported.20search.20parameters
|
||||
*/
|
||||
@Bean
|
||||
public IServerInterceptor holyFooCowInterceptor() {
|
||||
return new HolyFooCowInterceptor();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package ca.uhn.fhirtest.joke;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException;
|
||||
import ca.uhn.fhir.rest.server.interceptor.InterceptorAdapter;
|
||||
|
||||
public class HolyFooCowInterceptor extends InterceptorAdapter {
|
||||
|
||||
@Override
|
||||
public boolean incomingRequestPreProcessed(HttpServletRequest theRequest, HttpServletResponse theResponse) {
|
||||
if (isNotBlank(theRequest.getParameter("holyfoocow"))) {
|
||||
throw new UnclassifiedServerFailureException(418, "HTTP 418 IM A TEAPOT - Jenni, please do not hack with the server, it's very fragile today.");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -154,10 +154,12 @@ public class ResponseHighlightingInterceptorTest {
|
||||
|
||||
ServletRequestDetails reqDetails = new ServletRequestDetails();
|
||||
reqDetails.setRequestType(RequestTypeEnum.GET);
|
||||
reqDetails.setParameters(new HashMap<String, String[]>());
|
||||
reqDetails.setServer(new RestfulServer(ourCtx));
|
||||
reqDetails.setServletRequest(req);
|
||||
|
||||
// This can be null depending on the exception type
|
||||
// reqDetails.setParameters(null);
|
||||
|
||||
ResourceNotFoundException exception = new ResourceNotFoundException("Not found");
|
||||
exception.setOperationOutcome(new OperationOutcome().addIssue(new Issue().setDiagnostics("Hello")));
|
||||
|
||||
@ -168,6 +170,7 @@ public class ResponseHighlightingInterceptorTest {
|
||||
assertThat(output, containsString("<span class='hlTagName'>OperationOutcome</span>"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testHighlightNormalResponseForcePrettyPrint() throws Exception {
|
||||
ResponseHighlighterInterceptor ic = new ResponseHighlighterInterceptor();
|
||||
|
@ -489,6 +489,43 @@ public class GenericClientDstu3Test {
|
||||
assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidate() throws Exception {
|
||||
final IParser p = ourCtx.newXmlParser();
|
||||
|
||||
final OperationOutcome resp0 = new OperationOutcome();
|
||||
resp0.getText().setDivAsString("OK!");
|
||||
|
||||
ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
|
||||
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
|
||||
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
|
||||
when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
|
||||
@Override
|
||||
public Header[] answer(InvocationOnMock theInvocation) throws Throwable {
|
||||
return new Header[] { };
|
||||
}
|
||||
});
|
||||
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
|
||||
when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
|
||||
@Override
|
||||
public ReaderInputStream answer(InvocationOnMock theInvocation) throws Throwable {
|
||||
return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
|
||||
}
|
||||
});
|
||||
|
||||
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
|
||||
|
||||
Patient pt = new Patient();
|
||||
pt.setId("Patient/222");
|
||||
pt.getText().setDivAsString("A PATIENT");
|
||||
|
||||
MethodOutcome outcome = client.validate().resource(pt).execute();
|
||||
|
||||
assertNotNull(outcome.getOperationOutcome());
|
||||
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateWithPreferRepresentationServerReturnsResource() throws Exception {
|
||||
final IParser p = ourCtx.newXmlParser();
|
||||
|
@ -83,38 +83,6 @@ public class FhirInstanceValidatorDstu3Test {
|
||||
myValidConcepts.add(theSystem + "___" + theCode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateCarePlan() {
|
||||
//@formatter:off
|
||||
String input = "{\n" +
|
||||
" \"resourceType\": \"Basic\",\n" +
|
||||
" \"meta\": {\n" +
|
||||
" \"profile\": [\n" +
|
||||
" \"http://localhost:8080/baseDstu3/StructureDefinition/testBasic\"\n" +
|
||||
" ]\n" +
|
||||
" },\n" +
|
||||
" \"code\": {\n" +
|
||||
" \"coding\": [\n" +
|
||||
" {\n" +
|
||||
" \"system\": \"http://hl7.org/fhir/basic-resource-type\",\n" +
|
||||
" \"code\": \"consent\",\n" +
|
||||
" \"display\": \"Consent\"\n" +
|
||||
" }\n" +
|
||||
" ],\n" +
|
||||
" \"text\": \"Consent\"\n" +
|
||||
" },\n" +
|
||||
" \"subject\": {\n" +
|
||||
" \"reference\": \"Patient/2676\",\n" +
|
||||
" \"display\": \"Lucy Turner\"\n" +
|
||||
" }\n" +
|
||||
"}";
|
||||
//@formatter:on
|
||||
|
||||
ValidationResult output = myVal.validateWithResult(input);
|
||||
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
||||
assertThat(errors, empty());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Ignore
|
||||
|
Loading…
x
Reference in New Issue
Block a user