Revert IFhirVersion method signature changes for #520

This commit is contained in:
James 2016-12-11 18:55:59 -05:00
parent 43adae1d01
commit ab17ee68a3
21 changed files with 109 additions and 64 deletions

View File

@ -74,7 +74,7 @@ public class GenericClientDstu3IT {
}
private String expectedUserAgent() {
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString() + "/DSTU3; okhttp/3.4.1)";
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU3.getFhirVersionString() + "/DSTU3; okhttp/3.4.1)";
}

View File

@ -1,5 +1,7 @@
package ca.uhn.fhir.context;
import java.util.concurrent.Callable;
/*
* #%L
* HAPI FHIR - Core Library
@ -10,7 +12,7 @@ package ca.uhn.fhir.context;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@ -29,33 +31,39 @@ public enum FhirVersionEnum {
* ***********************
* Don't auto-sort this type!!!
*
* Or more accurately, entries should be sorted from OLDEST FHIR release
* Or more accurately, entries should be sorted from OLDEST FHIR release
* to NEWEST FHIR release instead of alphabetically
* ***********************
*/
DSTU1("ca.uhn.fhir.model.dstu.FhirDstu1", null, false),
DSTU2("ca.uhn.fhir.model.dstu2.FhirDstu2", null, false),
DSTU2_HL7ORG("org.hl7.fhir.instance.FhirDstu2Hl7Org", DSTU2, true),
DSTU2_1("org.hl7.fhir.dstu2016may.hapi.ctx.FhirDstu2_1", null, true),
DSTU3("org.hl7.fhir.dstu3.hapi.ctx.FhirDstu3", null, true);
DSTU1("ca.uhn.fhir.model.dstu.FhirDstu1", null, false, new Version("0.0.82")),
DSTU2("ca.uhn.fhir.model.dstu2.FhirDstu2", null, false, new Version("1.0.2")),
DSTU2_HL7ORG("org.hl7.fhir.instance.FhirDstu2Hl7Org", DSTU2, true, new Version("1.0.2")),
DSTU2_1("org.hl7.fhir.dstu2016may.hapi.ctx.FhirDstu2_1", null, true, new Version("1.4.0")),
DSTU3("org.hl7.fhir.dstu3.hapi.ctx.FhirDstu3", null, true, new Dstu3Version());
private final FhirVersionEnum myEquivalent;
private final boolean myIsRi;
private volatile Boolean myPresentOnClasspath;
private final String myVersionClass;
private volatile IFhirVersion myVersionImplementation;
private String myFhirVersionString;
FhirVersionEnum(String theVersionClass, FhirVersionEnum theEquivalent, boolean theIsRi) {
FhirVersionEnum(String theVersionClass, FhirVersionEnum theEquivalent, boolean theIsRi, IVersionProvider theVersionExtractor) {
myVersionClass = theVersionClass;
myEquivalent = theEquivalent;
myFhirVersionString = theVersionExtractor.provideVersion();
myIsRi = theIsRi;
}
public String getFhirVersionString() {
return myFhirVersionString;
}
public IFhirVersion getVersionImplementation() {
if (!isPresentOnClasspath()) {
throw new IllegalStateException("Version " + name() + " is not present on classpath");
@ -69,7 +77,7 @@ public enum FhirVersionEnum {
}
return myVersionImplementation;
}
public boolean isEquivalentTo(FhirVersionEnum theVersion) {
if (this.equals(theVersion)) {
return true;
@ -79,11 +87,11 @@ public enum FhirVersionEnum {
}
return false;
}
public boolean isNewerThan(FhirVersionEnum theVersion) {
return ordinal() > theVersion.ordinal();
}
public boolean isOlderThan(FhirVersionEnum theVersion) {
return ordinal() < theVersion.ordinal();
}
@ -93,12 +101,12 @@ public enum FhirVersionEnum {
*/
public boolean isPresentOnClasspath() {
Boolean retVal = myPresentOnClasspath;
if (retVal==null) {
if (retVal == null) {
try {
Class.forName(myVersionClass);
retVal= true;
retVal = true;
} catch (Exception e) {
retVal= false;
retVal = false;
}
myPresentOnClasspath = retVal;
}
@ -111,5 +119,45 @@ public enum FhirVersionEnum {
public boolean isRi() {
return myIsRi;
}
private static class Version implements IVersionProvider {
public Version(String theVersion) {
super();
myVersion = theVersion;
}
private String myVersion;
@Override
public String provideVersion() {
return myVersion;
}
}
private interface IVersionProvider {
String provideVersion();
}
private static class Dstu3Version implements IVersionProvider {
public Dstu3Version() {
try {
Class<?> c = Class.forName("org.hl7.fhir.dstu3.model.Constants");
myVersion = (String) c.getDeclaredField("VERSION").get(null);
} catch (Exception e) {
myVersion = "UNKNOWN";
}
}
private String myVersion;
@Override
public String provideVersion() {
return myVersion;
}
}
}

View File

@ -62,8 +62,6 @@ public interface IFhirVersion {
FhirVersionEnum getVersion();
String getVersionString();
IVersionSpecificBundleFactory newBundleFactory(FhirContext theContext);
IBase newCodingDt();

View File

@ -30,7 +30,7 @@ public class HttpClientUtil {
b.append("HAPI-FHIR/");
b.append(VersionUtil.getVersion());
b.append(" (FHIR Client; FHIR ");
b.append(theContext.getVersion().getVersionString());
b.append(theContext.getVersion().getVersion().getFhirVersionString());
b.append('/');
b.append(theContext.getVersion().getVersion().name());
b.append("; ");

View File

@ -30,8 +30,16 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.StringTokenizer;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.jar.Manifest;
@ -42,7 +50,6 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
@ -72,7 +79,11 @@ import ca.uhn.fhir.rest.server.interceptor.ExceptionHandlingInterceptor;
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
import ca.uhn.fhir.util.*;
import ca.uhn.fhir.util.CoverageIgnore;
import ca.uhn.fhir.util.ReflectionUtil;
import ca.uhn.fhir.util.UrlPathTokenizer;
import ca.uhn.fhir.util.UrlUtil;
import ca.uhn.fhir.util.VersionUtil;
public class RestfulServer extends HttpServlet implements IRestfulServer<ServletRequestDetails> {
@ -158,7 +169,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
b.append("HAPI FHIR ");
b.append(VersionUtil.getVersion());
b.append(" REST Server (FHIR Server; FHIR ");
b.append(myFhirContext.getVersion().getVersionString());
b.append(myFhirContext.getVersion().getVersion().getFhirVersionString());
b.append('/');
b.append(myFhirContext.getVersion().getVersion().name());
b.append(")");

View File

@ -759,14 +759,14 @@ public class RestfulServerUtils {
if (theContentType.equals(EncodingEnum.JSON_PLAIN_STRING) || theContentType.equals(EncodingEnum.XML_PLAIN_STRING)) {
FhirVersionEnum ctxtEnum = theCtx.getVersion().getVersion();
myNonLegacy = ctxtEnum.isNewerThan(FhirVersionEnum.DSTU3)
|| (ctxtEnum.isEquivalentTo(FhirVersionEnum.DSTU3) && !"1.4.0".equals(theCtx.getVersion().getVersionString()));
|| (ctxtEnum.isEquivalentTo(FhirVersionEnum.DSTU3) && !"1.4.0".equals(theCtx.getVersion().getVersion().getFhirVersionString()));
} else {
myNonLegacy = EncodingEnum.isNonLegacy(theContentType);
}
} else {
FhirVersionEnum ctxtEnum = theCtx.getVersion().getVersion();
if (ctxtEnum.isOlderThan(FhirVersionEnum.DSTU3)
|| (ctxtEnum.isEquivalentTo(FhirVersionEnum.DSTU3) && "1.4.0".equals(theCtx.getVersion().getVersionString()))) {
|| (ctxtEnum.isEquivalentTo(FhirVersionEnum.DSTU3) && "1.4.0".equals(theCtx.getVersion().getVersion().getFhirVersionString()))) {
myNonLegacy = null;
} else {
myNonLegacy = Boolean.TRUE;

View File

@ -405,10 +405,4 @@ public class FhirDstu1 implements IFhirVersion {
throw new UnsupportedOperationException("FluentPath is not supported in DSTU1 contexts");
}
@Override
public String getVersionString() {
return "0.0.82";
}
}

View File

@ -129,11 +129,6 @@ public class FhirDstu2_1 implements IFhirVersion {
return FhirVersionEnum.DSTU2_1;
}
@Override
public String getVersionString() {
return Constants.VERSION;
}
@Override
public IVersionSpecificBundleFactory newBundleFactory(FhirContext theContext) {
return new Dstu2_1BundleFactory(theContext);

View File

@ -213,7 +213,7 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
retVal.setPublisher(myPublisher);
retVal.setDateElement(conformanceDate());
retVal.setFhirVersion(FhirVersionEnum.DSTU2_1.getVersionImplementation().getVersionString());
retVal.setFhirVersion(FhirVersionEnum.DSTU2_1.getFhirVersionString());
retVal.setAcceptUnknown(UnknownContentCode.EXTENSIONS); // TODO: make this configurable - this is a fairly big
// effort since the parser
// needs to be modified to actually allow it

View File

@ -102,7 +102,7 @@ public class GenericClientDstu2_1Test {
}
private String expectedUserAgent() {
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU2_1.getVersionImplementation().getVersionString() + "/DSTU2_1; apache)";
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU2_1.getFhirVersionString() + "/DSTU2_1; apache)";
}
private byte[] extractBodyAsByteArray(ArgumentCaptor<HttpUriRequest> capt) throws IOException {

View File

@ -110,7 +110,7 @@ public class MetadataConformanceDstu2_1Test {
output = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
assertEquals(200, status.getStatusLine().getStatusCode());
assertThat(output, containsString("<Conformance"));
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU2_1.getVersionImplementation().getVersionString() + "/DSTU2_1)", status.getFirstHeader("X-Powered-By").getValue());
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU2_1.getFhirVersionString() + "/DSTU2_1)", status.getFirstHeader("X-Powered-By").getValue());
} finally {
IOUtils.closeQuietly(status.getEntity().getContent());
}

View File

@ -128,11 +128,6 @@ public class FhirDstu2 implements IFhirVersion {
return FhirVersionEnum.DSTU2;
}
@Override
public String getVersionString() {
return "1.0.2";
}
@Override
public IVersionSpecificBundleFactory newBundleFactory(FhirContext theContext) {
return new Dstu2BundleFactory(theContext);

View File

@ -131,11 +131,6 @@ public class FhirDstu3 implements IFhirVersion {
return FhirVersionEnum.DSTU3;
}
@Override
public String getVersionString() {
return Constants.VERSION;
}
@Override
public IVersionSpecificBundleFactory newBundleFactory(FhirContext theContext) {
return new Dstu3BundleFactory(theContext);

View File

@ -213,7 +213,7 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
retVal.setPublisher(myPublisher);
retVal.setDateElement(conformanceDate());
retVal.setFhirVersion(FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString());
retVal.setFhirVersion(FhirVersionEnum.DSTU3.getFhirVersionString());
retVal.setAcceptUnknown(UnknownContentCode.EXTENSIONS); // TODO: make this configurable - this is a fairly big
// effort since the parser
// needs to be modified to actually allow it

View File

@ -216,7 +216,7 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
retVal.setPublisher(myPublisher);
retVal.setDateElement(conformanceDate());
retVal.setFhirVersion(FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString());
retVal.setFhirVersion(FhirVersionEnum.DSTU3.getFhirVersionString());
retVal.setAcceptUnknown(UnknownContentCode.EXTENSIONS); // TODO: make this configurable - this is a fairly big
// effort since the parser
// needs to be modified to actually allow it

View File

@ -337,7 +337,7 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
@Override
public String getVersion() {
return myCtx.getVersion().getVersionString();
return myCtx.getVersion().getVersion().getFhirVersionString();
}
@Override

View File

@ -0,0 +1,14 @@
package ca.uhn.fhir.context;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class VersionDstu3Test {
@Test
public void testVersion() {
assertEquals("1.8.0", FhirVersionEnum.DSTU3.getFhirVersionString());
}
}

View File

@ -91,7 +91,7 @@ public class GenericClientDstu3Test {
}
private String expectedUserAgent() {
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString() + "/DSTU3; apache)";
return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.DSTU3.getFhirVersionString() + "/DSTU3; apache)";
}
private byte[] extractBodyAsByteArray(ArgumentCaptor<HttpUriRequest> capt) throws IOException {

View File

@ -108,7 +108,7 @@ public class MetadataCapabilityStatementDstu3Test {
output = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
assertEquals(200, status.getStatusLine().getStatusCode());
assertThat(output, containsString("<CapabilityStatement"));
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString() + "/DSTU3)",
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU3.getFhirVersionString() + "/DSTU3)",
status.getFirstHeader("X-Powered-By").getValue());
} finally {
IOUtils.closeQuietly(status.getEntity().getContent());

View File

@ -110,7 +110,7 @@ public class MetadataConformanceDstu3Test {
output = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
assertEquals(200, status.getStatusLine().getStatusCode());
assertThat(output, containsString("<Conformance"));
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU3.getVersionImplementation().getVersionString() + "/DSTU3)", status.getFirstHeader("X-Powered-By").getValue());
assertEquals("HAPI FHIR " + VersionUtil.getVersion() + " REST Server (FHIR Server; FHIR " + FhirVersionEnum.DSTU3.getFhirVersionString() + "/DSTU3)", status.getFirstHeader("X-Powered-By").getValue());
} finally {
IOUtils.closeQuietly(status.getEntity().getContent());
}

View File

@ -126,11 +126,6 @@ public class FhirDstu2Hl7Org implements IFhirVersion {
return FhirVersionEnum.DSTU2_HL7ORG;
}
@Override
public String getVersionString() {
return "1.0.2";
}
@Override
public IVersionSpecificBundleFactory newBundleFactory(FhirContext theContext) {