DSTU2.1 structures working
This commit is contained in:
parent
056900f324
commit
718a26671f
|
@ -8,6 +8,11 @@ import javax.servlet.ServletException;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.io.filefilter.WildcardFileFilter;
|
import org.apache.commons.io.filefilter.WildcardFileFilter;
|
||||||
|
import org.hl7.fhir.instance.hapi.validation.DefaultProfileValidationSupport;
|
||||||
|
import org.hl7.fhir.instance.hapi.validation.FhirInstanceValidator;
|
||||||
|
import org.hl7.fhir.instance.hapi.validation.IValidationSupport;
|
||||||
|
import org.hl7.fhir.instance.hapi.validation.IValidationSupport.CodeValidationResult;
|
||||||
|
import org.hl7.fhir.instance.hapi.validation.ValidationSupportChain;
|
||||||
import org.hl7.fhir.instance.model.ValueSet;
|
import org.hl7.fhir.instance.model.ValueSet;
|
||||||
import org.hl7.fhir.instance.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.instance.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.instance.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.instance.model.ValueSet.ValueSetExpansionComponent;
|
||||||
|
@ -23,11 +28,7 @@ import ca.uhn.fhir.parser.IParser;
|
||||||
import ca.uhn.fhir.parser.StrictErrorHandler;
|
import ca.uhn.fhir.parser.StrictErrorHandler;
|
||||||
import ca.uhn.fhir.rest.client.IGenericClient;
|
import ca.uhn.fhir.rest.client.IGenericClient;
|
||||||
import ca.uhn.fhir.rest.server.RestfulServer;
|
import ca.uhn.fhir.rest.server.RestfulServer;
|
||||||
import ca.uhn.fhir.validation.DefaultProfileValidationSupport;
|
|
||||||
import ca.uhn.fhir.validation.ValidationSupportChain;
|
|
||||||
import ca.uhn.fhir.validation.FhirInstanceValidator;
|
|
||||||
import ca.uhn.fhir.validation.FhirValidator;
|
import ca.uhn.fhir.validation.FhirValidator;
|
||||||
import ca.uhn.fhir.validation.IValidationSupport;
|
|
||||||
import ca.uhn.fhir.validation.SingleValidationMessage;
|
import ca.uhn.fhir.validation.SingleValidationMessage;
|
||||||
import ca.uhn.fhir.validation.ValidationResult;
|
import ca.uhn.fhir.validation.ValidationResult;
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ abstract class BaseAddOrDeleteTagsMethodBinding extends BaseMethodBinding<Void>
|
||||||
|
|
||||||
myResourceName = theConetxt.getResourceDefinition(myType).getName();
|
myResourceName = theConetxt.getResourceDefinition(myType).getName();
|
||||||
|
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
myVersionIdParamIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
myVersionIdParamIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
||||||
myTagListParamIndex = MethodUtil.findTagListParameterIndex(theMethod);
|
myTagListParamIndex = MethodUtil.findTagListParameterIndex(theMethod);
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ abstract class BaseOutcomeReturningMethodBindingWithResourceParam extends BaseOu
|
||||||
}
|
}
|
||||||
|
|
||||||
myResourceName = theContext.getResourceDefinition(myResourceType).getName();
|
myResourceName = theContext.getResourceDefinition(myResourceType).getName();
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
if (myIdParamIndex != null) {
|
if (myIdParamIndex != null) {
|
||||||
myIdParamType = (Class<? extends IIdType>) theMethod.getParameterTypes()[myIdParamIndex];
|
myIdParamType = (Class<? extends IIdType>) theMethod.getParameterTypes()[myIdParamIndex];
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ public class DeleteMethodBinding extends BaseOutcomeReturningMethodBinding {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
if (myIdParameterIndex == null) {
|
if (myIdParameterIndex == null) {
|
||||||
throw new ConfigurationException("Method '" + theMethod.getName() + "' on type '" + theMethod.getDeclaringClass().getCanonicalName() + "' has no parameter annotated with the @" + IdParam.class.getSimpleName() + " annotation");
|
throw new ConfigurationException("Method '" + theMethod.getName() + "' on type '" + theMethod.getDeclaringClass().getCanonicalName() + "' has no parameter annotated with the @" + IdParam.class.getSimpleName() + " annotation");
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class DynamicSearchMethodBinding extends BaseResourceReturningMethodBindi
|
||||||
myParamNames.add(next.getName());
|
myParamNames.add(next.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class GetTagsMethodBinding extends BaseMethodBinding<TagList> {
|
||||||
myResourceName = theConetxt.getResourceDefinition(myType).getName();
|
myResourceName = theConetxt.getResourceDefinition(myType).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
myVersionIdParamIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
myVersionIdParamIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
||||||
|
|
||||||
if (myIdParamIndex != null && myType.equals(IResource.class)) {
|
if (myIdParamIndex != null && myType.equals(IResource.class)) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
|
||||||
public HistoryMethodBinding(Method theMethod, FhirContext theConetxt, Object theProvider) {
|
public HistoryMethodBinding(Method theMethod, FhirContext theConetxt, Object theProvider) {
|
||||||
super(toReturnType(theMethod, theProvider), theMethod, theConetxt, theProvider);
|
super(toReturnType(theMethod, theProvider), theMethod, theConetxt, theProvider);
|
||||||
|
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
|
|
||||||
History historyAnnotation = theMethod.getAnnotation(History.class);
|
History historyAnnotation = theMethod.getAnnotation(History.class);
|
||||||
Class<? extends IBaseResource> type = historyAnnotation.type();
|
Class<? extends IBaseResource> type = historyAnnotation.type();
|
||||||
|
|
|
@ -322,8 +322,20 @@ public class MethodUtil {
|
||||||
return MethodUtil.findParamAnnotationIndex(theMethod, ConditionalUrlParam.class);
|
return MethodUtil.findParamAnnotationIndex(theMethod, ConditionalUrlParam.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Integer findIdParameterIndex(Method theMethod) {
|
public static Integer findIdParameterIndex(Method theMethod, FhirContext theContext) {
|
||||||
return MethodUtil.findParamAnnotationIndex(theMethod, IdParam.class);
|
Integer index = MethodUtil.findParamAnnotationIndex(theMethod, IdParam.class);
|
||||||
|
if (index != null) {
|
||||||
|
Class<?> paramType = theMethod.getParameterTypes()[index];
|
||||||
|
if (IIdType.class.equals(paramType)) {
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
boolean isRi = theContext.getVersion().getVersion().isRi();
|
||||||
|
boolean usesHapiId = IdDt.class.equals(paramType);
|
||||||
|
if (isRi == usesHapiId) {
|
||||||
|
throw new ConfigurationException("Method uses the wrong Id datatype (IdDt / IdType) for the given context FHIR version: " + theMethod.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Integer findParamAnnotationIndex(Method theMethod, Class<?> toFind) {
|
public static Integer findParamAnnotationIndex(Method theMethod, Class<?> toFind) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.hl7.fhir.instance.model.api.IBase;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseDatatype;
|
import org.hl7.fhir.instance.model.api.IBaseDatatype;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseParameters;
|
import org.hl7.fhir.instance.model.api.IBaseParameters;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.ConfigurationException;
|
import ca.uhn.fhir.context.ConfigurationException;
|
||||||
|
@ -42,7 +43,6 @@ import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
import ca.uhn.fhir.context.FhirVersionEnum;
|
||||||
import ca.uhn.fhir.model.api.Bundle;
|
import ca.uhn.fhir.model.api.Bundle;
|
||||||
import ca.uhn.fhir.model.api.annotation.Description;
|
import ca.uhn.fhir.model.api.annotation.Description;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.model.valueset.BundleTypeEnum;
|
import ca.uhn.fhir.model.valueset.BundleTypeEnum;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
|
@ -76,7 +76,7 @@ public class OperationMethodBinding extends BaseResourceReturningMethodBinding {
|
||||||
super(theReturnResourceType, theMethod, theContext, theProvider);
|
super(theReturnResourceType, theMethod, theContext, theProvider);
|
||||||
|
|
||||||
myIdempotent = theIdempotent;
|
myIdempotent = theIdempotent;
|
||||||
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
if (myIdParamIndex != null) {
|
if (myIdParamIndex != null) {
|
||||||
for (Annotation next : theMethod.getParameterAnnotations()[myIdParamIndex]) {
|
for (Annotation next : theMethod.getParameterAnnotations()[myIdParamIndex]) {
|
||||||
if (next instanceof IdParam) {
|
if (next instanceof IdParam) {
|
||||||
|
@ -230,7 +230,7 @@ public class OperationMethodBinding extends BaseResourceReturningMethodBinding {
|
||||||
public BaseHttpClientInvocation invokeClient(Object[] theArgs) throws InternalErrorException {
|
public BaseHttpClientInvocation invokeClient(Object[] theArgs) throws InternalErrorException {
|
||||||
String id = null;
|
String id = null;
|
||||||
if (myIdParamIndex != null) {
|
if (myIdParamIndex != null) {
|
||||||
IdDt idDt = (IdDt) theArgs[myIdParamIndex];
|
IIdType idDt = (IIdType) theArgs[myIdParamIndex];
|
||||||
id = idDt.getValue();
|
id = idDt.getValue();
|
||||||
}
|
}
|
||||||
IBaseParameters parameters = (IBaseParameters) getContext().getResourceDefinition("Parameters").newInstance();
|
IBaseParameters parameters = (IBaseParameters) getContext().getResourceDefinition("Parameters").newInstance();
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class ReadMethodBinding extends BaseResourceReturningMethodBinding implem
|
||||||
|
|
||||||
Validate.notNull(theMethod, "Method must not be null");
|
Validate.notNull(theMethod, "Method must not be null");
|
||||||
|
|
||||||
Integer idIndex = MethodUtil.findIdParameterIndex(theMethod);
|
Integer idIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
Integer versionIdIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
Integer versionIdIndex = MethodUtil.findVersionIdParameterIndex(theMethod);
|
||||||
|
|
||||||
Class<?>[] parameterTypes = theMethod.getParameterTypes();
|
Class<?>[] parameterTypes = theMethod.getParameterTypes();
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class SearchMethodBinding extends BaseResourceReturningMethodBinding {
|
||||||
Search search = theMethod.getAnnotation(Search.class);
|
Search search = theMethod.getAnnotation(Search.class);
|
||||||
this.myQueryName = StringUtils.defaultIfBlank(search.queryName(), null);
|
this.myQueryName = StringUtils.defaultIfBlank(search.queryName(), null);
|
||||||
this.myCompartmentName = StringUtils.defaultIfBlank(search.compartmentName(), null);
|
this.myCompartmentName = StringUtils.defaultIfBlank(search.compartmentName(), null);
|
||||||
this.myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod);
|
this.myIdParamIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
this.myAllowUnknownParams = search.allowUnknownParams();
|
this.myAllowUnknownParams = search.allowUnknownParams();
|
||||||
|
|
||||||
Description desc = theMethod.getAnnotation(Description.class);
|
Description desc = theMethod.getAnnotation(Description.class);
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class UpdateMethodBinding extends BaseOutcomeReturningMethodBindingWithRe
|
||||||
public UpdateMethodBinding(Method theMethod, FhirContext theContext, Object theProvider) {
|
public UpdateMethodBinding(Method theMethod, FhirContext theContext, Object theProvider) {
|
||||||
super(theMethod, theContext, Update.class, theProvider);
|
super(theMethod, theContext, Update.class, theProvider);
|
||||||
|
|
||||||
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class ValidateMethodBindingDstu1 extends BaseOutcomeReturningMethodBindin
|
||||||
public ValidateMethodBindingDstu1(Method theMethod, FhirContext theContext, Object theProvider) {
|
public ValidateMethodBindingDstu1(Method theMethod, FhirContext theContext, Object theProvider) {
|
||||||
super(theMethod, theContext, Validate.class, theProvider);
|
super(theMethod, theContext, Validate.class, theProvider);
|
||||||
|
|
||||||
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod);
|
myIdParameterIndex = MethodUtil.findIdParameterIndex(theMethod, getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
package ca.uhn.fhir.cli;
|
package ca.uhn.fhir.cli;
|
||||||
|
|
||||||
import org.hl7.fhir.instance.model.ValueSet;
|
import org.hl7.fhir.dstu21.hapi.validation.IValidationSupport;
|
||||||
import org.hl7.fhir.instance.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet;
|
||||||
import org.hl7.fhir.instance.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
||||||
|
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.rest.client.IGenericClient;
|
import ca.uhn.fhir.rest.client.IGenericClient;
|
||||||
import ca.uhn.fhir.rest.client.ServerValidationModeEnum;
|
import ca.uhn.fhir.rest.client.ServerValidationModeEnum;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
|
import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
|
||||||
import ca.uhn.fhir.validation.IValidationSupport;
|
|
||||||
|
|
||||||
public class LoadingValidationSupport implements IValidationSupport {
|
public class LoadingValidationSupport implements IValidationSupport {
|
||||||
|
|
||||||
|
|
|
@ -4,15 +4,13 @@ import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.leftPad;
|
import static org.apache.commons.lang3.StringUtils.leftPad;
|
||||||
import static org.fusesource.jansi.Ansi.*;
|
import static org.fusesource.jansi.Ansi.ansi;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.apache.commons.cli.CommandLine;
|
import org.apache.commons.cli.CommandLine;
|
||||||
import org.apache.commons.cli.Option;
|
import org.apache.commons.cli.Option;
|
||||||
|
@ -21,24 +19,20 @@ import org.apache.commons.cli.Options;
|
||||||
import org.apache.commons.cli.ParseException;
|
import org.apache.commons.cli.ParseException;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.text.WordUtils;
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
import org.fusesource.jansi.Ansi;
|
import org.fusesource.jansi.Ansi.Color;
|
||||||
|
import org.hl7.fhir.dstu21.hapi.validation.DefaultProfileValidationSupport;
|
||||||
|
import org.hl7.fhir.dstu21.hapi.validation.FhirInstanceValidator;
|
||||||
|
import org.hl7.fhir.dstu21.hapi.validation.ValidationSupportChain;
|
||||||
|
import org.hl7.fhir.dstu21.model.StructureDefinition;
|
||||||
|
|
||||||
import com.phloc.commons.io.file.FileUtils;
|
import com.phloc.commons.io.file.FileUtils;
|
||||||
import com.sun.tools.corba.se.idl.ParameterEntry;
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.dstu2.resource.StructureDefinition;
|
|
||||||
import ca.uhn.fhir.rest.method.MethodUtil;
|
import ca.uhn.fhir.rest.method.MethodUtil;
|
||||||
import ca.uhn.fhir.rest.param.ParameterUtil;
|
|
||||||
import ca.uhn.fhir.rest.server.EncodingEnum;
|
import ca.uhn.fhir.rest.server.EncodingEnum;
|
||||||
import ca.uhn.fhir.validation.DefaultProfileValidationSupport;
|
|
||||||
import ca.uhn.fhir.validation.FhirInstanceValidator;
|
|
||||||
import ca.uhn.fhir.validation.FhirValidator;
|
import ca.uhn.fhir.validation.FhirValidator;
|
||||||
import ca.uhn.fhir.validation.SingleValidationMessage;
|
import ca.uhn.fhir.validation.SingleValidationMessage;
|
||||||
import ca.uhn.fhir.validation.ValidationResult;
|
import ca.uhn.fhir.validation.ValidationResult;
|
||||||
import ca.uhn.fhir.validation.ValidationSupportChain;
|
|
||||||
import net.sf.saxon.expr.instruct.LocalParam;
|
|
||||||
import net.sf.saxon.om.Chain;
|
|
||||||
|
|
||||||
public class ValidateCommand extends BaseCommand {
|
public class ValidateCommand extends BaseCommand {
|
||||||
|
|
||||||
|
@ -112,7 +106,7 @@ public class ValidateCommand extends BaseCommand {
|
||||||
throw new ParseException("Failed to load file '" + localProfile + "' - Error: " + e.toString());
|
throw new ParseException("Failed to load file '" + localProfile + "' - Error: " + e.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
org.hl7.fhir.instance.model.StructureDefinition sd = (org.hl7.fhir.instance.model.StructureDefinition) MethodUtil.detectEncodingNoDefault(input).newParser(FhirContext.forDstu2Hl7Org()).parseResource(input);
|
StructureDefinition sd = (StructureDefinition) MethodUtil.detectEncodingNoDefault(input).newParser(getFhirCtx()).parseResource(input);
|
||||||
instanceValidator.setStructureDefintion(sd);
|
instanceValidator.setStructureDefintion(sd);
|
||||||
}
|
}
|
||||||
if (theCommandLine.hasOption("r")) {
|
if (theCommandLine.hasOption("r")) {
|
||||||
|
|
|
@ -23,11 +23,10 @@ package ca.uhn.fhir.jpa.dao;
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -36,7 +35,6 @@ import javax.annotation.PostConstruct;
|
||||||
import org.apache.commons.codec.binary.StringUtils;
|
import org.apache.commons.codec.binary.StringUtils;
|
||||||
import org.hl7.fhir.dstu21.hapi.validation.DefaultProfileValidationSupport;
|
import org.hl7.fhir.dstu21.hapi.validation.DefaultProfileValidationSupport;
|
||||||
import org.hl7.fhir.dstu21.hapi.validation.HapiWorkerContext;
|
import org.hl7.fhir.dstu21.hapi.validation.HapiWorkerContext;
|
||||||
import org.hl7.fhir.dstu21.hapi.validation.IValidationSupport.CodeValidationResult;
|
|
||||||
import org.hl7.fhir.dstu21.hapi.validation.ValidationSupportChain;
|
import org.hl7.fhir.dstu21.hapi.validation.ValidationSupportChain;
|
||||||
import org.hl7.fhir.dstu21.model.CodeableConcept;
|
import org.hl7.fhir.dstu21.model.CodeableConcept;
|
||||||
import org.hl7.fhir.dstu21.model.Coding;
|
import org.hl7.fhir.dstu21.model.Coding;
|
||||||
|
@ -48,19 +46,16 @@ import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionContainsComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionContainsComponent;
|
||||||
import org.hl7.fhir.dstu21.terminologies.ValueSetExpander;
|
import org.hl7.fhir.dstu21.terminologies.ValueSetExpander;
|
||||||
import org.hl7.fhir.dstu21.terminologies.ValueSetExpander.ETooCostly;
|
|
||||||
import org.hl7.fhir.dstu21.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
|
import org.hl7.fhir.dstu21.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.entity.BaseHasResource;
|
|
||||||
import ca.uhn.fhir.rest.param.TokenParam;
|
import ca.uhn.fhir.rest.param.TokenParam;
|
||||||
import ca.uhn.fhir.rest.param.UriParam;
|
import ca.uhn.fhir.rest.param.UriParam;
|
||||||
import ca.uhn.fhir.rest.server.IBundleProvider;
|
import ca.uhn.fhir.rest.server.IBundleProvider;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
|
|
||||||
|
|
||||||
public class FhirResourceDaoValueSetDstu21 extends FhirResourceDaoDstu21<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
|
public class FhirResourceDaoValueSetDstu21 extends FhirResourceDaoDstu21<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
|
||||||
|
|
||||||
|
@ -81,31 +76,23 @@ public class FhirResourceDaoValueSetDstu21 extends FhirResourceDaoDstu21<ValueSe
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ValueSet expand(IIdType theId, String theFilter) {
|
public ValueSet expand(IIdType theId, String theFilter) {
|
||||||
// throw new UnsupportedOperationException();
|
|
||||||
HapiWorkerContext workerContext = new HapiWorkerContext(getContext(), myValidationSupport);
|
HapiWorkerContext workerContext = new HapiWorkerContext(getContext(), myValidationSupport);
|
||||||
ConceptSetComponent inc = new ConceptSetComponent();
|
ValueSet source = workerContext.fetchResource(ValueSet.class, theId.getValue());
|
||||||
inc.setSystem(theId.getValue());
|
|
||||||
ValueSetExpansionComponent outcome = workerContext.expandVS(inc);
|
|
||||||
|
|
||||||
ValueSet retVal = new ValueSet();
|
ValueSetExpansionOutcome outcome = workerContext.expand(source);
|
||||||
retVal.setExpansion(outcome);
|
ValueSetExpansionComponent expansion = outcome.getValueset().getExpansion();
|
||||||
return retVal;
|
if (isNotBlank(theFilter)) {
|
||||||
}
|
for (Iterator<ValueSetExpansionContainsComponent> containsIter = expansion.getContains().iterator(); containsIter.hasNext();) {
|
||||||
|
ValueSetExpansionContainsComponent nextContains = containsIter.next();
|
||||||
private ValueSet loadValueSetForExpansion(IIdType theId) {
|
if (!nextContains.getDisplay().toLowerCase().contains(theFilter.toLowerCase())) {
|
||||||
if (theId.getValue().startsWith("http://hl7.org/fhir/")) {
|
containsIter.remove();
|
||||||
ValueSet valueSet = myValidationSupport.fetchResource(getContext(), ValueSet.class, theId.getValue());
|
}
|
||||||
if (valueSet != null) {
|
|
||||||
return valueSet; // getContext().newJsonParser().parseResource(ValueSet.class,
|
|
||||||
// getContext().newJsonParser().encodeResourceToString(valueSet));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BaseHasResource sourceEntity = readEntity(theId);
|
|
||||||
if (sourceEntity == null) {
|
ValueSet retVal = new ValueSet();
|
||||||
throw new ResourceNotFoundException(theId);
|
retVal.setExpansion(expansion);
|
||||||
}
|
return retVal;
|
||||||
ValueSet source = (ValueSet) toResource(sourceEntity, false);
|
|
||||||
return source;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -239,9 +226,9 @@ public class FhirResourceDaoValueSetDstu21 extends FhirResourceDaoDstu21<ValueSe
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<IIdType> findValueSetIdsContainingSystemAndCode(String theCode, String theSystem) {
|
private List<IIdType> findValueSetIdsContainingSystemAndCode(String theCode, String theSystem) {
|
||||||
if (theSystem != null && theSystem.startsWith("http://hl7.org/fhir/ValueSet")) {
|
// if (theSystem != null && theSystem.startsWith("http://hl7.org/fhir/ValueSet")) {
|
||||||
return Collections.singletonList((IIdType) new IdType(theSystem));
|
// return Collections.singletonList((IIdType) new IdType(theSystem));
|
||||||
}
|
// }
|
||||||
|
|
||||||
List<IIdType> valueSetIds;
|
List<IIdType> valueSetIds;
|
||||||
Set<Long> ids = searchForIds(ValueSet.SP_CODE, new TokenParam(theSystem, theCode));
|
Set<Long> ids = searchForIds(ValueSet.SP_CODE, new TokenParam(theSystem, theCode));
|
||||||
|
@ -320,48 +307,65 @@ public class FhirResourceDaoValueSetDstu21 extends FhirResourceDaoDstu21<ValueSe
|
||||||
system = theSystem.getValue();
|
system = theSystem.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CodeValidationResult validateOutcome = myJpaValidationSupport.validateCode(getContext(), system, code, null);
|
// CodeValidationResult validateOutcome = myJpaValidationSupport.validateCode(getContext(), system, code, null);
|
||||||
//
|
//
|
||||||
// LookupCodeResult result = new LookupCodeResult();
|
// LookupCodeResult result = new LookupCodeResult();
|
||||||
// result.setSearchedForCode(code);
|
// result.setSearchedForCode(code);
|
||||||
// result.setSearchedForSystem(system);
|
// result.setSearchedForSystem(system);
|
||||||
// result.setFound(false);
|
// result.setFound(false);
|
||||||
// if (validateOutcome.isOk()) {
|
// if (validateOutcome.isOk()) {
|
||||||
// result.setFound(true);
|
// result.setFound(true);
|
||||||
// result.setCodeIsAbstract(validateOutcome.asConceptDefinition().getAbstract());
|
// result.setCodeIsAbstract(validateOutcome.asConceptDefinition().getAbstract());
|
||||||
// result.setCodeDisplay(validateOutcome.asConceptDefinition().getDisplay());
|
// result.setCodeDisplay(validateOutcome.asConceptDefinition().getDisplay());
|
||||||
// }
|
// }
|
||||||
// return result;
|
// return result;
|
||||||
// result.getDisplay()
|
|
||||||
//
|
if (myValidationSupport.isCodeSystemSupported(getContext(), system)) {
|
||||||
// List<IIdType> valueSetIds = findValueSetIdsContainingSystemAndCode(code, system);
|
HapiWorkerContext ctx = new HapiWorkerContext(getContext(), myValidationSupport);
|
||||||
// for (IIdType nextId : valueSetIds) {
|
ValueSetExpander expander = ctx.getExpander();
|
||||||
// ValueSet expansion = expand(nextId, null);
|
ValueSet source = new ValueSet();
|
||||||
// List<ValueSetExpansionContainsComponent> contains = expansion.getExpansion().getContains();
|
source.getCompose().addInclude().setSystem(system).addConcept().setCode(code);
|
||||||
// ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.LookupCodeResult result = lookup(contains, system, code);
|
|
||||||
// if (result != null) {
|
ValueSetExpansionOutcome expansion;
|
||||||
// return result;
|
try {
|
||||||
// }
|
expansion = expander.expand(source);
|
||||||
// }
|
} catch (Exception e) {
|
||||||
//
|
throw new InternalErrorException(e);
|
||||||
|
}
|
||||||
HapiWorkerContext ctx = new HapiWorkerContext(getContext(), myValidationSupport);
|
List<ValueSetExpansionContainsComponent> contains = expansion.getValueset().getExpansion().getContains();
|
||||||
ValueSetExpander expander = ctx.getExpander();
|
ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.LookupCodeResult result = lookup(contains, system, code);
|
||||||
ValueSet source = new ValueSet();
|
if (result != null) {
|
||||||
source.getCompose().addInclude().setSystem(system).addConcept().setCode(code);
|
return result;
|
||||||
|
}
|
||||||
ValueSetExpansionOutcome expansion;
|
|
||||||
try {
|
} else {
|
||||||
expansion = expander.expand(source);
|
|
||||||
} catch (Exception e) {
|
/*
|
||||||
throw new InternalErrorException(e);
|
* If it's not a built-in code system, use ones from the database
|
||||||
|
*/
|
||||||
|
|
||||||
|
List<IIdType> valueSetIds = findValueSetIdsContainingSystemAndCode(code, system);
|
||||||
|
for (IIdType nextId : valueSetIds) {
|
||||||
|
ValueSet expansion = read(nextId);
|
||||||
|
for (ConceptDefinitionComponent next : expansion.getCodeSystem().getConcept()) {
|
||||||
|
if (code.equals(next.getCode())) {
|
||||||
|
ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.LookupCodeResult retVal = new LookupCodeResult();
|
||||||
|
retVal.setSearchedForCode(code);
|
||||||
|
retVal.setSearchedForSystem(system);
|
||||||
|
retVal.setFound(true);
|
||||||
|
if (next.getAbstractElement().getValue() != null) {
|
||||||
|
retVal.setCodeIsAbstract(next.getAbstractElement().booleanValue());
|
||||||
|
}
|
||||||
|
retVal.setCodeDisplay(next.getDisplay());
|
||||||
|
retVal.setCodeSystemDisplayName("Unknown"); // TODO: implement
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
List<ValueSetExpansionContainsComponent> contains = expansion.getValueset().getExpansion().getContains();
|
|
||||||
ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.LookupCodeResult result = lookup(contains, system, code);
|
// We didn't find it..
|
||||||
if (result != null) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
LookupCodeResult retVal = new LookupCodeResult();
|
LookupCodeResult retVal = new LookupCodeResult();
|
||||||
retVal.setFound(false);
|
retVal.setFound(false);
|
||||||
retVal.setSearchedForCode(code);
|
retVal.setSearchedForCode(code);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ca.uhn.fhir.jpa.dao;
|
package ca.uhn.fhir.jpa.dao;
|
||||||
|
|
||||||
|
import org.hl7.fhir.dstu21.model.IdType;
|
||||||
import org.hl7.fhir.dstu21.model.StructureDefinition;
|
import org.hl7.fhir.dstu21.model.StructureDefinition;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet;
|
import org.hl7.fhir.dstu21.model.ValueSet;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
||||||
|
@ -30,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
import ca.uhn.fhir.rest.param.StringParam;
|
||||||
import ca.uhn.fhir.rest.param.UriParam;
|
import ca.uhn.fhir.rest.param.UriParam;
|
||||||
import ca.uhn.fhir.rest.server.IBundleProvider;
|
import ca.uhn.fhir.rest.server.IBundleProvider;
|
||||||
|
|
||||||
|
@ -61,10 +63,20 @@ public class JpaValidationSupportDstu21 implements IJpaValidationSupportDstu21 {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends IBaseResource> T fetchResource(FhirContext theContext, Class<T> theClass, String theUri) {
|
public <T extends IBaseResource> T fetchResource(FhirContext theContext, Class<T> theClass, String theUri) {
|
||||||
|
IdType id = new IdType(theUri);
|
||||||
|
boolean localReference = false;
|
||||||
|
if (id.hasBaseUrl() == false && id.hasIdPart() == true) {
|
||||||
|
localReference = true;
|
||||||
|
}
|
||||||
|
|
||||||
String resourceName = myDstu21Ctx.getResourceDefinition(theClass).getName();
|
String resourceName = myDstu21Ctx.getResourceDefinition(theClass).getName();
|
||||||
IBundleProvider search;
|
IBundleProvider search;
|
||||||
if ("ValueSet".equals(resourceName)) {
|
if ("ValueSet".equals(resourceName)) {
|
||||||
search = myValueSetDao.search(ca.uhn.fhir.model.dstu2.resource.ValueSet.SP_URL, new UriParam(theUri));
|
if (localReference) {
|
||||||
|
search = myValueSetDao.search(ca.uhn.fhir.model.dstu2.resource.ValueSet.SP_RES_ID, new StringParam(theUri));
|
||||||
|
} else {
|
||||||
|
search = myValueSetDao.search(ca.uhn.fhir.model.dstu2.resource.ValueSet.SP_URL, new UriParam(theUri));
|
||||||
|
}
|
||||||
} else if ("StructureDefinition".equals(resourceName)) {
|
} else if ("StructureDefinition".equals(resourceName)) {
|
||||||
search = myStructureDefinitionDao.search(ca.uhn.fhir.model.dstu2.resource.StructureDefinition.SP_URL, new UriParam(theUri));
|
search = myStructureDefinitionDao.search(ca.uhn.fhir.model.dstu2.resource.StructureDefinition.SP_URL, new UriParam(theUri));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -30,7 +30,6 @@ import org.springframework.beans.factory.annotation.Required;
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
|
import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
|
||||||
import ca.uhn.fhir.model.api.TagList;
|
import ca.uhn.fhir.model.api.TagList;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.GetTags;
|
import ca.uhn.fhir.rest.annotation.GetTags;
|
||||||
import ca.uhn.fhir.rest.annotation.History;
|
import ca.uhn.fhir.rest.annotation.History;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
|
@ -83,7 +82,7 @@ public abstract class BaseJpaResourceProvider<T extends IBaseResource> extends B
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetTags
|
@GetTags
|
||||||
public TagList getTagsForResourceInstance(HttpServletRequest theRequest, @IdParam IdDt theResourceId) {
|
public TagList getTagsForResourceInstance(HttpServletRequest theRequest, @IdParam IIdType theResourceId) {
|
||||||
startRequest(theRequest);
|
startRequest(theRequest);
|
||||||
try {
|
try {
|
||||||
return myDao.getTags(theResourceId);
|
return myDao.getTags(theResourceId);
|
||||||
|
@ -103,7 +102,7 @@ public abstract class BaseJpaResourceProvider<T extends IBaseResource> extends B
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read(version = true)
|
@Read(version = true)
|
||||||
public T read(HttpServletRequest theRequest, @IdParam IdDt theId) {
|
public T read(HttpServletRequest theRequest, @IdParam IIdType theId) {
|
||||||
startRequest(theRequest);
|
startRequest(theRequest);
|
||||||
try {
|
try {
|
||||||
return myDao.read(theId);
|
return myDao.read(theId);
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
@Before
|
@Before
|
||||||
@Transactional
|
@Transactional
|
||||||
public void before02() throws IOException {
|
public void before02() throws IOException {
|
||||||
ValueSet upload = loadResourceFromClasspath(ValueSet.class, "/extensional-case-2.xml");
|
ValueSet upload = loadResourceFromClasspath(ValueSet.class, "/extensional-case-2.1.xml");
|
||||||
upload.setId("");
|
upload.setId("");
|
||||||
myExtensionalVsId = myValueSetDao.create(upload).getId().toUnqualifiedVersionless();
|
myExtensionalVsId = myValueSetDao.create(upload).getId().toUnqualifiedVersionless();
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = null;
|
UriType valueSetIdentifier = null;
|
||||||
IdType id = null;
|
IdType id = null;
|
||||||
CodeType code = new CodeType("8450-9-XXX");
|
CodeType code = new CodeType("8450-9-XXX");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = null;
|
StringType display = null;
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -58,7 +58,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = null;
|
UriType valueSetIdentifier = null;
|
||||||
IdType id = null;
|
IdType id = null;
|
||||||
CodeType code = new CodeType("8450-9");
|
CodeType code = new CodeType("8450-9");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = null;
|
StringType display = null;
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -72,7 +72,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
||||||
IdType id = null;
|
IdType id = null;
|
||||||
CodeType code = new CodeType("11378-7");
|
CodeType code = new CodeType("11378-7");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = null;
|
StringType display = null;
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -86,7 +86,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
||||||
IdType id = null;
|
IdType id = null;
|
||||||
CodeType code = new CodeType("11378-7");
|
CodeType code = new CodeType("11378-7");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = new StringType("Systolic blood pressure at First encounterXXXX");
|
StringType display = new StringType("Systolic blood pressure at First encounterXXXX");
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -100,7 +100,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
UriType valueSetIdentifier = new UriType("http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2");
|
||||||
IdType id = null;
|
IdType id = null;
|
||||||
CodeType code = new CodeType("11378-7");
|
CodeType code = new CodeType("11378-7");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = new StringType("Systolic blood pressure at First encounter");
|
StringType display = new StringType("Systolic blood pressure at First encounter");
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -118,7 +118,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
StringType display = null;
|
StringType display = null;
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = new CodeableConcept();
|
CodeableConcept codeableConcept = new CodeableConcept();
|
||||||
codeableConcept.addCoding().setSystem("http://loinc.org").setCode("11378-7");
|
codeableConcept.addCoding().setSystem("http://acme.org").setCode("11378-7");
|
||||||
ValidateCodeResult result = myValueSetDao.validateCode(valueSetIdentifier, id, code, system, display, coding, codeableConcept);
|
ValidateCodeResult result = myValueSetDao.validateCode(valueSetIdentifier, id, code, system, display, coding, codeableConcept);
|
||||||
assertTrue(result.isResult());
|
assertTrue(result.isResult());
|
||||||
assertEquals("Systolic blood pressure at First encounter", result.getDisplay());
|
assertEquals("Systolic blood pressure at First encounter", result.getDisplay());
|
||||||
|
@ -129,7 +129,7 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
UriType valueSetIdentifier = null;
|
UriType valueSetIdentifier = null;
|
||||||
IIdType id = myExtensionalVsId;
|
IIdType id = myExtensionalVsId;
|
||||||
CodeType code = new CodeType("11378-7");
|
CodeType code = new CodeType("11378-7");
|
||||||
UriType system = new UriType("http://loinc.org");
|
UriType system = new UriType("http://acme.org");
|
||||||
StringType display = null;
|
StringType display = null;
|
||||||
Coding coding = null;
|
Coding coding = null;
|
||||||
CodeableConcept codeableConcept = null;
|
CodeableConcept codeableConcept = null;
|
||||||
|
@ -150,15 +150,15 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
||||||
"<expansion>",
|
"<expansion>",
|
||||||
"<contains>",
|
"<contains>",
|
||||||
"<system value=\"http://loinc.org\"/>",
|
"<system value=\"http://acme.org\"/>",
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
|
||||||
"</contains>",
|
|
||||||
"<contains>",
|
|
||||||
"<system value=\"http://loinc.org\"/>",
|
|
||||||
"<code value=\"8450-9\"/>",
|
"<code value=\"8450-9\"/>",
|
||||||
"<display value=\"Systolic blood pressure--expiration\"/>",
|
"<display value=\"Systolic blood pressure--expiration\"/>",
|
||||||
"</contains>",
|
"</contains>",
|
||||||
|
"<contains>",
|
||||||
|
"<system value=\"http://acme.org\"/>",
|
||||||
|
"<code value=\"11378-7\"/>",
|
||||||
|
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
||||||
|
"</contains>",
|
||||||
"</expansion>"
|
"</expansion>"
|
||||||
));
|
));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
@ -176,18 +176,6 @@ public class FhirResourceDaoValueSetDstu21Test extends BaseJpaDstu21Test {
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
|
||||||
/*
|
|
||||||
* Filter with code
|
|
||||||
*/
|
|
||||||
|
|
||||||
expanded = myValueSetDao.expand(myExtensionalVsId, ("11378"));
|
|
||||||
resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(expanded);
|
|
||||||
ourLog.info(resp);
|
|
||||||
//@formatter:off
|
|
||||||
assertThat(resp, stringContainsInOrder(
|
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -2299,7 +2299,7 @@ public class ResourceProviderDstu21Test extends BaseResourceProviderDstu21Test {
|
||||||
@Test
|
@Test
|
||||||
public void testValueSetExpandOperation() throws IOException {
|
public void testValueSetExpandOperation() throws IOException {
|
||||||
|
|
||||||
ValueSet upload = myFhirCtx.newXmlParser().parseResource(ValueSet.class, new InputStreamReader(ResourceProviderDstu21Test.class.getResourceAsStream("/extensional-case-2.xml")));
|
ValueSet upload = myFhirCtx.newXmlParser().parseResource(ValueSet.class, new InputStreamReader(ResourceProviderDstu21Test.class.getResourceAsStream("/extensional-case-2.1.xml")));
|
||||||
IIdType vsid = ourClient.create().resource(upload).execute().getId().toUnqualifiedVersionless();
|
IIdType vsid = ourClient.create().resource(upload).execute().getId().toUnqualifiedVersionless();
|
||||||
|
|
||||||
HttpGet get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand");
|
HttpGet get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand");
|
||||||
|
@ -2313,15 +2313,15 @@ public class ResourceProviderDstu21Test extends BaseResourceProviderDstu21Test {
|
||||||
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
||||||
"<expansion>",
|
"<expansion>",
|
||||||
"<contains>",
|
"<contains>",
|
||||||
"<system value=\"http://loinc.org\"/>",
|
"<system value=\"http://acme.org\"/>",
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
|
||||||
"</contains>",
|
|
||||||
"<contains>",
|
|
||||||
"<system value=\"http://loinc.org\"/>",
|
|
||||||
"<code value=\"8450-9\"/>",
|
"<code value=\"8450-9\"/>",
|
||||||
"<display value=\"Systolic blood pressure--expiration\"/>",
|
"<display value=\"Systolic blood pressure--expiration\"/>",
|
||||||
"</contains>",
|
"</contains>",
|
||||||
|
"<contains>",
|
||||||
|
"<system value=\"http://acme.org\"/>",
|
||||||
|
"<code value=\"11378-7\"/>",
|
||||||
|
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
||||||
|
"</contains>",
|
||||||
"</expansion>"
|
"</expansion>"
|
||||||
));
|
));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
@ -2350,27 +2350,6 @@ public class ResourceProviderDstu21Test extends BaseResourceProviderDstu21Test {
|
||||||
response.close();
|
response.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Filter with code
|
|
||||||
*/
|
|
||||||
|
|
||||||
get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand?filter=11378");
|
|
||||||
response = ourHttpClient.execute(get);
|
|
||||||
try {
|
|
||||||
String resp = IOUtils.toString(response.getEntity().getContent());
|
|
||||||
ourLog.info(resp);
|
|
||||||
assertEquals(200, response.getStatusLine().getStatusCode());
|
|
||||||
//@formatter:off
|
|
||||||
assertThat(resp, stringContainsInOrder(
|
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>"
|
|
||||||
));
|
|
||||||
//@formatter:on
|
|
||||||
} finally {
|
|
||||||
IOUtils.closeQuietly(response.getEntity().getContent());
|
|
||||||
response.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,179 +22,21 @@ import org.junit.Test;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
|
||||||
|
|
||||||
public class ResourceProviderDstu21ValueSetTest extends BaseResourceProviderDstu21Test {
|
public class ResourceProviderDstu21ValueSetTest extends BaseResourceProviderDstu21Test {
|
||||||
|
|
||||||
private IIdType myExtensionalVsId;
|
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderDstu21ValueSetTest.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderDstu21ValueSetTest.class);
|
||||||
|
private IIdType myExtensionalVsId;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@Transactional
|
@Transactional
|
||||||
public void before02() throws IOException {
|
public void before02() throws IOException {
|
||||||
ValueSet upload = loadResourceFromClasspath(ValueSet.class, "/extensional-case-2.xml");
|
ValueSet upload = loadResourceFromClasspath(ValueSet.class, "/extensional-case-2.1.xml");
|
||||||
upload.setId("");
|
upload.setId("");
|
||||||
myExtensionalVsId = myValueSetDao.create(upload).getId().toUnqualifiedVersionless();
|
myExtensionalVsId = myValueSetDao.create(upload).getId().toUnqualifiedVersionless();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testValidateCodeOperationByCodeAndSystemInstance() {
|
|
||||||
//@formatter:off
|
|
||||||
Parameters respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onInstance(myExtensionalVsId)
|
|
||||||
.named("validate-code")
|
|
||||||
.withParameter(Parameters.class, "code", new CodeType("8495-4"))
|
|
||||||
.andParameter("system", new UriType("http://loinc.org"))
|
|
||||||
.execute();
|
|
||||||
//@formatter:on
|
|
||||||
|
|
||||||
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
|
||||||
ourLog.info(resp);
|
|
||||||
|
|
||||||
assertEquals(true, ((BooleanType)respParam.getParameter().get(0).getValue()).booleanValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testValidateCodeOperationByCodeAndSystemType() {
|
|
||||||
//@formatter:off
|
|
||||||
Parameters respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("validate-code")
|
|
||||||
.withParameter(Parameters.class, "code", new CodeType("8450-9"))
|
|
||||||
.andParameter("system", new UriType("http://loinc.org"))
|
|
||||||
.execute();
|
|
||||||
//@formatter:on
|
|
||||||
|
|
||||||
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
|
||||||
ourLog.info(resp);
|
|
||||||
|
|
||||||
assertEquals(true, ((BooleanType)respParam.getParameter().get(0).getValue()).booleanValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLookupOperationByCodeAndSystem() {
|
|
||||||
//@formatter:off
|
|
||||||
Parameters respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "code", new CodeType("8450-9"))
|
|
||||||
.andParameter("system", new UriType("http://loinc.org"))
|
|
||||||
.execute();
|
|
||||||
//@formatter:on
|
|
||||||
|
|
||||||
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
|
||||||
ourLog.info(resp);
|
|
||||||
|
|
||||||
assertEquals("name", respParam.getParameter().get(0).getName());
|
|
||||||
assertEquals(("Unknown"), ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
|
||||||
assertEquals("display", respParam.getParameter().get(1).getName());
|
|
||||||
assertEquals(("Systolic blood pressure--expiration"), ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
|
||||||
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
|
||||||
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
// @Ignore
|
|
||||||
public void testLookupOperationForBuiltInCode() {
|
|
||||||
//@formatter:off
|
|
||||||
Parameters respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "code", new CodeType("M"))
|
|
||||||
.andParameter("system", new UriType("http://hl7.org/fhir/v3/MaritalStatus"))
|
|
||||||
.execute();
|
|
||||||
//@formatter:on
|
|
||||||
|
|
||||||
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
|
||||||
ourLog.info(resp);
|
|
||||||
|
|
||||||
assertEquals("name", respParam.getParameter().get(0).getName());
|
|
||||||
assertEquals("Unknown", ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
|
||||||
assertEquals("display", respParam.getParameter().get(1).getName());
|
|
||||||
assertEquals("Married", ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
|
||||||
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
|
||||||
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).booleanValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLookupOperationByCoding() {
|
|
||||||
//@formatter:off
|
|
||||||
Parameters respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://loinc.org").setCode("8450-9"))
|
|
||||||
.execute();
|
|
||||||
//@formatter:on
|
|
||||||
|
|
||||||
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
|
||||||
ourLog.info(resp);
|
|
||||||
|
|
||||||
assertEquals("name", respParam.getParameter().get(0).getName());
|
|
||||||
assertEquals(("Unknown"), ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
|
||||||
assertEquals("display", respParam.getParameter().get(1).getName());
|
|
||||||
assertEquals(("Systolic blood pressure--expiration"), ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
|
||||||
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
|
||||||
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLookupOperationByInvalidCombination() {
|
|
||||||
//@formatter:off
|
|
||||||
try {
|
|
||||||
ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://loinc.org").setCode("8450-9"))
|
|
||||||
.andParameter("code", new CodeType("8450-9"))
|
|
||||||
.andParameter("system", new UriType("http://loinc.org"))
|
|
||||||
.execute();
|
|
||||||
fail();
|
|
||||||
} catch (InvalidRequestException e) {
|
|
||||||
assertEquals("HTTP 400 Bad Request: $lookup can only validate (system AND code) OR (coding.system AND coding.code)", e.getMessage());
|
|
||||||
}
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLookupOperationByInvalidCombination2() {
|
|
||||||
//@formatter:off
|
|
||||||
try {
|
|
||||||
ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://loinc.org").setCode("8450-9"))
|
|
||||||
.andParameter("system", new UriType("http://loinc.org"))
|
|
||||||
.execute();
|
|
||||||
fail();
|
|
||||||
} catch (InvalidRequestException e) {
|
|
||||||
assertEquals("HTTP 400 Bad Request: $lookup can only validate (system AND code) OR (coding.system AND coding.code)", e.getMessage());
|
|
||||||
}
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testLookupOperationByInvalidCombination3() {
|
|
||||||
//@formatter:off
|
|
||||||
try {
|
|
||||||
ourClient
|
|
||||||
.operation()
|
|
||||||
.onType(ValueSet.class)
|
|
||||||
.named("lookup")
|
|
||||||
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://loinc.org").setCode(null))
|
|
||||||
.execute();
|
|
||||||
fail();
|
|
||||||
} catch (InvalidRequestException e) {
|
|
||||||
assertEquals("HTTP 400 Bad Request: No code, coding, or codeableConcept provided to validate", e.getMessage());
|
|
||||||
}
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExpandById() throws IOException {
|
public void testExpandById() throws IOException {
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
|
@ -214,15 +56,15 @@ public class ResourceProviderDstu21ValueSetTest extends BaseResourceProviderDstu
|
||||||
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
stringContainsInOrder("<ValueSet xmlns=\"http://hl7.org/fhir\">",
|
||||||
"<expansion>",
|
"<expansion>",
|
||||||
"<contains>",
|
"<contains>",
|
||||||
"<system value=\"http://loinc.org\"/>",
|
"<system value=\"http://acme.org\"/>",
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
|
||||||
"</contains>",
|
|
||||||
"<contains>",
|
|
||||||
"<system value=\"http://loinc.org\"/>",
|
|
||||||
"<code value=\"8450-9\"/>",
|
"<code value=\"8450-9\"/>",
|
||||||
"<display value=\"Systolic blood pressure--expiration\"/>",
|
"<display value=\"Systolic blood pressure--expiration\"/>",
|
||||||
"</contains>",
|
"</contains>",
|
||||||
|
"<contains>",
|
||||||
|
"<system value=\"http://acme.org\"/>",
|
||||||
|
"<code value=\"11378-7\"/>",
|
||||||
|
"<display value=\"Systolic blood pressure at First encounter\"/>",
|
||||||
|
"</contains>",
|
||||||
"</expansion>"
|
"</expansion>"
|
||||||
));
|
));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
@ -250,28 +92,8 @@ public class ResourceProviderDstu21ValueSetTest extends BaseResourceProviderDstu
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
|
||||||
/*
|
|
||||||
* Filter with code
|
|
||||||
*/
|
|
||||||
|
|
||||||
//@formatter:off
|
|
||||||
respParam = ourClient
|
|
||||||
.operation()
|
|
||||||
.onInstance(myExtensionalVsId)
|
|
||||||
.named("expand")
|
|
||||||
.withParameter(Parameters.class, "filter", new StringType("11378"))
|
|
||||||
.execute();
|
|
||||||
expanded = (ValueSet) respParam.getParameter().get(0).getResource();
|
|
||||||
//@formatter:on
|
|
||||||
resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(expanded);
|
|
||||||
ourLog.info(resp);
|
|
||||||
//@formatter:off
|
|
||||||
assertThat(resp, stringContainsInOrder(
|
|
||||||
"<code value=\"11378-7\"/>",
|
|
||||||
"<display value=\"Systolic blood pressure at First encounter\"/>"));
|
|
||||||
//@formatter:on
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExpandByIdentifier() {
|
public void testExpandByIdentifier() {
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
|
@ -371,5 +193,223 @@ public class ResourceProviderDstu21ValueSetTest extends BaseResourceProviderDstu
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByCodeAndSystemBuiltInCode() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("ACSN"))
|
||||||
|
.andParameter("system", new UriType("http://hl7.org/fhir/v2/0203"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals("name", respParam.getParameter().get(0).getName());
|
||||||
|
assertEquals(("Unknown"), ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
||||||
|
assertEquals("display", respParam.getParameter().get(1).getName());
|
||||||
|
assertEquals("Accession ID", ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
||||||
|
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
||||||
|
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByCodeAndSystemBuiltInNonexistantCode() {
|
||||||
|
//@formatter:off
|
||||||
|
try {
|
||||||
|
ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("ACSNAAAAAA"))
|
||||||
|
.andParameter("system", new UriType("http://hl7.org/fhir/v2/0203"))
|
||||||
|
.execute();
|
||||||
|
fail();
|
||||||
|
} catch (ResourceNotFoundException e) {
|
||||||
|
// good
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByCodeAndSystemUserDefinedCode() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("8450-9"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals("name", respParam.getParameter().get(0).getName());
|
||||||
|
assertEquals(("Unknown"), ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
||||||
|
assertEquals("display", respParam.getParameter().get(1).getName());
|
||||||
|
assertEquals(("Systolic blood pressure--expiration"), ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
||||||
|
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
||||||
|
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByCodeAndSystemUserDefinedNonExistantCode() {
|
||||||
|
//@formatter:off
|
||||||
|
try {
|
||||||
|
ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("8450-9AAAAA"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
fail();
|
||||||
|
} catch (ResourceNotFoundException e) {
|
||||||
|
// good
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByCoding() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://acme.org").setCode("8450-9"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals("name", respParam.getParameter().get(0).getName());
|
||||||
|
assertEquals(("Unknown"), ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
||||||
|
assertEquals("display", respParam.getParameter().get(1).getName());
|
||||||
|
assertEquals(("Systolic blood pressure--expiration"), ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
||||||
|
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
||||||
|
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByInvalidCombination() {
|
||||||
|
//@formatter:off
|
||||||
|
try {
|
||||||
|
ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://acme.org").setCode("8450-9"))
|
||||||
|
.andParameter("code", new CodeType("8450-9"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
fail();
|
||||||
|
} catch (InvalidRequestException e) {
|
||||||
|
assertEquals("HTTP 400 Bad Request: $lookup can only validate (system AND code) OR (coding.system AND coding.code)", e.getMessage());
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByInvalidCombination2() {
|
||||||
|
//@formatter:off
|
||||||
|
try {
|
||||||
|
ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://acme.org").setCode("8450-9"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
fail();
|
||||||
|
} catch (InvalidRequestException e) {
|
||||||
|
assertEquals("HTTP 400 Bad Request: $lookup can only validate (system AND code) OR (coding.system AND coding.code)", e.getMessage());
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLookupOperationByInvalidCombination3() {
|
||||||
|
//@formatter:off
|
||||||
|
try {
|
||||||
|
ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "coding", new Coding().setSystem("http://acme.org").setCode(null))
|
||||||
|
.execute();
|
||||||
|
fail();
|
||||||
|
} catch (InvalidRequestException e) {
|
||||||
|
assertEquals("HTTP 400 Bad Request: No code, coding, or codeableConcept provided to validate", e.getMessage());
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
// @Ignore
|
||||||
|
public void testLookupOperationForBuiltInCode() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("lookup")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("M"))
|
||||||
|
.andParameter("system", new UriType("http://hl7.org/fhir/v3/MaritalStatus"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals("name", respParam.getParameter().get(0).getName());
|
||||||
|
assertEquals("Unknown", ((StringType)respParam.getParameter().get(0).getValue()).getValue());
|
||||||
|
assertEquals("display", respParam.getParameter().get(1).getName());
|
||||||
|
assertEquals("Married", ((StringType)respParam.getParameter().get(1).getValue()).getValue());
|
||||||
|
assertEquals("abstract", respParam.getParameter().get(2).getName());
|
||||||
|
assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testValidateCodeOperationByCodeAndSystemInstance() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onInstance(myExtensionalVsId)
|
||||||
|
.named("validate-code")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("8495-4"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals(true, ((BooleanType)respParam.getParameter().get(0).getValue()).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testValidateCodeOperationByCodeAndSystemType() {
|
||||||
|
//@formatter:off
|
||||||
|
Parameters respParam = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ValueSet.class)
|
||||||
|
.named("validate-code")
|
||||||
|
.withParameter(Parameters.class, "code", new CodeType("8450-9"))
|
||||||
|
.andParameter("system", new UriType("http://acme.org"))
|
||||||
|
.execute();
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||||
|
ourLog.info(resp);
|
||||||
|
|
||||||
|
assertEquals(true, ((BooleanType)respParam.getParameter().get(0).getValue()).booleanValue());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ public class SystemProviderDstu21Test extends BaseJpaDstu21Test {
|
||||||
servletHolder.setServlet(restServer);
|
servletHolder.setServlet(restServer);
|
||||||
proxyHandler.addServlet(servletHolder, "/fhir/context/*");
|
proxyHandler.addServlet(servletHolder, "/fhir/context/*");
|
||||||
|
|
||||||
ourCtx = FhirContext.forDstu2();
|
ourCtx = FhirContext.forDstu2_1();
|
||||||
restServer.setFhirContext(ourCtx);
|
restServer.setFhirContext(ourCtx);
|
||||||
|
|
||||||
ourServer.setHandler(proxyHandler);
|
ourServer.setHandler(proxyHandler);
|
||||||
|
@ -213,9 +213,9 @@ public class SystemProviderDstu21Test extends BaseJpaDstu21Test {
|
||||||
Parameters parameters = ourCtx.newXmlParser().parseResource(Parameters.class, output);
|
Parameters parameters = ourCtx.newXmlParser().parseResource(Parameters.class, output);
|
||||||
assertEquals(2, parameters.getParameter().size());
|
assertEquals(2, parameters.getParameter().size());
|
||||||
assertEquals("keyword", parameters.getParameter().get(0).getPart().get(0).getName());
|
assertEquals("keyword", parameters.getParameter().get(0).getPart().get(0).getName());
|
||||||
assertEquals(new StringType("ZXCVBNM"), parameters.getParameter().get(0).getPart().get(0).getValue());
|
assertEquals(("ZXCVBNM"), ((StringType)parameters.getParameter().get(0).getPart().get(0).getValue()).getValueAsString());
|
||||||
assertEquals("score", parameters.getParameter().get(0).getPart().get(1).getName());
|
assertEquals("score", parameters.getParameter().get(0).getPart().get(1).getName());
|
||||||
assertEquals(new DecimalType("1.0"), parameters.getParameter().get(0).getPart().get(1).getValue());
|
assertEquals(("1.0"), ((DecimalType)parameters.getParameter().get(0).getPart().get(1).getValue()).getValueAsString());
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
http.close();
|
http.close();
|
||||||
|
@ -356,7 +356,7 @@ public class SystemProviderDstu21Test extends BaseJpaDstu21Test {
|
||||||
} catch (InvalidRequestException e) {
|
} catch (InvalidRequestException e) {
|
||||||
OperationOutcome oo = (OperationOutcome) e.getOperationOutcome();
|
OperationOutcome oo = (OperationOutcome) e.getOperationOutcome();
|
||||||
assertEquals("Invalid placeholder ID found: uri:uuid:bb0cd4bc-1839-4606-8c46-ba3069e69b1d - Must be of the form 'urn:uuid:[uuid]' or 'urn:oid:[oid]'", oo.getIssue().get(0).getDiagnostics());
|
assertEquals("Invalid placeholder ID found: uri:uuid:bb0cd4bc-1839-4606-8c46-ba3069e69b1d - Must be of the form 'urn:uuid:[uuid]' or 'urn:oid:[oid]'", oo.getIssue().get(0).getDiagnostics());
|
||||||
assertEquals("processing", oo.getIssue().get(0).getCode());
|
assertEquals("processing", oo.getIssue().get(0).getCode().toCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
<ValueSet xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="extensional-case-2" />
|
||||||
|
<text>
|
||||||
|
<status value="generated" />
|
||||||
|
<div xmlns="http://www.w3.org/1999/xhtml">A selection of codes from http://acme.org</div>
|
||||||
|
</text>
|
||||||
|
<url value="http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2" />
|
||||||
|
<identifier>
|
||||||
|
<value value="http://www.healthintersections.com.au/fhir/ValueSet/extensional-case-2" />
|
||||||
|
</identifier>
|
||||||
|
<name value="Terminology Services Connectation #1 Extensional case #2" />
|
||||||
|
<publisher value="Grahame Grieve" />
|
||||||
|
<contact>
|
||||||
|
<telecom>
|
||||||
|
<system value="email" />
|
||||||
|
<value value="grahame@healthintersections.com.au" />
|
||||||
|
</telecom>
|
||||||
|
</contact>
|
||||||
|
<description value="an enumeration of codes defined by LOINC" />
|
||||||
|
<status value="draft" />
|
||||||
|
<experimental value="true" />
|
||||||
|
<codeSystem>
|
||||||
|
<system value="http://acme.org" />
|
||||||
|
<concept>
|
||||||
|
<code value="8450-9" />
|
||||||
|
<display value="Systolic blood pressure--expiration" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="11378-7" />
|
||||||
|
<display value="Systolic blood pressure at First encounter" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8493-9" />
|
||||||
|
<display value="Systolic blood pressure 10 hour minimum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8494-7" />
|
||||||
|
<display value="Systolic blood pressure 12 hour minimum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8495-4" />
|
||||||
|
<display value="Systolic blood pressure 24 hour minimum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8451-7" />
|
||||||
|
<display value="Systolic blood pressure--inspiration" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8452-5" />
|
||||||
|
<display value="Systolic blood pressure.inspiration - expiration" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8459-0" />
|
||||||
|
<display value="Systolic blood pressure--sitting" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8460-8" />
|
||||||
|
<display value="Systolic blood pressure--standing" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8461-6" />
|
||||||
|
<display value="Systolic blood pressure--supine" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8479-8" />
|
||||||
|
<display value="Systolic blood pressure by palpation" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8480-6" />
|
||||||
|
<display value="Systolic blood pressure" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8481-4" />
|
||||||
|
<display value="Systolic blood pressure 1 hour maximum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8482-2" />
|
||||||
|
<display value="Systolic blood pressure 8 hour maximum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8483-0" />
|
||||||
|
<display value="Systolic blood pressure 10 hour maximum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8484-8" />
|
||||||
|
<display value="Systolic blood pressure 12 hour maximum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8485-5" />
|
||||||
|
<display value="Systolic blood pressure 24 hour maximum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8486-3" />
|
||||||
|
<display value="Systolic blood pressure 1 hour mean" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8487-1" />
|
||||||
|
<display value="Systolic blood pressure 8 hour mean" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8488-9" />
|
||||||
|
<display value="Systolic blood pressure 10 hour mean" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8489-7" />
|
||||||
|
<display value="Systolic blood pressure 12 hour mean" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8490-5" />
|
||||||
|
<display value="Systolic blood pressure 24 hour mean" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8491-3" />
|
||||||
|
<display value="Systolic blood pressure 1 hour minimum" />
|
||||||
|
</concept>
|
||||||
|
<concept>
|
||||||
|
<code value="8492-1" />
|
||||||
|
<display value="Systolic blood pressure 8 hour minimum" />
|
||||||
|
</concept>
|
||||||
|
</codeSystem>
|
||||||
|
</ValueSet>
|
|
@ -182,7 +182,7 @@
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>2.19</version>
|
<version>2.19</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<redirectTestOutputToFile>false</redirectTestOutputToFile>
|
<!--<redirectTestOutputToFile>false</redirectTestOutputToFile>-->
|
||||||
<runOrder>random</runOrder>
|
<runOrder>random</runOrder>
|
||||||
<argLine>-Dfile.encoding=UTF-8</argLine>
|
<argLine>-Dfile.encoding=UTF-8</argLine>
|
||||||
<reuseForks>false</reuseForks>
|
<reuseForks>false</reuseForks>
|
||||||
|
|
|
@ -27,12 +27,12 @@ import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.hl7.fhir.dstu21.model.IdType;
|
||||||
import org.hl7.fhir.dstu21.model.StructureDefinition;
|
import org.hl7.fhir.dstu21.model.StructureDefinition;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Read;
|
import ca.uhn.fhir.rest.annotation.Read;
|
||||||
import ca.uhn.fhir.rest.annotation.Search;
|
import ca.uhn.fhir.rest.annotation.Search;
|
||||||
|
@ -55,7 +55,7 @@ public class ServerProfileProvider implements IResourceProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read()
|
@Read()
|
||||||
public StructureDefinition getProfileById(HttpServletRequest theRequest, @IdParam IdDt theId) {
|
public StructureDefinition getProfileById(HttpServletRequest theRequest, @IdParam IdType theId) {
|
||||||
RuntimeResourceDefinition retVal = myContext.getResourceDefinitionById(theId.getIdPart());
|
RuntimeResourceDefinition retVal = myContext.getResourceDefinitionById(theId.getIdPart());
|
||||||
if (retVal==null) {
|
if (retVal==null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -6,7 +6,9 @@ import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.hl7.fhir.dstu21.model.Bundle;
|
import org.hl7.fhir.dstu21.model.Bundle;
|
||||||
import org.hl7.fhir.dstu21.model.Bundle.BundleEntryComponent;
|
import org.hl7.fhir.dstu21.model.Bundle.BundleEntryComponent;
|
||||||
|
@ -14,6 +16,7 @@ import org.hl7.fhir.dstu21.model.IdType;
|
||||||
import org.hl7.fhir.dstu21.model.OperationOutcome.IssueSeverity;
|
import org.hl7.fhir.dstu21.model.OperationOutcome.IssueSeverity;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet;
|
import org.hl7.fhir.dstu21.model.ValueSet;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ConceptDefinitionComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ConceptDefinitionComponent;
|
||||||
|
import org.hl7.fhir.dstu21.model.ValueSet.ConceptReferenceComponent;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.dstu21.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
@ -30,7 +33,21 @@ public class DefaultProfileValidationSupport implements IValidationSupport {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ValueSetExpansionComponent expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
|
public ValueSetExpansionComponent expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
|
||||||
return null;
|
ValueSetExpansionComponent retVal = new ValueSetExpansionComponent();
|
||||||
|
|
||||||
|
Set<String> wantCodes = new HashSet<String>();
|
||||||
|
for (ConceptReferenceComponent next : theInclude.getConcept()) {
|
||||||
|
wantCodes.add(next.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
ValueSet system = fetchCodeSystem(theContext, theInclude.getSystem());
|
||||||
|
for (ConceptDefinitionComponent next : system.getCodeSystem().getConcept()) {
|
||||||
|
if (wantCodes.isEmpty() || wantCodes.contains(next.getCode())) {
|
||||||
|
retVal.addContains().setSystem(theInclude.getSystem()).setCode(next.getCode()).setDisplay(next.getDisplay());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -98,7 +115,7 @@ public class DefaultProfileValidationSupport implements IValidationSupport {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadCodeSystems(FhirContext theContext, Map<String, ValueSet> theCodeSystems, String theClasspath) {
|
private void loadCodeSystems(FhirContext theContext, Map<String, ValueSet> theCodeSystems, String theClasspath) {
|
||||||
ourLog.info("Loading code systems from file: {}", theClasspath);
|
ourLog.info("Loading code systems from classpath: {}", theClasspath);
|
||||||
InputStream valuesetText = DefaultProfileValidationSupport.class.getResourceAsStream(theClasspath);
|
InputStream valuesetText = DefaultProfileValidationSupport.class.getResourceAsStream(theClasspath);
|
||||||
if (valuesetText != null) {
|
if (valuesetText != null) {
|
||||||
InputStreamReader reader;
|
InputStreamReader reader;
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.hl7.fhir.dstu21.validation.IResourceValidator;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
|
|
||||||
public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander, ValueSetExpanderFactory {
|
public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander, ValueSetExpanderFactory {
|
||||||
private final FhirContext myCtx;
|
private final FhirContext myCtx;
|
||||||
|
@ -169,7 +170,7 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
if (vso.getError() != null) {
|
if (vso.getError() != null) {
|
||||||
return null;
|
throw new InvalidRequestException(vso.getError());
|
||||||
} else {
|
} else {
|
||||||
return vso;
|
return vso;
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ public class DateType extends BaseDateTimeType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DateType copy() {
|
public DateType copy() {
|
||||||
return new DateType(getValue());
|
return new DateType(getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InstantType today() {
|
public static InstantType today() {
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class DocumentManifest extends DomainResource {
|
||||||
/**
|
/**
|
||||||
* The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed.
|
* The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed.
|
||||||
*/
|
*/
|
||||||
@Child(name = "p", type = {Attachment.class}, order=1, min=1, max=1, modifier=false, summary=true)
|
@Child(name = "p", type = {Attachment.class, ValueSet.class}, order=1, min=1, max=1, modifier=false, summary=true)
|
||||||
@Description(shortDefinition="Contents of this set of documents", formalDefinition="The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed." )
|
@Description(shortDefinition="Contents of this set of documents", formalDefinition="The list of references to document content, or Attachment that consist of the parts of this document manifest. Usually, these would be document references, but direct references to Media or Attachments are also allowed." )
|
||||||
protected Type p;
|
protected Type p;
|
||||||
|
|
||||||
|
|
|
@ -197,7 +197,7 @@ public class InstantType extends BaseDateTimeType {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InstantType copy() {
|
public InstantType copy() {
|
||||||
return new InstantType(getValue());
|
return new InstantType(getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -32,6 +32,7 @@ import org.hamcrest.text.StringContainsInOrder;
|
||||||
import org.hl7.fhir.dstu21.model.Address.AddressUse;
|
import org.hl7.fhir.dstu21.model.Address.AddressUse;
|
||||||
import org.hl7.fhir.dstu21.model.AllergyIntolerance;
|
import org.hl7.fhir.dstu21.model.AllergyIntolerance;
|
||||||
import org.hl7.fhir.dstu21.model.Annotation;
|
import org.hl7.fhir.dstu21.model.Annotation;
|
||||||
|
import org.hl7.fhir.dstu21.model.Attachment;
|
||||||
import org.hl7.fhir.dstu21.model.Binary;
|
import org.hl7.fhir.dstu21.model.Binary;
|
||||||
import org.hl7.fhir.dstu21.model.Bundle;
|
import org.hl7.fhir.dstu21.model.Bundle;
|
||||||
import org.hl7.fhir.dstu21.model.Bundle.BundleEntryComponent;
|
import org.hl7.fhir.dstu21.model.Bundle.BundleEntryComponent;
|
||||||
|
@ -82,6 +83,7 @@ import org.junit.Test;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
import ca.uhn.fhir.model.api.annotation.Child;
|
||||||
import ca.uhn.fhir.parser.IParserErrorHandler.IParseLocation;
|
import ca.uhn.fhir.parser.IParserErrorHandler.IParseLocation;
|
||||||
import ca.uhn.fhir.rest.client.IGenericClient;
|
import ca.uhn.fhir.rest.client.IGenericClient;
|
||||||
import ca.uhn.fhir.rest.server.Constants;
|
import ca.uhn.fhir.rest.server.Constants;
|
||||||
|
@ -1679,6 +1681,12 @@ public class XmlParserDstu21Test {
|
||||||
DocumentManifest actual = ourCtx.newXmlParser().parseResource(DocumentManifest.class, encoded);
|
DocumentManifest actual = ourCtx.newXmlParser().parseResource(DocumentManifest.class, encoded);
|
||||||
assertEquals(1, actual.getContained().size());
|
assertEquals(1, actual.getContained().size());
|
||||||
assertEquals(1, actual.getContent().size());
|
assertEquals(1, actual.getContent().size());
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this fails, it's possibe the DocumentManifest structure is wrong:
|
||||||
|
* It should be
|
||||||
|
* @Child(name = "p", type = {Attachment.class, ValueSet.class}, order=1, min=1, max=1, modifier=false, summary=true)
|
||||||
|
*/
|
||||||
assertNotNull(((Reference) actual.getContent().get(0).getP()).getResource());
|
assertNotNull(((Reference) actual.getContent().get(0).getP()).getResource());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1730,7 +1738,7 @@ public class XmlParserDstu21Test {
|
||||||
" <id value=\"1\"/>\n" +
|
" <id value=\"1\"/>\n" +
|
||||||
" <meta>\n" +
|
" <meta>\n" +
|
||||||
" <versionId value=\"2\"/>\n" +
|
" <versionId value=\"2\"/>\n" +
|
||||||
" <lastUpdated value=\"2001-02-22T11:22:33-05:00\"/>\n" +
|
" <lastUpdated value=\"2001-02-22T09:22:33-07:00\"/>\n" +
|
||||||
" </meta>\n" +
|
" </meta>\n" +
|
||||||
" <birthDate value=\"2012-01-02\"/>\n" +
|
" <birthDate value=\"2012-01-02\"/>\n" +
|
||||||
" </Patient>\n" +
|
" </Patient>\n" +
|
||||||
|
@ -1758,9 +1766,10 @@ public class XmlParserDstu21Test {
|
||||||
assertEquals("match", entry.getSearch().getMode().toCode());
|
assertEquals("match", entry.getSearch().getMode().toCode());
|
||||||
assertEquals("POST", entry.getRequest().getMethod().toCode());
|
assertEquals("POST", entry.getRequest().getMethod().toCode());
|
||||||
assertEquals("http://foo/Patient?identifier=value", entry.getRequest().getUrl());
|
assertEquals("http://foo/Patient?identifier=value", entry.getRequest().getUrl());
|
||||||
assertEquals("2001-02-22T11:22:33-05:00", pt.getMeta().getLastUpdatedElement().getValueAsString());
|
assertEquals("2001-02-22T09:22:33-07:00", pt.getMeta().getLastUpdatedElement().getValueAsString());
|
||||||
|
|
||||||
String reEncoded = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(b);
|
IParser p = ourCtx.newXmlParser().setPrettyPrint(true);
|
||||||
|
String reEncoded = p.encodeResourceToString(b);
|
||||||
ourLog.info(reEncoded);
|
ourLog.info(reEncoded);
|
||||||
|
|
||||||
Diff d = new Diff(new StringReader(bundle), new StringReader(reEncoded));
|
Diff d = new Diff(new StringReader(bundle), new StringReader(reEncoded));
|
||||||
|
|
|
@ -11,23 +11,22 @@ import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
|
import ca.uhn.fhir.model.primitive.IdDt;
|
||||||
import ca.uhn.fhir.model.primitive.IntegerDt;
|
import ca.uhn.fhir.model.primitive.IntegerDt;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
import ca.uhn.fhir.rest.annotation.OperationParam;
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
import ca.uhn.fhir.rest.annotation.OptionalParam;
|
|
||||||
import ca.uhn.fhir.rest.annotation.Read;
|
import ca.uhn.fhir.rest.annotation.Read;
|
||||||
import ca.uhn.fhir.rest.annotation.Search;
|
|
||||||
|
|
||||||
public class ServerUsingOldTypesDstu21Test {
|
public class ServerUsingOldTypesDstu21Test {
|
||||||
|
|
||||||
private static FhirContext ourCtx = FhirContext.forDstu2_1();
|
private static FhirContext ourCtx = FhirContext.forDstu2_1();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadProvider() {
|
public void testReadProviderString() {
|
||||||
RestfulServer srv = new RestfulServer(ourCtx);
|
RestfulServer srv = new RestfulServer(ourCtx);
|
||||||
srv.setFhirContext(ourCtx);
|
srv.setFhirContext(ourCtx);
|
||||||
srv.setResourceProviders(new ReadProvider());
|
srv.setResourceProviders(new ReadProviderString());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
srv.init();
|
srv.init();
|
||||||
|
@ -36,6 +35,21 @@ public class ServerUsingOldTypesDstu21Test {
|
||||||
assertThat(e.getCause().toString(), StringContains.containsString("ConfigurationException"));
|
assertThat(e.getCause().toString(), StringContains.containsString("ConfigurationException"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadProviderIdDt() {
|
||||||
|
RestfulServer srv = new RestfulServer(ourCtx);
|
||||||
|
srv.setFhirContext(ourCtx);
|
||||||
|
srv.setResourceProviders(new ReadProviderIdDt());
|
||||||
|
|
||||||
|
try {
|
||||||
|
srv.init();
|
||||||
|
fail();
|
||||||
|
} catch (ServletException e) {
|
||||||
|
assertThat(e.getCause().toString(), StringContains.containsString("ConfigurationException"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOperationProvider() {
|
public void testOperationProvider() {
|
||||||
RestfulServer srv = new RestfulServer(ourCtx);
|
RestfulServer srv = new RestfulServer(ourCtx);
|
||||||
|
@ -49,8 +63,8 @@ public class ServerUsingOldTypesDstu21Test {
|
||||||
assertThat(e.getCause().toString(), StringContains.containsString("Incorrect use of type"));
|
assertThat(e.getCause().toString(), StringContains.containsString("Incorrect use of type"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ReadProvider implements IResourceProvider {
|
public static class ReadProviderString implements IResourceProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends IBaseResource> getResourceType() {
|
public Class<? extends IBaseResource> getResourceType() {
|
||||||
|
@ -64,6 +78,20 @@ public class ServerUsingOldTypesDstu21Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ReadProviderIdDt implements IResourceProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends IBaseResource> getResourceType() {
|
||||||
|
return Patient.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Read
|
||||||
|
public Patient opTypeRetOldBundle(@IdParam IdDt theId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static class OperationProvider implements IResourceProvider {
|
public static class OperationProvider implements IResourceProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -71,8 +99,8 @@ public class ServerUsingOldTypesDstu21Test {
|
||||||
return Patient.class;
|
return Patient.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(name="foo")
|
@Operation(name = "foo")
|
||||||
public Patient opTypeRetOldBundle(@OperationParam(name="foo") IntegerDt theId) {
|
public Patient opTypeRetOldBundle(@OperationParam(name = "foo") IntegerDt theId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ import org.hl7.fhir.instance.model.Conformance.TypeRestfulInteraction;
|
||||||
import org.hl7.fhir.instance.model.Conformance.UnknownContentCode;
|
import org.hl7.fhir.instance.model.Conformance.UnknownContentCode;
|
||||||
import org.hl7.fhir.instance.model.Enumerations.ConformanceResourceStatus;
|
import org.hl7.fhir.instance.model.Enumerations.ConformanceResourceStatus;
|
||||||
import org.hl7.fhir.instance.model.Enumerations.ResourceType;
|
import org.hl7.fhir.instance.model.Enumerations.ResourceType;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.OperationDefinition;
|
import org.hl7.fhir.instance.model.OperationDefinition;
|
||||||
import org.hl7.fhir.instance.model.OperationDefinition.OperationDefinitionParameterComponent;
|
import org.hl7.fhir.instance.model.OperationDefinition.OperationDefinitionParameterComponent;
|
||||||
import org.hl7.fhir.instance.model.OperationDefinition.OperationParameterUse;
|
import org.hl7.fhir.instance.model.OperationDefinition.OperationParameterUse;
|
||||||
|
@ -64,8 +65,6 @@ import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
||||||
import ca.uhn.fhir.context.RuntimeSearchParam;
|
import ca.uhn.fhir.context.RuntimeSearchParam;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Initialize;
|
import ca.uhn.fhir.rest.annotation.Initialize;
|
||||||
import ca.uhn.fhir.rest.annotation.Metadata;
|
import ca.uhn.fhir.rest.annotation.Metadata;
|
||||||
|
@ -82,7 +81,6 @@ import ca.uhn.fhir.rest.server.Constants;
|
||||||
import ca.uhn.fhir.rest.server.IServerConformanceProvider;
|
import ca.uhn.fhir.rest.server.IServerConformanceProvider;
|
||||||
import ca.uhn.fhir.rest.server.ResourceBinding;
|
import ca.uhn.fhir.rest.server.ResourceBinding;
|
||||||
import ca.uhn.fhir.rest.server.RestfulServer;
|
import ca.uhn.fhir.rest.server.RestfulServer;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
|
||||||
import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
|
import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -512,7 +510,7 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read(type = OperationDefinition.class)
|
@Read(type = OperationDefinition.class)
|
||||||
public OperationDefinition readOperationDefinition(@IdParam IdDt theId) {
|
public OperationDefinition readOperationDefinition(@IdParam IdType theId) {
|
||||||
if (theId == null || theId.hasIdPart() == false) {
|
if (theId == null || theId.hasIdPart() == false) {
|
||||||
throw new ResourceNotFoundException(theId);
|
throw new ResourceNotFoundException(theId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,12 +27,12 @@ import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.StructureDefinition;
|
import org.hl7.fhir.instance.model.StructureDefinition;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
import ca.uhn.fhir.context.RuntimeResourceDefinition;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Read;
|
import ca.uhn.fhir.rest.annotation.Read;
|
||||||
import ca.uhn.fhir.rest.annotation.Search;
|
import ca.uhn.fhir.rest.annotation.Search;
|
||||||
|
@ -55,7 +55,7 @@ public class ServerProfileProvider implements IResourceProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read()
|
@Read()
|
||||||
public StructureDefinition getProfileById(HttpServletRequest theRequest, @IdParam IdDt theId) {
|
public StructureDefinition getProfileById(HttpServletRequest theRequest, @IdParam IdType theId) {
|
||||||
RuntimeResourceDefinition retVal = myContext.getResourceDefinitionById(theId.getIdPart());
|
RuntimeResourceDefinition retVal = myContext.getResourceDefinitionById(theId.getIdPart());
|
||||||
if (retVal==null) {
|
if (retVal==null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.apache.http.client.methods.HttpPost;
|
||||||
import org.apache.http.client.methods.HttpUriRequest;
|
import org.apache.http.client.methods.HttpUriRequest;
|
||||||
import org.apache.http.message.BasicHeader;
|
import org.apache.http.message.BasicHeader;
|
||||||
import org.apache.http.message.BasicStatusLine;
|
import org.apache.http.message.BasicStatusLine;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.Parameters;
|
import org.hl7.fhir.instance.model.Parameters;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
import org.hl7.fhir.instance.model.StringType;
|
import org.hl7.fhir.instance.model.StringType;
|
||||||
|
@ -31,7 +32,6 @@ import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
import ca.uhn.fhir.rest.annotation.OperationParam;
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
@ -52,7 +52,7 @@ public class OperationClientTest {
|
||||||
|
|
||||||
ourHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
|
ourHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
|
||||||
ourCtx.getRestfulClientFactory().setHttpClient(ourHttpClient);
|
ourCtx.getRestfulClientFactory().setHttpClient(ourHttpClient);
|
||||||
ourCtx.getRestfulClientFactory().setServerValidationModeEnum(ServerValidationModeEnum.NEVER);
|
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
|
||||||
|
|
||||||
ourHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
|
ourHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public class OperationClientTest {
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
Parameters response = client.opInstance(new IdDt("222"), new StringType("PARAM1str"), new Patient().setActive(true));
|
Parameters response = client.opInstance(new IdType("222"), new StringType("PARAM1str"), new Patient().setActive(true));
|
||||||
assertEquals("FOO", response.getParameter().get(0).getName());
|
assertEquals("FOO", response.getParameter().get(0).getName());
|
||||||
HttpPost value = (HttpPost) capt.getAllValues().get(idx);
|
HttpPost value = (HttpPost) capt.getAllValues().get(idx);
|
||||||
String requestBody = IOUtils.toString(((HttpPost) value).getEntity().getContent());
|
String requestBody = IOUtils.toString(((HttpPost) value).getEntity().getContent());
|
||||||
|
@ -273,7 +273,7 @@ public class OperationClientTest {
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
@Operation(name="$OP_INSTANCE", type=Patient.class)
|
@Operation(name="$OP_INSTANCE", type=Patient.class)
|
||||||
public Parameters opInstance(
|
public Parameters opInstance(
|
||||||
@IdParam IdDt theId,
|
@IdParam IdType theId,
|
||||||
@OperationParam(name="PARAM1") StringType theParam1,
|
@OperationParam(name="PARAM1") StringType theParam1,
|
||||||
@OperationParam(name="PARAM2") Patient theParam2
|
@OperationParam(name="PARAM2") Patient theParam2
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.startsWith;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -21,6 +23,7 @@ import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.hl7.fhir.instance.model.Binary;
|
import org.hl7.fhir.instance.model.Binary;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
@ -28,7 +31,6 @@ import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.Create;
|
import ca.uhn.fhir.rest.annotation.Create;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Read;
|
import ca.uhn.fhir.rest.annotation.Read;
|
||||||
|
@ -205,7 +207,7 @@ public class BinaryHl7OrgDstu2Test {
|
||||||
@Create
|
@Create
|
||||||
public MethodOutcome create(@ResourceParam Binary theBinary) {
|
public MethodOutcome create(@ResourceParam Binary theBinary) {
|
||||||
ourLast = theBinary;
|
ourLast = theBinary;
|
||||||
return new MethodOutcome(new IdDt("1"));
|
return new MethodOutcome(new IdType("1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -214,7 +216,7 @@ public class BinaryHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read
|
@Read
|
||||||
public Binary read(@IdParam IdDt theId) {
|
public Binary read(@IdParam IdType theId) {
|
||||||
Binary retVal = new Binary();
|
Binary retVal = new Binary();
|
||||||
retVal.setId("1");
|
retVal.setId("1");
|
||||||
retVal.setContent(new byte[] { 1, 2, 3, 4 });
|
retVal.setContent(new byte[] { 1, 2, 3, 4 });
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -12,6 +13,7 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
@ -35,7 +37,7 @@ public class DeleteConditionalHl7OrgTest {
|
||||||
private static int ourPort;
|
private static int ourPort;
|
||||||
private static final FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
private static final FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
||||||
private static Server ourServer;
|
private static Server ourServer;
|
||||||
private static IdDt ourLastIdParam;
|
private static IdType ourLastIdParam;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,10 +115,10 @@ public class DeleteConditionalHl7OrgTest {
|
||||||
|
|
||||||
|
|
||||||
@Delete()
|
@Delete()
|
||||||
public MethodOutcome updatePatient(@ConditionalUrlParam String theConditional, @IdParam IdDt theIdParam) {
|
public MethodOutcome updatePatient(@ConditionalUrlParam String theConditional, @IdParam IdType theIdParam) {
|
||||||
ourLastConditionalUrl = theConditional;
|
ourLastConditionalUrl = theConditional;
|
||||||
ourLastIdParam = theIdParam;
|
ourLastIdParam = theIdParam;
|
||||||
return new MethodOutcome(new IdDt("Patient/001/_history/002"));
|
return new MethodOutcome(new IdType("Patient/001/_history/002"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -20,6 +21,7 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.Identifier;
|
import org.hl7.fhir.instance.model.Identifier;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
|
@ -28,7 +30,6 @@ import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.InstantDt;
|
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Read;
|
import ca.uhn.fhir.rest.annotation.Read;
|
||||||
|
@ -178,12 +179,12 @@ public class ETagServerHl7OrgTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IdDt ourLastId;
|
private static IdType ourLastId;
|
||||||
|
|
||||||
public static class PatientProvider implements IResourceProvider {
|
public static class PatientProvider implements IResourceProvider {
|
||||||
|
|
||||||
@Read(version = true)
|
@Read(version = true)
|
||||||
public Patient findPatient(@IdParam IdDt theId) {
|
public Patient findPatient(@IdParam IdType theId) {
|
||||||
Patient patient = new Patient();
|
Patient patient = new Patient();
|
||||||
patient.getMeta().setLastUpdated(ourLastModifiedDate);
|
patient.getMeta().setLastUpdated(ourLastModifiedDate);
|
||||||
patient.addIdentifier().setSystem(theId.getIdPart()).setValue(theId.getVersionIdPart());
|
patient.addIdentifier().setSystem(theId.getIdPart()).setValue(theId.getVersionIdPart());
|
||||||
|
@ -192,7 +193,7 @@ public class ETagServerHl7OrgTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
public MethodOutcome updatePatient(@IdParam IdDt theId, @ResourceParam Patient theResource) {
|
public MethodOutcome updatePatient(@IdParam IdType theId, @ResourceParam Patient theResource) {
|
||||||
ourLastId = theId;
|
ourLastId = theId;
|
||||||
|
|
||||||
if ("222".equals(theId.getVersionIdPart())) {
|
if ("222".equals(theId.getVersionIdPart())) {
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.junit.Assert.*;
|
import static org.hamcrest.Matchers.startsWith;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -21,6 +25,7 @@ import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.hl7.fhir.instance.model.Bundle;
|
import org.hl7.fhir.instance.model.Bundle;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.IntegerType;
|
import org.hl7.fhir.instance.model.IntegerType;
|
||||||
import org.hl7.fhir.instance.model.Parameters;
|
import org.hl7.fhir.instance.model.Parameters;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
|
@ -32,7 +37,6 @@ import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
import ca.uhn.fhir.rest.annotation.OperationParam;
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
@ -50,7 +54,7 @@ public class OperationServerHl7OrgTest {
|
||||||
private static Patient ourLastParam2;
|
private static Patient ourLastParam2;
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(OperationServerHl7OrgTest.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(OperationServerHl7OrgTest.class);
|
||||||
private static int ourPort;
|
private static int ourPort;
|
||||||
private static IdDt ourLastId;
|
private static IdType ourLastId;
|
||||||
private static Server ourServer;
|
private static Server ourServer;
|
||||||
private static String ourLastMethod;
|
private static String ourLastMethod;
|
||||||
private static List<StringType> ourLastParam3;
|
private static List<StringType> ourLastParam3;
|
||||||
|
@ -294,7 +298,7 @@ public class OperationServerHl7OrgTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInstanceEverythingHapiClient() throws Exception {
|
public void testInstanceEverythingHapiClient() throws Exception {
|
||||||
Parameters p = ourCtx.newRestfulGenericClient("http://localhost:" + ourPort).operation().onInstance(new IdDt("Patient/123")).named("$everything").withParameters(new Parameters()).execute();
|
Parameters p = ourCtx.newRestfulGenericClient("http://localhost:" + ourPort).operation().onInstance(new IdType("Patient/123")).named("$everything").withParameters(new Parameters()).execute();
|
||||||
Bundle b = (Bundle) p.getParameter().get(0).getResource();
|
Bundle b = (Bundle) p.getParameter().get(0).getResource();
|
||||||
assertNotNull(b);
|
assertNotNull(b);
|
||||||
|
|
||||||
|
@ -416,7 +420,7 @@ public class OperationServerHl7OrgTest {
|
||||||
* Just to make sure this method doesn't "steal" calls
|
* Just to make sure this method doesn't "steal" calls
|
||||||
*/
|
*/
|
||||||
@Read
|
@Read
|
||||||
public Patient read(@IdParam IdDt theId) {
|
public Patient read(@IdParam IdType theId) {
|
||||||
ourLastMethod = "read";
|
ourLastMethod = "read";
|
||||||
Patient retVal = new Patient();
|
Patient retVal = new Patient();
|
||||||
retVal.setId(theId);
|
retVal.setId(theId);
|
||||||
|
@ -424,7 +428,7 @@ public class OperationServerHl7OrgTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(name = "$everything", idempotent=true)
|
@Operation(name = "$everything", idempotent=true)
|
||||||
public Bundle patientEverything(@IdParam IdDt thePatientId) {
|
public Bundle patientEverything(@IdParam IdType thePatientId) {
|
||||||
ourLastMethod = "instance $everything";
|
ourLastMethod = "instance $everything";
|
||||||
ourLastId = thePatientId;
|
ourLastId = thePatientId;
|
||||||
return new Bundle();
|
return new Bundle();
|
||||||
|
@ -482,7 +486,7 @@ public class OperationServerHl7OrgTest {
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
@Operation(name="$OP_INSTANCE")
|
@Operation(name="$OP_INSTANCE")
|
||||||
public Parameters opInstance(
|
public Parameters opInstance(
|
||||||
@IdParam IdDt theId,
|
@IdParam IdType theId,
|
||||||
@OperationParam(name="PARAM1") StringType theParam1,
|
@OperationParam(name="PARAM1") StringType theParam1,
|
||||||
@OperationParam(name="PARAM2") Patient theParam2
|
@OperationParam(name="PARAM2") Patient theParam2
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -15,13 +15,13 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
import org.eclipse.jetty.server.Server;
|
import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.Create;
|
import ca.uhn.fhir.rest.annotation.Create;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.ResourceParam;
|
import ca.uhn.fhir.rest.annotation.ResourceParam;
|
||||||
|
@ -103,13 +103,13 @@ public class PreferHl7OrgDstu2Test {
|
||||||
|
|
||||||
@Create()
|
@Create()
|
||||||
public MethodOutcome createPatient(@ResourceParam Patient thePatient) {
|
public MethodOutcome createPatient(@ResourceParam Patient thePatient) {
|
||||||
MethodOutcome retVal = new MethodOutcome(new IdDt("Patient/001/_history/002"));
|
MethodOutcome retVal = new MethodOutcome(new IdType("Patient/001/_history/002"));
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Update()
|
@Update()
|
||||||
public MethodOutcome updatePatient(@ResourceParam Patient thePatient, @IdParam IdDt theIdParam) {
|
public MethodOutcome updatePatient(@ResourceParam Patient thePatient, @IdParam IdType theIdParam) {
|
||||||
return new MethodOutcome(new IdDt("Patient/001/_history/002"));
|
return new MethodOutcome(new IdType("Patient/001/_history/002"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.*;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.junit.Assert.*;
|
import static org.hamcrest.Matchers.not;
|
||||||
import static org.mockito.Mockito.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -18,18 +23,18 @@ import org.hl7.fhir.instance.model.Conformance.ConformanceRestComponent;
|
||||||
import org.hl7.fhir.instance.model.Conformance.ConformanceRestResourceComponent;
|
import org.hl7.fhir.instance.model.Conformance.ConformanceRestResourceComponent;
|
||||||
import org.hl7.fhir.instance.model.Conformance.SystemRestfulInteraction;
|
import org.hl7.fhir.instance.model.Conformance.SystemRestfulInteraction;
|
||||||
import org.hl7.fhir.instance.model.Conformance.TypeRestfulInteraction;
|
import org.hl7.fhir.instance.model.Conformance.TypeRestfulInteraction;
|
||||||
|
import org.hl7.fhir.instance.model.DateType;
|
||||||
import org.hl7.fhir.instance.model.DiagnosticReport;
|
import org.hl7.fhir.instance.model.DiagnosticReport;
|
||||||
|
import org.hl7.fhir.instance.model.IdType;
|
||||||
import org.hl7.fhir.instance.model.OperationDefinition;
|
import org.hl7.fhir.instance.model.OperationDefinition;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
|
import org.hl7.fhir.instance.model.StringType;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.api.Include;
|
import ca.uhn.fhir.model.api.Include;
|
||||||
import ca.uhn.fhir.model.api.annotation.Description;
|
import ca.uhn.fhir.model.api.annotation.Description;
|
||||||
import ca.uhn.fhir.model.primitive.DateDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.StringDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
|
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Create;
|
import ca.uhn.fhir.rest.annotation.Create;
|
||||||
import ca.uhn.fhir.rest.annotation.Delete;
|
import ca.uhn.fhir.rest.annotation.Delete;
|
||||||
|
@ -49,6 +54,7 @@ import ca.uhn.fhir.rest.method.BaseMethodBinding;
|
||||||
import ca.uhn.fhir.rest.method.SearchMethodBinding;
|
import ca.uhn.fhir.rest.method.SearchMethodBinding;
|
||||||
import ca.uhn.fhir.rest.method.SearchParameter;
|
import ca.uhn.fhir.rest.method.SearchParameter;
|
||||||
import ca.uhn.fhir.rest.param.DateRangeParam;
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
|
import ca.uhn.fhir.rest.param.StringParam;
|
||||||
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
||||||
import ca.uhn.fhir.rest.param.TokenParam;
|
import ca.uhn.fhir.rest.param.TokenParam;
|
||||||
|
|
||||||
|
@ -128,7 +134,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
|
|
||||||
rs.init(createServletConfig());
|
rs.init(createServletConfig());
|
||||||
|
|
||||||
OperationDefinition opDef = sc.readOperationDefinition(new IdDt("OperationDefinition/everything"));
|
OperationDefinition opDef = sc.readOperationDefinition(new IdType("OperationDefinition/everything"));
|
||||||
|
|
||||||
String conf = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(opDef);
|
String conf = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(opDef);
|
||||||
ourLog.info(conf);
|
ourLog.info(conf);
|
||||||
|
@ -263,7 +269,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
Conformance sconf = sc.getServerConformance(createHttpServletRequest());
|
Conformance sconf = sc.getServerConformance(createHttpServletRequest());
|
||||||
assertEquals("OperationDefinition/plain", sconf.getRest().get(0).getOperation().get(0).getDefinition().getReference());
|
assertEquals("OperationDefinition/plain", sconf.getRest().get(0).getOperation().get(0).getDefinition().getReference());
|
||||||
|
|
||||||
OperationDefinition opDef = sc.readOperationDefinition(new IdDt("OperationDefinition/plain"));
|
OperationDefinition opDef = sc.readOperationDefinition(new IdType("OperationDefinition/plain"));
|
||||||
|
|
||||||
String conf = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(opDef);
|
String conf = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(opDef);
|
||||||
ourLog.info(conf);
|
ourLog.info(conf);
|
||||||
|
@ -448,7 +454,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Delete
|
@Delete
|
||||||
public MethodOutcome delete(@IdParam IdDt theId, @ConditionalUrlParam String theConditionalUrl) {
|
public MethodOutcome delete(@IdParam IdType theId, @ConditionalUrlParam String theConditionalUrl) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,7 +464,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
public MethodOutcome update(@IdParam IdDt theId, @ResourceParam Patient thePatient, @ConditionalUrlParam String theConditionalUrl) {
|
public MethodOutcome update(@IdParam IdType theId, @ResourceParam Patient thePatient, @ConditionalUrlParam String theConditionalUrl) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +477,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@History
|
@History
|
||||||
public List<IBaseResource> history(@IdParam IdDt theId) {
|
public List<IBaseResource> history(@IdParam IdType theId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,7 +489,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
public static class MultiOptionalProvider {
|
public static class MultiOptionalProvider {
|
||||||
|
|
||||||
@Search(type = Patient.class)
|
@Search(type = Patient.class)
|
||||||
public Patient findPatient(@Description(shortDefinition = "The patient's identifier") @OptionalParam(name = Patient.SP_IDENTIFIER) TokenParam theIdentifier, @Description(shortDefinition = "The patient's name") @OptionalParam(name = Patient.SP_NAME) StringDt theName) {
|
public Patient findPatient(@Description(shortDefinition = "The patient's identifier") @OptionalParam(name = Patient.SP_IDENTIFIER) TokenParam theIdentifier, @Description(shortDefinition = "The patient's name") @OptionalParam(name = Patient.SP_NAME) StringParam theName) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +503,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Delete
|
@Delete
|
||||||
public MethodOutcome delete(@IdParam IdDt theId) {
|
public MethodOutcome delete(@IdParam IdType theId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +513,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
public MethodOutcome update(@IdParam IdDt theId, @ResourceParam Patient thePatient) {
|
public MethodOutcome update(@IdParam IdType theId, @ResourceParam Patient thePatient) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,9 +522,9 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
public static class PlainProviderWithExtendedOperationOnNoType {
|
public static class PlainProviderWithExtendedOperationOnNoType {
|
||||||
|
|
||||||
@Operation(name = "plain", idempotent = true, returnParameters= {
|
@Operation(name = "plain", idempotent = true, returnParameters= {
|
||||||
@OperationParam(min=1, max=2, name="out1", type=StringDt.class)
|
@OperationParam(min=1, max=2, name="out1", type=StringType.class)
|
||||||
})
|
})
|
||||||
public ca.uhn.fhir.rest.server.IBundleProvider everything(javax.servlet.http.HttpServletRequest theServletRequest, @IdParam ca.uhn.fhir.model.primitive.IdDt theId, @OperationParam(name = "start") DateDt theStart, @OperationParam(name = "end") DateDt theEnd) {
|
public ca.uhn.fhir.rest.server.IBundleProvider everything(javax.servlet.http.HttpServletRequest theServletRequest, @IdParam IdType theId, @OperationParam(name = "start") DateType theStart, @OperationParam(name = "end") DateType theEnd) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,7 +533,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
public static class ProviderWithExtendedOperationReturningBundle implements IResourceProvider {
|
public static class ProviderWithExtendedOperationReturningBundle implements IResourceProvider {
|
||||||
|
|
||||||
@Operation(name = "everything", idempotent = true)
|
@Operation(name = "everything", idempotent = true)
|
||||||
public ca.uhn.fhir.rest.server.IBundleProvider everything(javax.servlet.http.HttpServletRequest theServletRequest, @IdParam ca.uhn.fhir.model.primitive.IdDt theId, @OperationParam(name = "start") DateDt theStart, @OperationParam(name = "end") DateDt theEnd) {
|
public ca.uhn.fhir.rest.server.IBundleProvider everything(javax.servlet.http.HttpServletRequest theServletRequest, @IdParam IdType theId, @OperationParam(name = "start") DateType theStart, @OperationParam(name = "end") DateType theEnd) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,7 +566,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read(version = false)
|
@Read(version = false)
|
||||||
public Patient readPatient(@IdParam IdDt theId) {
|
public Patient readPatient(@IdParam IdType theId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,7 +618,7 @@ public class ServerConformanceProviderHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Read(version = true)
|
@Read(version = true)
|
||||||
public Patient readPatient(@IdParam IdDt theId) {
|
public Patient readPatient(@IdParam IdType theId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,50 +1,56 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
|
||||||
import org.hamcrest.core.StringContains;
|
import org.hamcrest.core.StringContains;
|
||||||
import org.hl7.fhir.instance.model.Patient;
|
import org.hl7.fhir.instance.model.Patient;
|
||||||
|
import org.hl7.fhir.instance.model.StringType;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.primitive.StringDt;
|
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
import ca.uhn.fhir.rest.annotation.OperationParam;
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
|
||||||
public class ServerInvalidDefinitionHl7OrgDstu2Test {
|
public class ServerInvalidDefinitionHl7OrgDstu2Test {
|
||||||
|
|
||||||
private static FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
private static FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOperationReturningOldBundleProvider() {
|
|
||||||
RestfulServer srv = new RestfulServer(ourCtx);
|
|
||||||
srv.setFhirContext(ourCtx);
|
|
||||||
srv.setResourceProviders(new OperationReturningOldBundleProvider());
|
|
||||||
|
|
||||||
try {
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory
|
||||||
srv.init();
|
.getLogger(ServerInvalidDefinitionHl7OrgDstu2Test.class);
|
||||||
fail();
|
|
||||||
} catch (ServletException e) {
|
|
||||||
assertThat(e.getCause().toString(), StringContains.containsString("ConfigurationException"));
|
|
||||||
assertThat(e.getCause().toString(), StringContains.containsString("Can not return a DSTU1 bundle"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class OperationReturningOldBundleProvider implements IResourceProvider {
|
@Test
|
||||||
|
public void testOperationReturningOldBundleProvider() {
|
||||||
|
RestfulServer srv = new RestfulServer(ourCtx);
|
||||||
|
srv.setFhirContext(ourCtx);
|
||||||
|
srv.setResourceProviders(new OperationReturningOldBundleProvider());
|
||||||
|
|
||||||
@Override
|
try {
|
||||||
public Class<? extends IBaseResource> getResourceType() {
|
srv.init();
|
||||||
return Patient.class;
|
fail();
|
||||||
}
|
} catch (ServletException e) {
|
||||||
|
ourLog.info(e.getCause().toString());
|
||||||
|
assertThat(e.getCause().toString(), StringContains.containsString("ConfigurationException"));
|
||||||
|
assertThat(e.getCause().toString(), StringContains.containsString("Can not return a DSTU1 bundle"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(name = "$OP_TYPE_RET_OLD_BUNDLE")
|
public static class OperationReturningOldBundleProvider implements IResourceProvider {
|
||||||
public ca.uhn.fhir.model.api.Bundle opTypeRetOldBundle(@OperationParam(name = "PARAM1") StringDt theParam1, @OperationParam(name = "PARAM2") Patient theParam2) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public Class<? extends IBaseResource> getResourceType() {
|
||||||
|
return Patient.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(name = "$OP_TYPE_RET_OLD_BUNDLE")
|
||||||
|
public ca.uhn.fhir.model.api.Bundle opTypeRetOldBundle(@OperationParam(name = "PARAM1") StringType theParam1,
|
||||||
|
@OperationParam(name = "PARAM2") Patient theParam2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package ca.uhn.fhir.rest.server;
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -27,7 +29,6 @@ import org.junit.Test;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.StringDt;
|
import ca.uhn.fhir.model.primitive.StringDt;
|
||||||
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
|
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
|
@ -49,7 +50,7 @@ public class UpdateConditionalHl7OrgDstu2Test {
|
||||||
private static FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
private static FhirContext ourCtx = FhirContext.forDstu2Hl7Org();
|
||||||
private static Server ourServer;
|
private static Server ourServer;
|
||||||
private static String ourLastId;
|
private static String ourLastId;
|
||||||
private static IdDt ourLastIdParam;
|
private static IdType ourLastIdParam;
|
||||||
private static boolean ourLastRequestWasSearch;
|
private static boolean ourLastRequestWasSearch;
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,11 +180,11 @@ public class UpdateConditionalHl7OrgDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Update()
|
@Update()
|
||||||
public MethodOutcome updatePatient(@ResourceParam Patient thePatient, @ConditionalUrlParam String theConditional, @IdParam IdDt theIdParam) {
|
public MethodOutcome updatePatient(@ResourceParam Patient thePatient, @ConditionalUrlParam String theConditional, @IdParam IdType theIdParam) {
|
||||||
ourLastConditionalUrl = theConditional;
|
ourLastConditionalUrl = theConditional;
|
||||||
ourLastId = thePatient.getId();
|
ourLastId = thePatient.getId();
|
||||||
ourLastIdParam = theIdParam;
|
ourLastIdParam = theIdParam;
|
||||||
return new MethodOutcome(new IdDt("Patient/001/_history/002"));
|
return new MethodOutcome(new IdType("Patient/001/_history/002"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,6 @@ cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl
|
||||||
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/INarrativeGenerator.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/INarrativeGenerator.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
||||||
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/EOperationOutcome.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/EOperationOutcome.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
||||||
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/FHIRPathEngine.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/FHIRPathEngine.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
||||||
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/utils/ProfileUtilities.java hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/utils/
|
|
||||||
|
|
||||||
# Validation
|
# Validation
|
||||||
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/validation/* hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/validation/
|
cp $FHIRTRUNK/build/implementations/java/org.hl7.fhir.$PACKAGEVERSION/src/org/hl7/fhir/$PACKAGEVERSION/validation/* hapi-fhir-structures-$PROJVERSION/src/main/java/org/hl7/fhir/$PACKAGEVERSION/validation/
|
||||||
|
|
Loading…
Reference in New Issue