Version bump to 2.0-SNAPSHOT

This commit is contained in:
James Agnew 2016-07-12 11:12:07 -04:00
parent 040c098742
commit c3e9f618eb
55 changed files with 845 additions and 274 deletions

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -18,32 +18,32 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jaxrsserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@ -54,7 +54,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jaxrsserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -30,7 +30,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<!--
<exclusion>
@ -51,19 +51,19 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
<dependency>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</parent>
<packaging>jar</packaging>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -34,7 +34,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>
@ -49,7 +49,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>
@ -60,7 +60,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -52,7 +52,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>
@ -67,7 +67,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>
@ -78,7 +78,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>woodstox-core-asl</artifactId>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -40,7 +40,7 @@ public enum FhirVersionEnum {
DSTU2_HL7ORG("org.hl7.fhir.instance.FhirDstu2Hl7Org", DSTU2, true, "1.0.2"),
DSTU3("org.hl7.fhir.dstu3.hapi.ctx.FhirDstu3", null, true, "1.4.0");
DSTU3("org.hl7.fhir.dstu3.hapi.ctx.FhirDstu3", null, true, "1.5.0");
private final FhirVersionEnum myEquivalent;
private final String myFhirVersionString;

View File

@ -712,11 +712,7 @@ class ParserState<T> {
} else if ("deleted-entry".equals(theLocalPart) && verifyNamespace(XmlParser.TOMBSTONES_NS, theNamespaceUri)) {
push(new AtomDeletedEntryState(myInstance, myResourceType));
} else {
if (theNamespaceUri != null) {
throw new DataFormatException("Unexpected element: {" + theNamespaceUri + "}" + theLocalPart);
} else {
throw new DataFormatException("Unexpected element: " + theLocalPart);
}
logAndSwallowUnexpectedElement(theLocalPart);
}
// TODO: handle category and DSig

View File

@ -3,6 +3,7 @@ package ca.uhn.fhir.rest.gclient;
import static org.apache.commons.lang3.StringUtils.defaultString;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import ca.uhn.fhir.model.base.composite.BaseIdentifierDt;
@ -75,6 +76,11 @@ public class TokenClientParam extends BaseClientParam implements IParam {
public ICriterion<TokenClientParam> systemAndIdentifier(String theSystem, String theCode) {
return new TokenCriterion(getParamName(), defaultString(theSystem), theCode);
}
@Override
public ICriterion<?> systemAndValues(String theSystem, Collection<String> theValues) {
return new TokenCriterion(getParamName(), defaultString(theSystem), theValues);
}
};
}
@ -92,7 +98,7 @@ public class TokenClientParam extends BaseClientParam implements IParam {
* </p>
*/
public ICriterion<TokenClientParam> hasSystemWithAnyCode(String theSystem) {
return new TokenCriterion(getParamName(), theSystem, null);
return new TokenCriterion(getParamName(), theSystem, (String)null);
}
public interface IMatches {
@ -154,6 +160,15 @@ public class TokenClientParam extends BaseClientParam implements IParam {
*/
ICriterion<TokenClientParam> systemAndCode(String theSystem, String theCode);
/**
* Creates a search criterion that matches a given system with a collection of possible
* values (this will be used to form a comma-separated OR query)
*
* @param theSystem The system, which will be used with each value
* @param theValues The values
*/
public ICriterion<?> systemAndValues(String theSystem, Collection<String> theValues);
/**
* Creates a search criterion that matches against the given system and identifier
*

View File

@ -1,5 +1,9 @@
package ca.uhn.fhir.rest.gclient;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import java.util.Collection;
/*
* #%L
* HAPI FHIR - Core Library
@ -67,6 +71,20 @@ class TokenCriterion implements ICriterion<TokenClientParam>, ICriterionInternal
myValue = b.toString();
}
public TokenCriterion(String theParamName, String theSystem, Collection<String> theValues) {
myName = theParamName;
StringBuilder b = new StringBuilder();
for (String next : theValues) {
if (isNotBlank(next)) {
if (b.length() > 0) {
b.append(',');
}
b.append(toValue(theSystem, next));
}
}
myValue = b.toString();
}
@Override
public String getParameterValue(FhirContext theContext) {
return myValue;

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -21,57 +21,57 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli-jpaserver</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli-jpaserver</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>jar</type>
<classifier>classes</classifier>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<classifier>classes</classifier>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -21,7 +21,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
@ -29,33 +29,33 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- This dependency includes the JPA server itself, which is packaged separately from the rest of HAPI FHIR -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- This dependency is used for the "FHIR Tester" web app overlay -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -19,42 +19,42 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -18,49 +18,49 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-cli-app</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<!-- Don't include in standard distribution -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-android</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<!-- Don't include in standard distribution -->
<scope>provided</scope>
</dependency>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -19,42 +19,42 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -18,7 +18,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
@ -38,12 +38,12 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -31,7 +31,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jaxrsserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -36,7 +36,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
@ -47,32 +47,32 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
@ -370,7 +370,7 @@
<plugin>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-tinder-plugin</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<executions>
<execution>
<id>build_dstu1</id>
@ -422,22 +422,22 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>

View File

@ -97,13 +97,10 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
@Autowired
private DaoConfig myDaoConfig;
@Autowired
protected PlatformTransactionManager myPlatformTransactionManager;
@Autowired
private IResourceHistoryTableDao myResourceHistoryTableDao;
@Autowired()
protected IResourceIndexedSearchParamUriDao myResourceIndexedSearchParamUriDao;
private String myResourceName;
@ -112,9 +109,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
protected IFulltextSearchSvc mySearchDao;
@Autowired()
protected ISearchResultDao mySearchResultDao;
private String mySecondaryPrimaryKeyParamName;
@Autowired()
protected IHapiTerminologySvc myTerminologySvc;
@ -147,11 +142,21 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
ourLog.info("Processed addTag {}/{} on {} in {}ms", new Object[] { theScheme, theTerm, theId, w.getMillisAndRestart() });
}
@Override
public DaoMethodOutcome create(final T theResource) {
return create(theResource, null, true, null);
}
@Override
public DaoMethodOutcome create(final T theResource, RequestDetails theRequestDetails) {
return create(theResource, null, true, theRequestDetails);
}
@Override
public DaoMethodOutcome create(final T theResource, String theIfNoneExist) {
return create(theResource, theIfNoneExist, null);
}
@Override
public DaoMethodOutcome create(T theResource, String theIfNoneExist, boolean thePerformIndexing, RequestDetails theRequestDetails) {
if (isNotBlank(theResource.getIdElement().getIdPart())) {
@ -201,7 +206,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, getContext(), theId.getResourceType(), theId);
notifyInterceptors(RestOperationTypeEnum.DELETE, requestDetails);
}
Date updateTime = new Date();
ResourceTable savedEntity = updateEntity(null, entity, updateTime, updateTime);
@ -216,10 +221,15 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
}
}
}
return savedEntity;
}
@Override
public DaoMethodOutcome delete(IIdType theId) {
return delete(theId, null);
}
@Override
public DaoMethodOutcome delete(IIdType theId, RequestDetails theRequestDetails) {
List<DeleteConflict> deleteConflicts = new ArrayList<DeleteConflict>();
@ -332,7 +342,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, getContext(), theResource);
notifyInterceptors(RestOperationTypeEnum.CREATE, requestDetails);
}
// Perform actual DB update
updateEntity(theResource, entity, null, thePerformIndexing, true, theUpdateTime);
theResource.setId(entity.getIdDt());
@ -347,7 +357,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
}
}
}
DaoMethodOutcome outcome = toMethodOutcome(entity, theResource).setCreated(true);
String msg = getContext().getLocalizer().getMessage(BaseHapiFhirResourceDao.class, "successfulCreate", outcome.getId(), w.getMillisAndRestart());
@ -473,6 +483,36 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
return retVal;
}
@Override
public <MT extends IBaseMetaType> MT metaAddOperation(IIdType theResourceId, MT theMetaAdd, RequestDetails theRequestDetails) {
// Notify interceptors
ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, getResourceName(), theResourceId);
notifyInterceptors(RestOperationTypeEnum.META_ADD, requestDetails);
StopWatch w = new StopWatch();
BaseHasResource entity = readEntity(theResourceId);
if (entity == null) {
throw new ResourceNotFoundException(theResourceId);
}
ResourceTable latestVersion = readEntityLatestVersion(theResourceId);
if (latestVersion.getVersion() != entity.getVersion()) {
doMetaAdd(theMetaAdd, entity);
} else {
doMetaAdd(theMetaAdd, latestVersion);
// Also update history entry
ResourceHistoryTable history = myResourceHistoryTableDao.findForIdAndVersion(entity.getId(), entity.getVersion());
doMetaAdd(theMetaAdd, history);
}
ourLog.info("Processed metaAddOperation on {} in {}ms", new Object[] { theResourceId, w.getMillisAndRestart() });
@SuppressWarnings("unchecked")
MT retVal = (MT) metaGetOperation(theMetaAdd.getClass(), theResourceId, theRequestDetails);
return retVal;
}
// @Override
// public IBundleProvider everything(IIdType theId) {
// Search search = new Search();
@ -555,36 +595,6 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
// };
// }
@Override
public <MT extends IBaseMetaType> MT metaAddOperation(IIdType theResourceId, MT theMetaAdd, RequestDetails theRequestDetails) {
// Notify interceptors
ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, getResourceName(), theResourceId);
notifyInterceptors(RestOperationTypeEnum.META_ADD, requestDetails);
StopWatch w = new StopWatch();
BaseHasResource entity = readEntity(theResourceId);
if (entity == null) {
throw new ResourceNotFoundException(theResourceId);
}
ResourceTable latestVersion = readEntityLatestVersion(theResourceId);
if (latestVersion.getVersion() != entity.getVersion()) {
doMetaAdd(theMetaAdd, entity);
} else {
doMetaAdd(theMetaAdd, latestVersion);
// Also update history entry
ResourceHistoryTable history = myResourceHistoryTableDao.findForIdAndVersion(entity.getId(), entity.getVersion());
doMetaAdd(theMetaAdd, history);
}
ourLog.info("Processed metaAddOperation on {} in {}ms", new Object[] { theResourceId, w.getMillisAndRestart() });
@SuppressWarnings("unchecked")
MT retVal = (MT) metaGetOperation(theMetaAdd.getClass(), theResourceId, theRequestDetails);
return retVal;
}
@Override
public <MT extends IBaseMetaType> MT metaDeleteOperation(IIdType theResourceId, MT theMetaDel, RequestDetails theRequestDetails) {
// Notify interceptors
@ -710,6 +720,11 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
return processMatchUrl(theMatchUrl, getResourceType());
}
@Override
public T read(IIdType theId) {
return read(theId, null);
}
@Override
public T read(IIdType theId, RequestDetails theRequestDetails) {
validateResourceTypeAndThrowIllegalArgumentException(theId);
@ -720,7 +735,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
RestOperationTypeEnum operationType = theId.hasVersionIdPart() ? RestOperationTypeEnum.VREAD : RestOperationTypeEnum.READ;
notifyInterceptors(operationType, requestDetails);
}
StopWatch w = new StopWatch();
BaseHasResource entity = readEntity(theId);
validateResourceType(entity);
@ -970,6 +985,11 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
return retVal;
}
@Override
public DaoMethodOutcome update(T theResource) {
return update(theResource, null, null);
}
@Override
public DaoMethodOutcome update(T theResource, RequestDetails theRequestDetails) {
return update(theResource, null, theRequestDetails);
@ -1023,17 +1043,22 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
}
// Notify interceptors
ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, theResource, getResourceName(), resourceId);
notifyInterceptors(RestOperationTypeEnum.UPDATE, requestDetails);
ActionRequestDetails requestDetails = null;
if (theRequestDetails != null) {
requestDetails = new ActionRequestDetails(theRequestDetails, theResource, getResourceName(), resourceId);
notifyInterceptors(RestOperationTypeEnum.UPDATE, requestDetails);
}
// Perform update
ResourceTable savedEntity = updateEntity(theResource, entity, null, thePerformIndexing, true, new Date());
// Notify interceptors
theRequestDetails.getRequestOperationCallback().resourceUpdated(theResource);
for (IServerInterceptor next : getConfig().getInterceptors()) {
if (next instanceof IJpaServerInterceptor) {
((IJpaServerInterceptor) next).resourceUpdated(requestDetails, entity);
if (theRequestDetails != null) {
theRequestDetails.getRequestOperationCallback().resourceUpdated(theResource);
for (IServerInterceptor next : getConfig().getInterceptors()) {
if (next instanceof IJpaServerInterceptor) {
((IJpaServerInterceptor) next).resourceUpdated(requestDetails, entity);
}
}
}
@ -1046,6 +1071,11 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
return outcome;
}
@Override
public DaoMethodOutcome update(T theResource, String theMatchUrl) {
return update(theResource, theMatchUrl, null);
}
@Override
public DaoMethodOutcome update(T theResource, String theMatchUrl, RequestDetails theRequestDetails) {
return update(theResource, theMatchUrl, true, theRequestDetails);

View File

@ -46,9 +46,19 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
void addTag(IIdType theId, TagTypeEnum theTagType, String theScheme, String theTerm, String theLabel);
/**
* Create a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
DaoMethodOutcome create(T theResource);
DaoMethodOutcome create(T theResource, RequestDetails theRequestDetails);
DaoMethodOutcome create(T theResource, String theIfNoneExist, RequestDetails theRequestDetails);
/**
* Create a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
DaoMethodOutcome create(T theResource, String theIfNoneExist);
/**
* @param thePerformIndexing
@ -58,11 +68,13 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
*/
DaoMethodOutcome create(T theResource, String theIfNoneExist, boolean thePerformIndexing, RequestDetails theRequestDetails);
DaoMethodOutcome create(T theResource, String theIfNoneExist, RequestDetails theRequestDetails);
/**
* This method throws an exception if there are delete conflicts
* @param theRequestDetails TODO
* Delete a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
DaoMethodOutcome delete(IIdType theResource, RequestDetails theRequestDetails);
DaoMethodOutcome delete(IIdType theResource);
/**
* This method does not throw an exception if there are delete conflicts, but populates them
@ -73,18 +85,20 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
/**
* This method throws an exception if there are delete conflicts
* @param theRequestDetails TODO
*/
DaoMethodOutcome deleteByUrl(String theString, RequestDetails theRequestDetails);
DaoMethodOutcome delete(IIdType theResource, RequestDetails theRequestDetails);
/**
* This method does not throw an exception if there are delete conflicts, but populates them
* in the provided list
* @param theRequestDetails TODO
* @return
*/
List<ResourceTable> deleteByUrl(String theUrl, List<DeleteConflict> theDeleteConflictsListToPopulate, RequestDetails theRequestDetails);
/**
* This method throws an exception if there are delete conflicts
*/
DaoMethodOutcome deleteByUrl(String theString, RequestDetails theRequestDetails);
TagList getAllResourceTags(RequestDetails theRequestDetails);
Class<T> getResourceType();
@ -111,16 +125,22 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
* Not supported in DSTU1!
* @param theRequestDetails TODO
*/
<MT extends IBaseMetaType> MT metaGetOperation(Class<MT> theType, RequestDetails theRequestDetails);
<MT extends IBaseMetaType> MT metaGetOperation(Class<MT> theType, IIdType theId, RequestDetails theRequestDetails);
/**
* Not supported in DSTU1!
* @param theRequestDetails TODO
*/
<MT extends IBaseMetaType> MT metaGetOperation(Class<MT> theType, IIdType theId, RequestDetails theRequestDetails);
<MT extends IBaseMetaType> MT metaGetOperation(Class<MT> theType, RequestDetails theRequestDetails);
Set<Long> processMatchUrl(String theMatchUrl);
/**
* Read a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
T read(IIdType theId);
/**
*
* @param theId
@ -160,9 +180,19 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
Set<Long> searchForIdsWithAndOr(SearchParameterMap theParams);
/**
* Update a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
DaoMethodOutcome update(T theResource);
DaoMethodOutcome update(T theResource, RequestDetails theRequestDetails);
DaoMethodOutcome update(T theResource, String theMatchUrl, RequestDetails theRequestDetails);
/**
* Update a resource - Note that this variant of the method does not take in a {@link RequestDetails} and
* therefore can not fire any interceptors. Use only for internal system calls
*/
DaoMethodOutcome update(T theResource, String theMatchUrl);
/**
* @param thePerformIndexing
@ -172,6 +202,8 @@ public interface IFhirResourceDao<T extends IBaseResource> extends IDao {
*/
DaoMethodOutcome update(T theResource, String theMatchUrl, boolean thePerformIndexing, RequestDetails theRequestDetails);
DaoMethodOutcome update(T theResource, String theMatchUrl, RequestDetails theRequestDetails);
/**
* Not supported in DSTU1!
* @param theRequestDetails TODO

View File

@ -270,7 +270,7 @@ public class SubscriptionWebsocketHandlerDstu2 extends TextWebSocketHandler impl
}
}
IIdType id = mySubscriptionDao.create(subscription, null).getId();
IIdType id = mySubscriptionDao.create(subscription).getId();
mySubscriptionPid = mySubscriptionDao.getSubscriptionTablePidForSubscriptionResource(id);
mySubscriptionId = subscription.getIdElement();

View File

@ -270,7 +270,7 @@ public class SubscriptionWebsocketHandlerDstu3 extends TextWebSocketHandler impl
}
}
IIdType id = mySubscriptionDao.create(subscription, null).getId();
IIdType id = mySubscriptionDao.create(subscription).getId();
mySubscriptionPid = mySubscriptionDao.getSubscriptionTablePidForSubscriptionResource(id);
mySubscriptionId = subscription.getIdElement();

View File

@ -43,6 +43,7 @@ import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
import ca.uhn.fhir.rest.param.StringParam;
import ca.uhn.fhir.rest.server.IBundleProvider;
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
@ -151,6 +152,46 @@ public class FhirResourceDaoDstu3UpdateTest extends BaseJpaDstu3Test {
}
@Test
public void testCreateAndUpdateWithoutRequest() throws Exception {
String methodName = "testUpdateByUrl";
Patient p = new Patient();
p.addIdentifier().setSystem("urn:system").setValue(methodName + "2");
IIdType id = myPatientDao.create(p).getId().toUnqualified();
p = new Patient();
p.addIdentifier().setSystem("urn:system").setValue(methodName + "2");
IIdType id2 = myPatientDao.create(p, "Patient?identifier=urn:system|" + methodName + "2").getId().toUnqualified();
assertEquals(id.getValue(), id2.getValue());
p = new Patient();
p.setId(id);
p.addIdentifier().setSystem("urn:system").setValue(methodName + "2");
myPatientDao.update(p).getId();
id2 = myPatientDao.update(p, "Patient?identifier=urn:system|" + methodName + "2").getId().toUnqualified();
assertEquals(id.getIdPart(), id2.getIdPart());
assertEquals("3", id2.getVersionIdPart());
Patient newPatient = myPatientDao.read(id);
assertEquals("1", newPatient.getIdElement().getVersionIdPart());
newPatient = myPatientDao.read(id.toVersionless());
assertEquals("3", newPatient.getIdElement().getVersionIdPart());
myPatientDao.delete(id.toVersionless());
try {
myPatientDao.read(id.toVersionless());
fail();
} catch (ResourceGoneException e) {
// nothing
}
}
@Test
public void testUpdateConditionalByLastUpdated() throws Exception {
String methodName = "testUpdateByUrl";

View File

@ -173,6 +173,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
for (int i = 0; i < 10; i++) {
Thread.sleep(100);
preDates.add(new Date());
Thread.sleep(100);
patient.setId(id);
patient.getName().get(0).getFamily().get(0).setValue(methodName + "_i");
ids.add(myPatientDao.update(patient, mySrd).getId().toUnqualified().getValue());

View File

@ -6,7 +6,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -31,40 +31,40 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- At least one "structures" JAR must also be included -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- This dependency includes the JPA server itself, which is packaged separately from the rest of HAPI FHIR -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- This dependency is used for the "FHIR Tester" web app overlay -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -18,34 +18,34 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>
@ -178,7 +178,6 @@
<webApp>
<contextPath>/</contextPath>
<allowDuplicateFragmentNames>true</allowDuplicateFragmentNames>
</webApp>
</configuration>
</plugin>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -19,37 +19,37 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -17,7 +17,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!--
@ -170,7 +170,7 @@
<plugin>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-tinder-plugin</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<executions>
<execution>
<goals>

View File

@ -1,7 +1,16 @@
package ca.uhn.fhir.parser;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.stringContainsInOrder;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStreamReader;
@ -36,7 +45,6 @@ import ca.uhn.fhir.model.api.ExtensionDt;
import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
import ca.uhn.fhir.model.api.TagList;
import ca.uhn.fhir.model.base.composite.BaseNarrativeDt;
import ca.uhn.fhir.model.dstu.composite.AddressDt;
import ca.uhn.fhir.model.dstu.composite.AttachmentDt;
import ca.uhn.fhir.model.dstu.composite.CodeableConceptDt;
@ -96,6 +104,13 @@ public class XmlParserTest {
// comp.
}
@Test
public void testUnknownElementInDstu1() throws Exception {
String input = IOUtils.toString(getClass().getResourceAsStream("/old_07_feed.xml"));
Bundle b = ourCtx.newXmlParser().parseBundle(input);
assertEquals(1, b.getEntries().size());
}
@Test
public void testEncodeAndParseIdref() {

View File

@ -0,0 +1,53 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<title/>
<id>8fe17597-ca91-4dfe-8356-f7381983d954</id>
<link rel="self"
href="http://uhnvesb01d.uhn.on.ca:25180/uhn-fhir-service/DiagnosticReport?date=%3E%3D2016-06-07&amp;subject.identifier=urn%3Aoid%3A2.16.840.1.113883.3.239.18.148%7C7007521&amp;_include=DiagnosticReport.result"/>
<link rel="fhir-base" href="http://uhnvesb01d.uhn.on.ca:25180/uhn-fhir-service"/>
<os:totalResults xmlns:os="http://a9.com/-/spec/opensearch/1.1/">120</os:totalResults>
<published>2016-07-07T10:12:45.989-04:00</published>
<author>
<name>HAPI FHIR Server</name>
</author>
<entry>
<title>Consultation Note - final - 9 observations</title>
<id>http://uhnvesb01d.uhn.on.ca:25180/uhn-fhir-service/DiagnosticReport/7708192</id>
<updated>2016-06-24T11:29:06.000-04:00</updated>
<published>2016-06-24T11:29:06.000-04:00</published>
<category term="http://fhir.connectinggta.ca/Profile/diagnosticreport" label="" scheme="http://hl7.org/fhir/tag/profile"/>
<link rel="self" href="http://uhnvesb01d.uhn.on.ca:25180/uhn-fhir-service/DiagnosticReport/7708192"/>
<content type="text/xml">
<DiagnosticReport xmlns="http://hl7.org/fhir">
<extension url="http://fhir.connectinggta.ca/Profile/diagnosticreport#encounter">
<valueResource>
<reference value="Encounter/6090413"/>
</valueResource>
</extension>
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<div class="hapiHeaderText">
Consultation Note
</div>
</div>
</text>
<name>
<coding>
<system value="urn:oid:1.3.6.1.4.1.12201.102.5"/>
<code value="4644"/>
</coding>
<text value="Consultation Note"/>
</name>
<status value="final"/>
<issued value="2016-06-24T11:29:06"/>
<subject>
<reference value="Patient/5743703"/>
</subject>
<identifier>
<value value="GI93#eNotes_LUNG_50520"/>
</identifier>
<diagnosticDateTime value="2016-06-24T11:28:00"/>
</DiagnosticReport>
</content>
</entry>
</feed>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -17,13 +17,13 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
@ -179,7 +179,7 @@
<plugin>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-tinder-plugin</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<executions>
<execution>
<id>generate</id>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -18,12 +18,12 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

View File

@ -24,11 +24,13 @@ import org.hamcrest.Matchers;
import org.hamcrest.core.StringContains;
import org.hl7.fhir.dstu3.model.Address.AddressUse;
import org.hl7.fhir.dstu3.model.Address.AddressUseEnumFactory;
import org.hl7.fhir.dstu3.model.Attachment;
import org.hl7.fhir.dstu3.model.Binary;
import org.hl7.fhir.dstu3.model.Bundle;
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
import org.hl7.fhir.dstu3.model.Bundle.BundleType;
import org.hl7.fhir.dstu3.model.Coding;
import org.hl7.fhir.dstu3.model.Communication;
import org.hl7.fhir.dstu3.model.Condition;
import org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus;
import org.hl7.fhir.dstu3.model.Conformance;
@ -1031,6 +1033,7 @@ public class JsonParserDstu3Test {
assertThat(ourCtx.newJsonParser().setOmitResourceId(true).encodeResourceToString(p), not(containsString("123")));
}
@Test
@Ignore
public void testParseAndEncodeBundle() throws Exception {
@ -1234,6 +1237,21 @@ public class JsonParserDstu3Test {
assertThat(encoded, not(containsString("\"id\":\"180f219f-97a8-486d-99d9-ed631fe4fc57\"")));
}
/**
* See #399
*/
@Test
public void testParseCommunicationWithThreeTypes() throws IOException {
String content = IOUtils.toString(JsonParserDstu3Test.class.getResourceAsStream("/tara-test.json"));
Communication comm = ourCtx.newJsonParser().parseResource(Communication.class, content);
assertEquals(3, comm.getPayload().size());
assertEquals(Attachment.class, comm.getPayload().get(0).getContent().getClass());
assertEquals(Reference.class, comm.getPayload().get(1).getContent().getClass());
assertEquals(String.class, comm.getPayload().get(2).getContent().getClass());
}
@Test
public void testParseAndEncodeComments() throws IOException {
//@formatter:off

View File

@ -47,6 +47,7 @@ import org.hl7.fhir.dstu3.model.Bundle.BundleType;
import org.hl7.fhir.dstu3.model.CodeType;
import org.hl7.fhir.dstu3.model.CodeableConcept;
import org.hl7.fhir.dstu3.model.Coding;
import org.hl7.fhir.dstu3.model.Communication;
import org.hl7.fhir.dstu3.model.Composition;
import org.hl7.fhir.dstu3.model.ConceptMap;
import org.hl7.fhir.dstu3.model.Condition;
@ -151,7 +152,6 @@ public class XmlParserDstu3Test {
}
@Test
public void testContainedResourceInExtensionUndeclared() {
Patient p = new Patient();
@ -174,7 +174,6 @@ public class XmlParserDstu3Test {
assertEquals("ORG", o.getName());
}
@Test
public void testDuration() {
Encounter enc = new Encounter();
@ -1005,13 +1004,13 @@ public class XmlParserDstu3Test {
*/
@Test
public void testEncodeDivWithPreNonPrettyPrint() {
Patient p = new Patient();
p.getText().setDivAsString("<div>\n\n<p>A P TAG</p><p><pre>line1\nline2\nline3 <b>BOLD</b></pre></p></div>");
String output = ourCtx.newXmlParser().setPrettyPrint(false).encodeResourceToString(p);
ourLog.info(output);
//@formatter:off
assertThat(output, stringContainsInOrder(
"<text><div",
@ -1019,18 +1018,18 @@ public class XmlParserDstu3Test {
"<pre>line1\nline2\nline3 <b>BOLD</b></pre>"
));
//@formatter:on
}
@Test
public void testEncodeDivWithPrePrettyPrint() {
Patient p = new Patient();
p.getText().setDivAsString("<div>\n\n<p>A P TAG</p><p><pre>line1\nline2\nline3 <b>BOLD</b></pre></p></div>");
String output = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(p);
ourLog.info(output);
//@formatter:off
assertThat(output, stringContainsInOrder(
" <text>",
@ -1038,7 +1037,7 @@ public class XmlParserDstu3Test {
" <pre>line1\nline2\nline3 <b>BOLD</b></pre>"
));
//@formatter:on
}
@Test
@ -1046,7 +1045,7 @@ public class XmlParserDstu3Test {
Patient p = new Patient();
p.setId(new IdType("urn:uuid:42795ed8-041f-4ebf-b6f4-78ef6f64c2f2"));
p.addIdentifier().setSystem("ACME");
String actual = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(p);
assertThat(actual, not(containsString("78ef6f64c2f2")));
}
@ -1065,10 +1064,10 @@ public class XmlParserDstu3Test {
ArrayList<Coding> tagList = new ArrayList<Coding>();
tagList.add(new Coding());
tagList.add(new Coding().setDisplay("Label"));
Patient p = new Patient();
p.getMeta().getTag().addAll(tagList);
String encoded = ourCtx.newXmlParser().encodeResourceToString(p);
assertThat(encoded, not(containsString("tag")));
}
@ -1084,7 +1083,7 @@ public class XmlParserDstu3Test {
Patient p = new Patient();
p.getMeta().getTag().addAll(tagList);
String encoded = ourCtx.newXmlParser().encodeResourceToString(p);
assertThat(encoded, containsString("tag"));
assertThat(encoded, containsString("scheme"));
@ -1098,11 +1097,11 @@ public class XmlParserDstu3Test {
obs.getMeta().addProfile("http://profile");
Extension ext = obs.addExtension();
ext.setUrl("http://exturl").setValue(new StringType("ext_url_value"));
obs.getCode().setText("CODE");
IParser parser = ourCtx.newXmlParser();
String output = parser.setPrettyPrint(true).encodeResourceToString(obs);
ourLog.info(output);
@ -1402,23 +1401,23 @@ public class XmlParserDstu3Test {
FooMessageHeader.FooMessageSourceComponent source = new FooMessageHeader.FooMessageSourceComponent();
source.getMessageHeaderApplicationId().setValue("APPID");
source.setName("NAME");
FooMessageHeader header = new FooMessageHeader();
header.setSource(source);
header.addDestination().setName("DEST");
Bundle bundle = new Bundle();
bundle.addEntry().setResource(header);
IParser p = ourCtx.newXmlParser();
p.setPrettyPrint(true);
String encode = p.encodeResourceToString(bundle);
ourLog.info(encode);
assertThat(encode, containsString("<value value=\"APPID\"/>"));
assertThat(encode, stringContainsInOrder("<source", "<dest"));
IParser p = ourCtx.newXmlParser();
p.setPrettyPrint(true);
String encode = p.encodeResourceToString(bundle);
ourLog.info(encode);
assertThat(encode, containsString("<value value=\"APPID\"/>"));
assertThat(encode, stringContainsInOrder("<source", "<dest"));
}
@Test
@ -1426,23 +1425,23 @@ public class XmlParserDstu3Test {
FooMessageSourceComponent source = new FooMessageHeaderWithExplicitField.FooMessageSourceComponent();
source.getMessageHeaderApplicationId().setValue("APPID");
source.setName("NAME");
FooMessageHeaderWithExplicitField header = new FooMessageHeaderWithExplicitField();
header.setSourceNew(source);
header.addDestination().setName("DEST");
Bundle bundle = new Bundle();
bundle.addEntry().setResource(header);
IParser p = ourCtx.newXmlParser();
p.setPrettyPrint(true);
String encode = p.encodeResourceToString(bundle);
ourLog.info(encode);
assertThat(encode, containsString("<value value=\"APPID\"/>"));
assertThat(encode, stringContainsInOrder("<source", "<dest"));
IParser p = ourCtx.newXmlParser();
p.setPrettyPrint(true);
String encode = p.encodeResourceToString(bundle);
ourLog.info(encode);
assertThat(encode, containsString("<value value=\"APPID\"/>"));
assertThat(encode, stringContainsInOrder("<source", "<dest"));
}
@Test
@ -2488,7 +2487,7 @@ public class XmlParserDstu3Test {
assertEquals("http://localhost:58402/fhir/context/Patient/1/_history/2", bundle.getEntry().get(1).getResource().getIdElement().getValue());
assertEquals("http://localhost:58402/fhir/context/Patient/1/_history/1", bundle.getEntry().get(2).getResource().getIdElement().getValue());
}
/**
* see #144 and #146
*/
@ -2572,14 +2571,14 @@ public class XmlParserDstu3Test {
/**
* See #366
*/
@Test(expected=DataFormatException.class)
@Test(expected = DataFormatException.class)
public void testParseInvalidBoolean() {
//@formatter:off
String resource = "<Patient xmlns=\"http://hl7.org/fhir\">\n" +
" <active value=\"1\"/>\n" +
"</Patient>";
//@formatter:on
ourCtx.newXmlParser().parseResource(resource);
}
@ -2809,8 +2808,7 @@ public class XmlParserDstu3Test {
assertEquals("DataFormatException at [[row,col {unknown-source}]: [2,4]]: Unknown element 'valueSampleddata' found during parse", e.getMessage());
}
}
/**
* See #339
*

View File

@ -17,6 +17,7 @@ import java.io.StringReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@ -27,6 +28,7 @@ import org.apache.commons.io.input.ReaderInputStream;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
@ -153,7 +155,8 @@ public class GenericClientDstu3Test {
Patient outputPt = (Patient) ourCtx.newJsonParser().parseResource(new String(output.getContent(), "UTF-8"));
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">A PATIENT</div>", outputPt.getText().getDivAsString());
}
@Test
public void testBinaryCreateWithNoContentType() throws Exception {
IParser p = ourCtx.newXmlParser();
@ -1094,6 +1097,39 @@ public class GenericClientDstu3Test {
}
}
@Test
public void testSearchWithMultipleTokens() throws Exception {
final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
@Override
public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
}
});
IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
int idx = 0;
Collection<String> values = Arrays.asList("VAL1", "VAL2", "VAL3A,B");
//@formatter:off
client.search()
.forResource("Patient")
.where(Patient.IDENTIFIER.exactly().systemAndValues("SYS", values))
.returnBundle(Bundle.class)
.execute();
//@formatter:on
assertEquals("http://example.com/fhir/Patient?identifier=SYS%7CVAL1%2CSYS%7CVAL2%2CSYS%7CVAL3A%5C%2CB", capt.getAllValues().get(idx).getURI().toString());
assertEquals("http://example.com/fhir/Patient?identifier=SYS|VAL1,SYS|VAL2,SYS|VAL3A\\,B", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
idx++;
}
/**
* See #371
*/

View File

@ -9,6 +9,7 @@ import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -43,6 +44,7 @@ import org.junit.Test;
import org.mockito.internal.stubbing.answers.ThrowsException;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.parser.DataFormatException;
import ca.uhn.fhir.util.TestUtil;
public class QuestionnaireResponseValidatorDstu3Test {
@ -182,6 +184,7 @@ public class QuestionnaireResponseValidatorDstu3Test {
ourLog.info(errors.toString());
assertThat(errors.toString(), containsString("No LinkId, so can't be validated"));
}
@Test
public void testItemWithNoType() {

View File

@ -0,0 +1,146 @@
{
"resourceType": "Communication",
"id": "111211",
"meta": {
"versionId": "1",
"lastUpdated": "2016-07-06T15:45:04.663-04:00"
},
"contained": [
{
"resourceType": "Organization",
"id": "OrgSchool1",
"identifier": [
{
"system": "[id-system-local-base]/school-id",
"value": "unknown"
}
],
"name": "Fake School"
},
{
"resourceType": "Patient",
"id": "Patient1",
"identifier": [
{
"use": "official",
"system": "[id-system-global-base]/ca-on-patient-hcn",
"value": "2222222222"
}
],
"name": [
{
"use": "official",
"family": [
"Tester"
],
"given": [
"Joe",
"Fake"
]
}
],
"gender": "female",
"birthDate": "2011-03-02",
"address": [
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber",
"valueString": "33"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName",
"valueString": "DUNDURN ST N"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetNameType",
"valueString": "ST"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-direction",
"valueString": "N"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-unitID",
"valueString": "600"
}
],
"use": "home",
"line": [
"unknown"
],
"city": "HAMILTON",
"state": "Ontario"
}
],
"contact": [
{
"organization": {
"reference": "#OrgSchool1"
}
}
]
},
{
"resourceType": "RelatedPerson",
"id": "RelatedPerson1",
"patient": {
"reference": "#Patient1"
},
"relationship": {
"coding": [
{
"system": "http://hl7.org/fhir/patient-contact-relationship",
"code": "Self"
}
]
},
"name": {
"family": [
"Tester"
],
"given": [
"Jane"
]
},
"telecom": [
{
"system": "phone",
"value": "2899199119",
"use": "home"
}
]
}
],
"identifier": [
{
"system": "[id-system-local-base]/submission-id",
"value": "1000212"
}
],
"sender": {
"reference": "#RelatedPerson1"
},
"payload": [
{
"contentAttachment": {
"contentType": "image/gif",
"data": "…"
}
},
{
"contentReference": {
"reference": "#Immunization1"
}
},
{
"contentString": "Scanned copy of MRM immunization receipt and Flu shot chart page"
}
],
"status": "completed",
"sent": "2016-07-06T19:45:45.514Z",
"received": "2016-07-06T19:45:45.514Z",
"subject": {
"reference": "#Patient1"
}
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -18,12 +18,12 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

View File

@ -44,6 +44,8 @@ import org.hl7.fhir.instance.model.ValueSet.ConceptReferenceComponent;
import org.hl7.fhir.instance.model.ValueSet.ConceptSetComponent;
import org.hl7.fhir.instance.utils.WorkerContext;
import ca.uhn.fhir.util.ElementUtil;
/**
* Validates that an instance of {@link QuestionnaireResponse} is valid against the {@link Questionnaire} that it claims to conform to.
*
@ -364,7 +366,9 @@ public class QuestionnaireResponseValidator extends BaseValidator {
String linkId = theQuestion.getLinkId();
Set<Class<? extends Type>> allowedAnswerTypes = determineAllowedAnswerTypes(type);
if (allowedAnswerTypes.isEmpty()) {
rule(theErrors, IssueType.BUSINESSRULE, thePathStack, answerQuestion.isEmpty(), "Question with linkId[{0}] has no answer type but an answer was provided", linkId);
for (QuestionAnswerComponent nextAnswer : answerQuestion.getAnswer()) {
rule(theErrors, IssueType.BUSINESSRULE, thePathStack, ElementUtil.isEmpty(nextAnswer.getValue()), "Question with linkId[{0}] has no answer type but an answer was provided", linkId);
}
} else {
rule(theErrors, IssueType.BUSINESSRULE, thePathStack, !(answerQuestion.getAnswer().size() > 1 && !theQuestion.getRepeats()), "Multiple answers to non repeating question with linkId[{0}]",
linkId);
@ -381,6 +385,9 @@ public class QuestionnaireResponseValidator extends BaseValidator {
try {
thePathStack.add("answer[" + answerIdx + "]");
Type nextValue = nextAnswer.getValue();
if (nextValue == null) {
continue;
}
if (!allowedAnswerTypes.contains(nextValue.getClass())) {
rule(theErrors, IssueType.BUSINESSRULE, thePathStack, false, "Answer to question with linkId[{0}] found of type [{1}] but this is invalid for question of type [{2}]", linkId,
nextValue.getClass().getSimpleName(), type.toCode());

View File

@ -3,6 +3,8 @@ package ca.uhn.fhir.validation;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -123,6 +125,19 @@ public class QuestionnaireResponseValidatorIntegrationTest {
}
}
@Test
public void testGroup() throws Exception {
Questionnaire q = ourCtx.newJsonParser().parseResource(Questionnaire.class, IOUtils.toString(getClass().getResourceAsStream("/questionnaire-20160712.json")));
QuestionnaireResponse qa = ourCtx.newJsonParser().parseResource(QuestionnaireResponse.class, IOUtils.toString(getClass().getResourceAsStream("/questionnaire-20160712-response.json")));
when(myResourceLoaderMock.load(Mockito.eq(Questionnaire.class), Mockito.any(IdType.class))).thenReturn(q);
ValidationResult errors = myVal.validateWithResult(qa);
ourLog.info(errors.toString());
assertEquals(true, errors.isSuccessful());
}
@Test
public void testCodedAnswer() {
String questionnaireRef = "http://example.com/Questionnaire/q1";

View File

@ -0,0 +1,76 @@
{
"resourceType": "QuestionnaireResponse",
"status": "completed",
"questionnaire": {
"reference": "Questionnaire/90079"
},
"group": {
"linkId": "PHR",
"title": "NSW Government My Personal Health Record, january 2013",
"group": [
{
"linkId": "birthDetails",
"title": "Birth details - To be completed by health professional",
"group": [
{
"linkId": "neonatalInformation",
"title": "Neonatal Information",
"question": [
{
"linkId": "birthWeight",
"text": "Birth weight (kg)",
"answer": [
{
"valueDecimal": 3.25
}
]
},
{
"linkId": "birthLength",
"text": "Birth length (cm)",
"answer": [
{
"valueDecimal": 44.3
}
]
},
{
"linkId": "vitaminKgiven",
"text": "Vitamin K given",
"answer": [
{
"group": [
{
"linkId": "vitaminKgivenDoses",
"question": [
{
"linkId": "vitaminiKDose1",
"text": "1st dose",
"answer": [
{
"valueDate": "1972-11-30"
}
]
},
{
"linkId": "vitaminiKDose2",
"text": "2nd dose",
"answer": [
{
"valueDate": "1972-12-11"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
}
}

View File

@ -0,0 +1,58 @@
{
"resourceType": "Questionnaire",
"status": "draft",
"publisher": "New South Wales Department of Health",
"subjectType": [
"Patient"
],
"group": {
"linkId": "PHR",
"title": "NSW Government My Personal Health Record",
"required": true,
"group": [
{
"linkId": "birthDetails",
"title": "Birth details - To be completed by health professional",
"group": [
{
"linkId": "neonatalInformation",
"title": "Neonatal Information",
"question": [
{
"linkId": "birthWeight",
"text": "Birth weight (kg)",
"type": "decimal"
},
{
"linkId": "birthLength",
"text": "Birth length (cm)",
"type": "decimal"
},
{
"linkId": "vitaminKgiven",
"text": "Vitamin K given",
"group": [
{
"linkId": "vitaminKgivenDoses",
"question": [
{
"linkId": "vitaminiKDose1",
"text": "1st dose",
"type": "date"
},
{
"linkId": "vitaminiKDose2",
"text": "2nd dose",
"type": "date"
}
]
}
]
}
]
}
]
}
]
}
}

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -27,27 +27,27 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-jpaserver-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!--<dependency> <groupId>ca.uhn.hapi.fhir</groupId> <artifactId>hapi-fhir-structures-dev</artifactId> <version>0.9</version> </dependency> -->
<dependency>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-deployable-pom</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
</parent>
@ -17,7 +17,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -19,7 +19,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!--
Because Tinder is a part of the HAPI FHIR build process (it generates
@ -56,7 +56,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -17,12 +17,12 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
@ -45,7 +45,7 @@
<plugin>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-tinder-plugin</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<executions>
<execution>
<id>custom-structs</id>
@ -139,7 +139,7 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
@ -183,17 +183,17 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-tinder-plugin</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!--
<dependency>

View File

@ -11,7 +11,7 @@
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<packaging>pom</packaging>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<name>HAPI-FHIR</name>
<url>https://github.com/jamesagnew/hapi-fhir</url>

View File

@ -4,7 +4,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -17,12 +17,12 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@ -8,7 +8,7 @@
<parent>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
@ -33,27 +33,27 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- At least one "structures" JAR must also be included -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
</dependency>
<!-- This dependency is used for the "FHIR Tester" web app overlay -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<type>war</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-testpage-overlay</artifactId>
<version>1.6</version>
<version>2.0-SNAPSHOT</version>
<classifier>classes</classifier>
<scope>provided</scope>
</dependency>

View File

@ -6,6 +6,16 @@
<title>HAPI FHIR Changelog</title>
</properties>
<body>
<release version="2.0" date="TBD">
<action type="fix">
Fix issue in DSTU1 Bundle parsing where unexpected elements in the bundle resulted in a failure
to parse.
</action>
<action type="fix">
DSTU2 QuestionnaireResponse validator failed with an exception if the
QuestionnaireResponse contained certain groups with no content
</action>
</release>
<release version="1.6" date="2016-07-07">
<action type="fix">
Performance has been improved for the initial FhirContext

View File

@ -20,7 +20,7 @@
<tbody>
<tr>
<td rowspan="1">hapi-fhir-structures-dstu</td>
<td>1.1 - 1.6</td>
<td>1.1 - 1.6.1</td>
<td><a href="http://www.hl7.org/fhir/DSTU1/index.html">DSTU1 0.0.82</a></td>
</tr>
<tr>
@ -33,7 +33,7 @@
<td><a href="http://hl7.org/fhir/2015Sep/index.html">DSTU2 1.0.0</a></td>
</tr>
<tr>
<td>1.3 - 1.6</td>
<td>1.3 - 1.6.1</td>
<td><a href="http://hl7.org/fhir/2015Sep/index.html">DSTU2 1.0.2</a></td>
</tr>
<tr>
@ -50,7 +50,7 @@
<td><a href="http://hl7.org/fhir/2015Sep/index.html">DSTU2 1.0.2</a></td>
</tr>
<tr>
<td rowspan="2">hapi-fhir-structures-dstu3</td>
<td rowspan="4">hapi-fhir-structures-dstu3</td>
<td>1.4</td>
<td><a href="http://hl7-fhir.github.io/">DSTU3 1.3.0 Snapshot</a> (SVN 7602)</td>
</tr>
@ -62,6 +62,10 @@
<td>1.6</td>
<td><a href="http://hl7-fhir.github.io/">DSTU3 1.4.0 Snapshot</a> (SVN 8636)</td>
</tr>
<tr>
<td>1.6.1</td>
<td><a href="http://hl7-fhir.github.io/">DSTU3 1.5.0 Snapshot</a> (SVN 8636)</td>
</tr>
</tbody>
</table>

View File

@ -71,7 +71,7 @@
of changes in this version. Among the enhancements in this release are:
</p>
<ul>
<li>Significant enhancements to FhirConetxt startup performance (especially on Android)</li>
<li>Significant enhancements to FhirContext startup performance (especially on Android)</li>
<li>Support for STU3 terminology services in the JPA module, including support for importing SNOMED CT and LOINC</li>
<li>Update of the STU3 resources and validator to the latest snapshot</li>
<li>Plenty of bug fixes</li>