Tests all pass on deparated structure defs!
This commit is contained in:
parent
7492b25325
commit
6012a60ccf
|
@ -76,11 +76,12 @@ public class FhirContext {
|
||||||
private volatile Map<String, RuntimeResourceDefinition> myIdToResourceDefinition = Collections.emptyMap();
|
private volatile Map<String, RuntimeResourceDefinition> myIdToResourceDefinition = Collections.emptyMap();
|
||||||
private HapiLocalizer myLocalizer = new HapiLocalizer();
|
private HapiLocalizer myLocalizer = new HapiLocalizer();
|
||||||
private volatile Map<String, RuntimeResourceDefinition> myNameToElementDefinition = Collections.emptyMap();
|
private volatile Map<String, RuntimeResourceDefinition> myNameToElementDefinition = Collections.emptyMap();
|
||||||
private Map<String, String> myNameToResourceType;
|
private Map<String, Class<? extends IBaseResource>> myNameToResourceType;
|
||||||
private volatile INarrativeGenerator myNarrativeGenerator;
|
private volatile INarrativeGenerator myNarrativeGenerator;
|
||||||
private volatile IRestfulClientFactory myRestfulClientFactory;
|
private volatile IRestfulClientFactory myRestfulClientFactory;
|
||||||
private volatile RuntimeChildUndeclaredExtensionDefinition myRuntimeChildUndeclaredExtensionDefinition;
|
private volatile RuntimeChildUndeclaredExtensionDefinition myRuntimeChildUndeclaredExtensionDefinition;
|
||||||
private final IFhirVersion myVersion;
|
private final IFhirVersion myVersion;
|
||||||
|
private Map<FhirVersionEnum, Map<String, Class<? extends IBaseResource>>> myVersionToNameToResourceType = Collections.emptyMap();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor. In most cases this is the right constructor to use.
|
* Default constructor. In most cases this is the right constructor to use.
|
||||||
|
@ -124,16 +125,8 @@ public class FhirContext {
|
||||||
scanResourceTypes(toElementList(theResourceTypes));
|
scanResourceTypes(toElementList(theResourceTypes));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
private String createUnknownResourceNameError(String theResourceName, FhirVersionEnum theVersion) {
|
||||||
private List<Class<? extends IElement>> toElementList(Collection<Class<? extends IBaseResource>> theResourceTypes) {
|
return getLocalizer().getMessage(FhirContext.class, "unknownResourceName", theResourceName, theVersion);
|
||||||
if (theResourceTypes == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
List<Class<? extends IElement>> resTypes = new ArrayList<Class<? extends IElement>>();
|
|
||||||
for (Class<? extends IBaseResource> next : theResourceTypes) {
|
|
||||||
resTypes.add((Class<? extends IElement>) next);
|
|
||||||
}
|
|
||||||
return resTypes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -189,6 +182,32 @@ public class FhirContext {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RuntimeResourceDefinition getResourceDefinition(FhirVersionEnum theVersion, String theResourceName) {
|
||||||
|
Validate.notNull(theVersion, "theVersion can not be null");
|
||||||
|
|
||||||
|
if (theVersion.equals(myVersion.getVersion())) {
|
||||||
|
return getResourceDefinition(theResourceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Class<? extends IBaseResource>> nameToType = myVersionToNameToResourceType.get(theVersion);
|
||||||
|
if (nameToType == null) {
|
||||||
|
nameToType = new HashMap<String, Class<? extends IBaseResource>>();
|
||||||
|
ModelScanner.scanVersionPropertyFile(null, nameToType, theVersion);
|
||||||
|
|
||||||
|
Map<FhirVersionEnum, Map<String, Class<? extends IBaseResource>>> newVersionToNameToResourceType = new HashMap<FhirVersionEnum, Map<String,Class<? extends IBaseResource>>>();
|
||||||
|
newVersionToNameToResourceType.putAll(myVersionToNameToResourceType);
|
||||||
|
newVersionToNameToResourceType.put(theVersion, nameToType);
|
||||||
|
myVersionToNameToResourceType = newVersionToNameToResourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
Class<? extends IBaseResource> resourceType = nameToType.get(theResourceName.toLowerCase());
|
||||||
|
if (resourceType==null) {
|
||||||
|
throw new DataFormatException(createUnknownResourceNameError(theResourceName, theVersion));
|
||||||
|
}
|
||||||
|
|
||||||
|
return getResourceDefinition(resourceType);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the scanned runtime model for the given type. This is an advanced feature which is generally only needed
|
* Returns the scanned runtime model for the given type. This is an advanced feature which is generally only needed
|
||||||
* for extending the core library.
|
* for extending the core library.
|
||||||
|
@ -218,24 +237,13 @@ public class FhirContext {
|
||||||
RuntimeResourceDefinition retVal = myNameToElementDefinition.get(resourceName);
|
RuntimeResourceDefinition retVal = myNameToElementDefinition.get(resourceName);
|
||||||
|
|
||||||
if (retVal == null) {
|
if (retVal == null) {
|
||||||
try {
|
Class<? extends IBaseResource> clazz = myNameToResourceType.get(resourceName.toLowerCase());
|
||||||
String className = myNameToResourceType.get(resourceName.toLowerCase());
|
if (clazz == null) {
|
||||||
if (className == null) {
|
throw new DataFormatException(createUnknownResourceNameError(resourceName, myVersion.getVersion()));
|
||||||
// Binary is added to the fhirversion.properties file now so it's not a special case here
|
|
||||||
// if ("binary".equals(resourceName.toLowerCase())) {
|
|
||||||
// // Binary is not generated so it's not in the list of potential resources
|
|
||||||
// className = Binary.class.getName();
|
|
||||||
// } else {
|
|
||||||
throw new DataFormatException("Unknown resource name[" + resourceName + "]");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
Class<?> clazz = Class.forName(className);
|
|
||||||
if (IResource.class.isAssignableFrom(clazz)) {
|
if (IResource.class.isAssignableFrom(clazz)) {
|
||||||
retVal = scanResourceType((Class<? extends IResource>) clazz);
|
retVal = scanResourceType((Class<? extends IResource>) clazz);
|
||||||
}
|
}
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
throw new DataFormatException("Unknown resource name[" + resourceName + "]");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
@ -358,13 +366,6 @@ public class FhirContext {
|
||||||
return new XmlParser(this);
|
return new XmlParser(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RuntimeResourceDefinition scanResourceType(Class<? extends IResource> theResourceType) {
|
|
||||||
ArrayList<Class<? extends IElement>> resourceTypes = new ArrayList<Class<? extends IElement>>();
|
|
||||||
resourceTypes.add(theResourceType);
|
|
||||||
Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> defs = scanResourceTypes(resourceTypes);
|
|
||||||
return (RuntimeResourceDefinition) defs.get(theResourceType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private BaseRuntimeElementDefinition<?> scanDatatype(Class<? extends IElement> theResourceType) {
|
private BaseRuntimeElementDefinition<?> scanDatatype(Class<? extends IElement> theResourceType) {
|
||||||
ArrayList<Class<? extends IElement>> resourceTypes = new ArrayList<Class<? extends IElement>>();
|
ArrayList<Class<? extends IElement>> resourceTypes = new ArrayList<Class<? extends IElement>>();
|
||||||
resourceTypes.add(theResourceType);
|
resourceTypes.add(theResourceType);
|
||||||
|
@ -372,8 +373,15 @@ public class FhirContext {
|
||||||
return defs.get(theResourceType);
|
return defs.get(theResourceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RuntimeResourceDefinition scanResourceType(Class<? extends IResource> theResourceType) {
|
||||||
|
ArrayList<Class<? extends IElement>> resourceTypes = new ArrayList<Class<? extends IElement>>();
|
||||||
|
resourceTypes.add(theResourceType);
|
||||||
|
Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> defs = scanResourceTypes(resourceTypes);
|
||||||
|
return (RuntimeResourceDefinition) defs.get(theResourceType);
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> scanResourceTypes(Collection<Class<? extends IElement>> theResourceTypes) {
|
private Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> scanResourceTypes(Collection<Class<? extends IElement>> theResourceTypes) {
|
||||||
ModelScanner scanner = new ModelScanner(this, myClassToElementDefinition, theResourceTypes);
|
ModelScanner scanner = new ModelScanner(this, myVersion.getVersion(), myClassToElementDefinition, theResourceTypes);
|
||||||
if (myRuntimeChildUndeclaredExtensionDefinition == null) {
|
if (myRuntimeChildUndeclaredExtensionDefinition == null) {
|
||||||
myRuntimeChildUndeclaredExtensionDefinition = scanner.getRuntimeChildUndeclaredExtensionDefinition();
|
myRuntimeChildUndeclaredExtensionDefinition = scanner.getRuntimeChildUndeclaredExtensionDefinition();
|
||||||
}
|
}
|
||||||
|
@ -414,6 +422,39 @@ public class FhirContext {
|
||||||
myNarrativeGenerator = theNarrativeGenerator;
|
myNarrativeGenerator = theNarrativeGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private List<Class<? extends IElement>> toElementList(Collection<Class<? extends IBaseResource>> theResourceTypes) {
|
||||||
|
if (theResourceTypes == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<Class<? extends IElement>> resTypes = new ArrayList<Class<? extends IElement>>();
|
||||||
|
for (Class<? extends IBaseResource> next : theResourceTypes) {
|
||||||
|
resTypes.add((Class<? extends IElement>) next);
|
||||||
|
}
|
||||||
|
return resTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DEV}
|
||||||
|
*/
|
||||||
|
public static FhirContext forDev() {
|
||||||
|
return new FhirContext(FhirVersionEnum.DEV);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU1}
|
||||||
|
*/
|
||||||
|
public static FhirContext forDstu1() {
|
||||||
|
return new FhirContext(FhirVersionEnum.DSTU1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU2}
|
||||||
|
*/
|
||||||
|
public static FhirContext forDstu2() {
|
||||||
|
return new FhirContext(FhirVersionEnum.DSTU2);
|
||||||
|
}
|
||||||
|
|
||||||
private static Collection<Class<? extends IBaseResource>> toCollection(Class<? extends IBaseResource> theResourceType) {
|
private static Collection<Class<? extends IBaseResource>> toCollection(Class<? extends IBaseResource> theResourceType) {
|
||||||
ArrayList<Class<? extends IBaseResource>> retVal = new ArrayList<Class<? extends IBaseResource>>(1);
|
ArrayList<Class<? extends IBaseResource>> retVal = new ArrayList<Class<? extends IBaseResource>>(1);
|
||||||
retVal.add(theResourceType);
|
retVal.add(theResourceType);
|
||||||
|
@ -432,25 +473,4 @@ public class FhirContext {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU1}
|
|
||||||
*/
|
|
||||||
public static FhirContext forDstu1() {
|
|
||||||
return new FhirContext(FhirVersionEnum.DSTU1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DEV}
|
|
||||||
*/
|
|
||||||
public static FhirContext forDev() {
|
|
||||||
return new FhirContext(FhirVersionEnum.DEV);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU2}
|
|
||||||
*/
|
|
||||||
public static FhirContext forDstu2() {
|
|
||||||
return new FhirContext(FhirVersionEnum.DSTU2);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,37 +88,18 @@ class ModelScanner {
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ModelScanner.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ModelScanner.class);
|
||||||
|
|
||||||
private Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> myClassToElementDefinitions = new HashMap<Class<? extends IBase>, BaseRuntimeElementDefinition<?>>();
|
private Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> myClassToElementDefinitions = new HashMap<Class<? extends IBase>, BaseRuntimeElementDefinition<?>>();
|
||||||
|
private FhirContext myContext;
|
||||||
private Map<String, RuntimeResourceDefinition> myIdToResourceDefinition = new HashMap<String, RuntimeResourceDefinition>();
|
private Map<String, RuntimeResourceDefinition> myIdToResourceDefinition = new HashMap<String, RuntimeResourceDefinition>();
|
||||||
private Map<String, RuntimeResourceDefinition> myNameToResourceDefinitions = new HashMap<String, RuntimeResourceDefinition>();
|
private Map<String, RuntimeResourceDefinition> myNameToResourceDefinitions = new HashMap<String, RuntimeResourceDefinition>();
|
||||||
|
private Map<String, Class<? extends IBaseResource>> myNameToResourceType = new HashMap<String, Class<? extends IBaseResource>>();
|
||||||
// private Map<String, RuntimeResourceDefinition>
|
|
||||||
// myNameToDatatypeDefinitions = new HashMap<String,
|
|
||||||
// RuntimeDatatypeDefinition>();
|
|
||||||
|
|
||||||
private Map<String, String> myNameToResourceType = new HashMap<String, String>();
|
|
||||||
|
|
||||||
private RuntimeChildUndeclaredExtensionDefinition myRuntimeChildUndeclaredExtensionDefinition;
|
private RuntimeChildUndeclaredExtensionDefinition myRuntimeChildUndeclaredExtensionDefinition;
|
||||||
|
|
||||||
private Set<Class<? extends IBase>> myScanAlso = new HashSet<Class<? extends IBase>>();
|
private Set<Class<? extends IBase>> myScanAlso = new HashSet<Class<? extends IBase>>();
|
||||||
|
|
||||||
private Set<Class<? extends ICodeEnum>> myScanAlsoCodeTable = new HashSet<Class<? extends ICodeEnum>>();
|
private Set<Class<? extends ICodeEnum>> myScanAlsoCodeTable = new HashSet<Class<? extends ICodeEnum>>();
|
||||||
|
private FhirVersionEnum myVersion;
|
||||||
|
|
||||||
private FhirContext myContext;
|
ModelScanner(FhirContext theContext, FhirVersionEnum theVersion, Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> theExistingDefinitions, Collection<Class<? extends IElement>> theResourceTypes) throws ConfigurationException {
|
||||||
|
|
||||||
ModelScanner(FhirContext theContext, Class<? extends IBaseResource> theResourceTypes) throws ConfigurationException {
|
|
||||||
myContext = theContext;
|
|
||||||
Set<Class<? extends IBase>> singleton = new HashSet<Class<? extends IBase>>();
|
|
||||||
singleton.add(theResourceTypes);
|
|
||||||
init(null, singleton);
|
|
||||||
}
|
|
||||||
|
|
||||||
ModelScanner(FhirContext theContext, Collection<Class<? extends IBaseResource>> theResourceTypes) throws ConfigurationException {
|
|
||||||
myContext = theContext;
|
|
||||||
init(null, new HashSet<Class<? extends IBase>>(theResourceTypes));
|
|
||||||
}
|
|
||||||
|
|
||||||
ModelScanner(FhirContext theContext, Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> theExistingDefinitions, Collection<Class<? extends IElement>> theResourceTypes) throws ConfigurationException {
|
|
||||||
myContext = theContext;
|
myContext = theContext;
|
||||||
|
myVersion = theVersion;
|
||||||
Set<Class<? extends IBase>> toScan;
|
Set<Class<? extends IBase>> toScan;
|
||||||
if (theResourceTypes != null) {
|
if (theResourceTypes != null) {
|
||||||
toScan = new HashSet<Class<? extends IBase>>(theResourceTypes);
|
toScan = new HashSet<Class<? extends IBase>>(theResourceTypes);
|
||||||
|
@ -128,26 +109,6 @@ class ModelScanner {
|
||||||
init(theExistingDefinitions, toScan);
|
init(theExistingDefinitions, toScan);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> getClassToElementDefinitions() {
|
|
||||||
return myClassToElementDefinitions;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, RuntimeResourceDefinition> getIdToResourceDefinition() {
|
|
||||||
return myIdToResourceDefinition;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, RuntimeResourceDefinition> getNameToResourceDefinitions() {
|
|
||||||
return (myNameToResourceDefinitions);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, String> getNameToResourceType() {
|
|
||||||
return myNameToResourceType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RuntimeChildUndeclaredExtensionDefinition getRuntimeChildUndeclaredExtensionDefinition() {
|
|
||||||
return myRuntimeChildUndeclaredExtensionDefinition;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addScanAlso(Class<? extends IBase> theType) {
|
private void addScanAlso(Class<? extends IBase> theType) {
|
||||||
if (theType.isInterface()) {
|
if (theType.isInterface()) {
|
||||||
return;
|
return;
|
||||||
|
@ -186,46 +147,36 @@ class ModelScanner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> theExistingDefinitions, Set<Class<? extends IBase>> toScan) {
|
public Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> getClassToElementDefinitions() {
|
||||||
|
return myClassToElementDefinitions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, RuntimeResourceDefinition> getIdToResourceDefinition() {
|
||||||
|
return myIdToResourceDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, RuntimeResourceDefinition> getNameToResourceDefinitions() {
|
||||||
|
return (myNameToResourceDefinitions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Class<? extends IBaseResource>> getNameToResourceType() {
|
||||||
|
return myNameToResourceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeChildUndeclaredExtensionDefinition getRuntimeChildUndeclaredExtensionDefinition() {
|
||||||
|
return myRuntimeChildUndeclaredExtensionDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> theExistingDefinitions, Set<Class<? extends IBase>> theDatatypes) {
|
||||||
if (theExistingDefinitions != null) {
|
if (theExistingDefinitions != null) {
|
||||||
myClassToElementDefinitions.putAll(theExistingDefinitions);
|
myClassToElementDefinitions.putAll(theExistingDefinitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
int startSize = myClassToElementDefinitions.size();
|
int startSize = myClassToElementDefinitions.size();
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
|
Map<String, Class<? extends IBaseResource>> resourceTypes = myNameToResourceType;
|
||||||
|
|
||||||
InputStream str = myContext.getVersion().getFhirVersionPropertiesFile();
|
scanVersionPropertyFile(theDatatypes, resourceTypes, myVersion);
|
||||||
Properties prop = new Properties();
|
|
||||||
try {
|
|
||||||
prop.load(str);
|
|
||||||
for (Entry<Object, Object> nextEntry : prop.entrySet()) {
|
|
||||||
String nextKey = nextEntry.getKey().toString();
|
|
||||||
String nextValue = nextEntry.getValue().toString();
|
|
||||||
|
|
||||||
if (!nextKey.startsWith("datatype.")) {
|
|
||||||
if (nextKey.startsWith("resource.")) {
|
|
||||||
String resName = nextKey.substring("resource.".length()).toLowerCase();
|
|
||||||
myNameToResourceType.put(resName, nextValue);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Class<? extends IElement> nextClass = (Class<? extends IElement>) Class.forName((String) nextValue);
|
|
||||||
if (!IElement.class.isAssignableFrom(nextClass)) {
|
|
||||||
ourLog.warn("Class is not assignable from " + IElement.class.getSimpleName() + ": " + nextValue);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
toScan.add(nextClass);
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
ourLog.warn("Unknown class exception: " + nextValue, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new ConfigurationException("Failed to load model property file from classpath: " + "/ca/uhn/fhir/model/dstu/model.properties");
|
|
||||||
}
|
|
||||||
|
|
||||||
// toScan.add(DateDt.class);
|
// toScan.add(DateDt.class);
|
||||||
// toScan.add(CodeDt.class);
|
// toScan.add(CodeDt.class);
|
||||||
|
@ -235,7 +186,7 @@ class ModelScanner {
|
||||||
// toScan.add(QuantityDt.class);
|
// toScan.add(QuantityDt.class);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
for (Class<? extends IBase> nextClass : toScan) {
|
for (Class<? extends IBase> nextClass : theDatatypes) {
|
||||||
scan(nextClass);
|
scan(nextClass);
|
||||||
}
|
}
|
||||||
for (Iterator<Class<? extends IBase>> iter = myScanAlso.iterator(); iter.hasNext();) {
|
for (Iterator<Class<? extends IBase>> iter = myScanAlso.iterator(); iter.hasNext();) {
|
||||||
|
@ -243,10 +194,10 @@ class ModelScanner {
|
||||||
iter.remove();
|
iter.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
toScan.clear();
|
theDatatypes.clear();
|
||||||
toScan.addAll(myScanAlso);
|
theDatatypes.addAll(myScanAlso);
|
||||||
myScanAlso.clear();
|
myScanAlso.clear();
|
||||||
} while (!toScan.isEmpty());
|
} while (!theDatatypes.isEmpty());
|
||||||
|
|
||||||
for (Entry<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> nextEntry : myClassToElementDefinitions.entrySet()) {
|
for (Entry<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> nextEntry : myClassToElementDefinitions.entrySet()) {
|
||||||
if (theExistingDefinitions != null && theExistingDefinitions.containsKey(nextEntry.getKey())) {
|
if (theExistingDefinitions != null && theExistingDefinitions.containsKey(nextEntry.getKey())) {
|
||||||
|
@ -264,6 +215,47 @@ class ModelScanner {
|
||||||
ourLog.info("Done scanning FHIR library, found {} model entries in {}ms", size, time);
|
ourLog.info("Done scanning FHIR library, found {} model entries in {}ms", size, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* There are two implementations of all of the annotations (e.g. {@link Child} and
|
||||||
|
* {@link org.hl7.fhir.instance.model.annotations.Child}) since the HL7.org ones will eventually replace the HAPI
|
||||||
|
* ones. Annotations can't extend each other or implement interfaces or anything like that, so rather than duplicate
|
||||||
|
* all of the annotation processing code this method just creates an interface Proxy to simulate the HAPI
|
||||||
|
* annotations if the HL7.org ones are found instead.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private <T extends Annotation> T pullAnnotation(AnnotatedElement theTarget, Class<T> theAnnotationType) {
|
||||||
|
T retVal = theTarget.getAnnotation(theAnnotationType);
|
||||||
|
if (retVal == null) {
|
||||||
|
String sourceClassName = theAnnotationType.getName();
|
||||||
|
String candidateAltClassName = sourceClassName.replace("ca.uhn.fhir.model.api.annotation", "org.hl7.fhir.instance.model.annotations");
|
||||||
|
|
||||||
|
if (!sourceClassName.equals(candidateAltClassName)) {
|
||||||
|
try {
|
||||||
|
final Class<? extends Annotation> altAnnotationClass = (Class<? extends Annotation>) Class.forName(candidateAltClassName);
|
||||||
|
final Annotation altAnnotation = theTarget.getAnnotation(altAnnotationClass);
|
||||||
|
if (altAnnotation == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ourLog.debug("Forwarding annotation request for [{}] to class [{}]", sourceClassName, candidateAltClassName);
|
||||||
|
|
||||||
|
InvocationHandler h = new InvocationHandler() {
|
||||||
|
@Override
|
||||||
|
public Object invoke(Object theProxy, Method theMethod, Object[] theArgs) throws Throwable {
|
||||||
|
Method altMethod = altAnnotationClass.getMethod(theMethod.getName(), theMethod.getParameterTypes());
|
||||||
|
return altMethod.invoke(altAnnotation, theArgs);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
retVal = (T) Proxy.newProxyInstance(theAnnotationType.getClassLoader(), new Class<?>[] { theAnnotationType }, h);
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
private void scan(Class<? extends IBase> theClass) throws ConfigurationException {
|
private void scan(Class<? extends IBase> theClass) throws ConfigurationException {
|
||||||
BaseRuntimeElementDefinition<?> existingDef = myClassToElementDefinitions.get(theClass);
|
BaseRuntimeElementDefinition<?> existingDef = myClassToElementDefinitions.get(theClass);
|
||||||
if (existingDef != null) {
|
if (existingDef != null) {
|
||||||
|
@ -300,7 +292,7 @@ class ModelScanner {
|
||||||
if (IResourceBlock.class.isAssignableFrom(theClass)) {
|
if (IResourceBlock.class.isAssignableFrom(theClass)) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Class<? extends IResourceBlock> blockClass = (Class<? extends IResourceBlock>) theClass;
|
Class<? extends IResourceBlock> blockClass = (Class<? extends IResourceBlock>) theClass;
|
||||||
scanBlock(blockClass, blockDefinition);
|
scanBlock(blockClass);
|
||||||
} else {
|
} else {
|
||||||
throw new ConfigurationException("Type contains a @" + Block.class.getSimpleName() + " annotation but does not implement " + IResourceBlock.class.getCanonicalName() + ": " + theClass.getCanonicalName());
|
throw new ConfigurationException("Type contains a @" + Block.class.getSimpleName() + " annotation but does not implement " + IResourceBlock.class.getCanonicalName() + ": " + theClass.getCanonicalName());
|
||||||
}
|
}
|
||||||
|
@ -311,7 +303,7 @@ class ModelScanner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scanBlock(Class<? extends IResourceBlock> theClass, Block theBlockDefinition) {
|
private void scanBlock(Class<? extends IResourceBlock> theClass) {
|
||||||
ourLog.debug("Scanning resource block class: {}", theClass.getName());
|
ourLog.debug("Scanning resource block class: {}", theClass.getName());
|
||||||
|
|
||||||
String resourceName = theClass.getCanonicalName();
|
String resourceName = theClass.getCanonicalName();
|
||||||
|
@ -464,8 +456,8 @@ class ModelScanner {
|
||||||
if (order != Child.ORDER_UNKNOWN) {
|
if (order != Child.ORDER_UNKNOWN) {
|
||||||
order = order + baseElementOrder;
|
order = order + baseElementOrder;
|
||||||
}
|
}
|
||||||
int min = childAnnotation.min();
|
// int min = childAnnotation.min();
|
||||||
int max = childAnnotation.max();
|
// int max = childAnnotation.max();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Anything that's marked as unknown is given a new ID that is <0 so that it doesn't conflict with any given
|
* Anything that's marked as unknown is given a new ID that is <0 so that it doesn't conflict with any given
|
||||||
|
@ -603,47 +595,6 @@ class ModelScanner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* There are two implementations of all of the annotations (e.g. {@link Child} and
|
|
||||||
* {@link org.hl7.fhir.instance.model.annotations.Child}) since the HL7.org ones will eventually replace the HAPI
|
|
||||||
* ones. Annotations can't extend each other or implement interfaces or anything like that, so rather than duplicate
|
|
||||||
* all of the annotation processing code this method just creates an interface Proxy to simulate the HAPI
|
|
||||||
* annotations if the HL7.org ones are found instead.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private <T extends Annotation> T pullAnnotation(AnnotatedElement theTarget, Class<T> theAnnotationType) {
|
|
||||||
T retVal = theTarget.getAnnotation(theAnnotationType);
|
|
||||||
if (retVal == null) {
|
|
||||||
String sourceClassName = theAnnotationType.getName();
|
|
||||||
String candidateAltClassName = sourceClassName.replace("ca.uhn.fhir.model.api.annotation", "org.hl7.fhir.instance.model.annotations");
|
|
||||||
|
|
||||||
if (!sourceClassName.equals(candidateAltClassName)) {
|
|
||||||
try {
|
|
||||||
final Class<? extends Annotation> altAnnotationClass = (Class<? extends Annotation>) Class.forName(candidateAltClassName);
|
|
||||||
final Annotation altAnnotation = theTarget.getAnnotation(altAnnotationClass);
|
|
||||||
if (altAnnotation == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
ourLog.debug("Forwarding annotation request for [{}] to class [{}]", sourceClassName, candidateAltClassName);
|
|
||||||
|
|
||||||
InvocationHandler h = new InvocationHandler() {
|
|
||||||
@Override
|
|
||||||
public Object invoke(Object theProxy, Method theMethod, Object[] theArgs) throws Throwable {
|
|
||||||
Method altMethod = altAnnotationClass.getMethod(theMethod.getName(), theMethod.getParameterTypes());
|
|
||||||
return altMethod.invoke(altAnnotation, theArgs);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
retVal = (T) Proxy.newProxyInstance(theAnnotationType.getClassLoader(), new Class<?>[] { theAnnotationType }, h);
|
|
||||||
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return retVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String scanPrimitiveDatatype(Class<? extends IPrimitiveType<?>> theClass, DatatypeDef theDatatypeDefinition) {
|
private String scanPrimitiveDatatype(Class<? extends IPrimitiveType<?>> theClass, DatatypeDef theDatatypeDefinition) {
|
||||||
ourLog.debug("Scanning resource class: {}", theClass.getName());
|
ourLog.debug("Scanning resource class: {}", theClass.getName());
|
||||||
|
|
||||||
|
@ -685,27 +636,8 @@ class ModelScanner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (myNameToResourceDefinitions.containsKey(resourceName)) {
|
|
||||||
// if (!myNameToResourceDefinitions.get(resourceName).getImplementingClass().equals(theClass)) {
|
|
||||||
// // throw new
|
|
||||||
// // ConfigurationException("Detected duplicate element name '" +
|
|
||||||
// // resourceName + "' in types '" + theClass.getCanonicalName() +
|
|
||||||
// // "' and '"
|
|
||||||
// // +
|
|
||||||
// // myNameToResourceDefinitions.get(resourceName).getImplementingClass()
|
|
||||||
// // + "'");
|
|
||||||
// } else {
|
|
||||||
// return resourceName;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
String resourceId = resourceDefinition.id();
|
String resourceId = resourceDefinition.id();
|
||||||
if (isBlank(resourceId)) {
|
if (!isBlank(resourceId)) {
|
||||||
// throw new ConfigurationException("Resource type @" +
|
|
||||||
// ResourceDef.class.getSimpleName() +
|
|
||||||
// " annotation contains no resource ID: " +
|
|
||||||
// theClass.getCanonicalName());
|
|
||||||
} else {
|
|
||||||
if (myIdToResourceDefinition.containsKey(resourceId)) {
|
if (myIdToResourceDefinition.containsKey(resourceId)) {
|
||||||
throw new ConfigurationException("The following resource types have the same ID of '" + resourceId + "' - " + theClass.getCanonicalName() + " and " + myIdToResourceDefinition.get(resourceId).getImplementingClass().getCanonicalName());
|
throw new ConfigurationException("The following resource types have the same ID of '" + resourceId + "' - " + theClass.getCanonicalName() + " and " + myIdToResourceDefinition.get(resourceId).getImplementingClass().getCanonicalName());
|
||||||
}
|
}
|
||||||
|
@ -714,7 +646,7 @@ class ModelScanner {
|
||||||
RuntimeResourceDefinition resourceDef = new RuntimeResourceDefinition(myContext, resourceName, theClass, resourceDefinition);
|
RuntimeResourceDefinition resourceDef = new RuntimeResourceDefinition(myContext, resourceName, theClass, resourceDefinition);
|
||||||
myClassToElementDefinitions.put(theClass, resourceDef);
|
myClassToElementDefinitions.put(theClass, resourceDef);
|
||||||
if (primaryNameProvider) {
|
if (primaryNameProvider) {
|
||||||
if (resourceDef.getStructureVersion() == myContext.getVersion().getVersion()) {
|
if (resourceDef.getStructureVersion() == myVersion) {
|
||||||
myNameToResourceDefinitions.put(resourceName, resourceDef);
|
myNameToResourceDefinitions.put(resourceName, resourceDef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -781,4 +713,53 @@ class ModelScanner {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void scanVersionPropertyFile(Set<Class<? extends IBase>> theDatatypes, Map<String, Class<? extends IBaseResource>> theResourceTypes, FhirVersionEnum version) {
|
||||||
|
InputStream str = version.getVersionImplementation().getFhirVersionPropertiesFile();
|
||||||
|
Properties prop = new Properties();
|
||||||
|
try {
|
||||||
|
prop.load(str);
|
||||||
|
for (Entry<Object, Object> nextEntry : prop.entrySet()) {
|
||||||
|
String nextKey = nextEntry.getKey().toString();
|
||||||
|
String nextValue = nextEntry.getValue().toString();
|
||||||
|
|
||||||
|
if (nextKey.startsWith("datatype.")) {
|
||||||
|
if (theDatatypes != null) {
|
||||||
|
try {
|
||||||
|
// Datatypes
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Class<? extends IElement> nextClass = (Class<? extends IElement>) Class.forName(nextValue);
|
||||||
|
if (!IElement.class.isAssignableFrom(nextClass)) {
|
||||||
|
ourLog.warn("Class is not assignable from " + IElement.class.getSimpleName() + ": " + nextValue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
theDatatypes.add(nextClass);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
ourLog.error("Unknown class[" + nextValue+ "] for data type definition: " + nextKey.substring("datatype.".length()), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (nextKey.startsWith("resource.")) {
|
||||||
|
// Resources
|
||||||
|
String resName = nextKey.substring("resource.".length()).toLowerCase();
|
||||||
|
try {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Class<? extends IBaseResource> nextClass = (Class<? extends IBaseResource>) Class.forName(nextValue);
|
||||||
|
if (!IBaseResource.class.isAssignableFrom(nextClass)) {
|
||||||
|
ourLog.warn("Class is not assignable from " + IBaseResource.class.getSimpleName() + ": " + nextValue);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
theResourceTypes.put(resName, nextClass);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
ourLog.error("Unknown class[" + nextValue+ "] for resource definition: " + nextKey.substring("resource.".length()), e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ourLog.warn("Unexpected property in version property file: {}={}", nextKey, nextValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ConfigurationException("Failed to load model property file from classpath: " + "/ca/uhn/fhir/model/dstu/model.properties");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ package ca.uhn.fhir.parser;
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
@ -64,28 +64,6 @@ public abstract class BaseParser implements IParser {
|
||||||
myContext = theContext;
|
myContext = theContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String fixContainedResourceId(String theValue) {
|
|
||||||
if (StringUtils.isNotBlank(theValue) && theValue.charAt(0) == '#') {
|
|
||||||
return theValue.substring(1);
|
|
||||||
}
|
|
||||||
return theValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String determineResourceBaseUrl(String bundleBaseUrl, BundleEntry theEntry) {
|
|
||||||
IResource resource = theEntry.getResource();
|
|
||||||
if (resource == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String resourceBaseUrl = null;
|
|
||||||
if (resource.getId() != null && resource.getId().hasBaseUrl()) {
|
|
||||||
if (!resource.getId().getBaseUrl().equals(bundleBaseUrl)) {
|
|
||||||
resourceBaseUrl = resource.getId().getBaseUrl();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return resourceBaseUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void containResourcesForEncoding(ContainedResources theContained, IBaseResource theResource, IBaseResource theTarget) {
|
private void containResourcesForEncoding(ContainedResources theContained, IBaseResource theResource, IBaseResource theTarget) {
|
||||||
|
|
||||||
Set<String> allIds = new HashSet<String>();
|
Set<String> allIds = new HashSet<String>();
|
||||||
|
@ -175,6 +153,40 @@ public abstract class BaseParser implements IParser {
|
||||||
myContainedResources = contained;
|
myContainedResources = contained;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String determineReferenceText(BaseResourceReferenceDt theRef) {
|
||||||
|
String reference = theRef.getReference().getValue();
|
||||||
|
if (isBlank(reference)) {
|
||||||
|
if (theRef.getResource() != null) {
|
||||||
|
IdDt containedId = getContainedResources().getResourceId(theRef.getResource());
|
||||||
|
if (containedId != null && !containedId.isEmpty()) {
|
||||||
|
if (containedId.isLocal()) {
|
||||||
|
reference = containedId.getValue();
|
||||||
|
} else {
|
||||||
|
reference = "#" + containedId.getValue();
|
||||||
|
}
|
||||||
|
} else if (theRef.getResource().getId() != null && theRef.getResource().getId().hasIdPart()) {
|
||||||
|
reference = theRef.getResource().getId().getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String determineResourceBaseUrl(String bundleBaseUrl, BundleEntry theEntry) {
|
||||||
|
IResource resource = theEntry.getResource();
|
||||||
|
if (resource == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String resourceBaseUrl = null;
|
||||||
|
if (resource.getId() != null && resource.getId().hasBaseUrl()) {
|
||||||
|
if (!resource.getId().getBaseUrl().equals(bundleBaseUrl)) {
|
||||||
|
resourceBaseUrl = resource.getId().getBaseUrl();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resourceBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String encodeBundleToString(Bundle theBundle) throws DataFormatException {
|
public String encodeBundleToString(Bundle theBundle) throws DataFormatException {
|
||||||
if (theBundle == null) {
|
if (theBundle == null) {
|
||||||
|
@ -212,6 +224,13 @@ public abstract class BaseParser implements IParser {
|
||||||
return stringWriter.toString();
|
return stringWriter.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String fixContainedResourceId(String theValue) {
|
||||||
|
if (StringUtils.isNotBlank(theValue) && theValue.charAt(0) == '#') {
|
||||||
|
return theValue.substring(1);
|
||||||
|
}
|
||||||
|
return theValue;
|
||||||
|
}
|
||||||
|
|
||||||
ContainedResources getContainedResources() {
|
ContainedResources getContainedResources() {
|
||||||
return myContainedResources;
|
return myContainedResources;
|
||||||
}
|
}
|
||||||
|
@ -279,30 +298,11 @@ public abstract class BaseParser implements IParser {
|
||||||
throw new DataFormatException(nextChild + " has no child of type " + theType);
|
throw new DataFormatException(nextChild + " has no child of type " + theType);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String determineReferenceText(BaseResourceReferenceDt theRef) {
|
|
||||||
String reference = theRef.getReference().getValue();
|
|
||||||
if (isBlank(reference)) {
|
|
||||||
if (theRef.getResource() != null) {
|
|
||||||
IdDt containedId = getContainedResources().getResourceId(theRef.getResource());
|
|
||||||
if (containedId != null && !containedId.isEmpty()) {
|
|
||||||
if (containedId.isLocal()) {
|
|
||||||
reference = containedId.getValue();
|
|
||||||
} else {
|
|
||||||
reference = "#" + containedId.getValue();
|
|
||||||
}
|
|
||||||
} else if (theRef.getResource().getId() != null && theRef.getResource().getId().hasIdPart()) {
|
|
||||||
reference = theRef.getResource().getId().getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return reference;
|
|
||||||
}
|
|
||||||
|
|
||||||
static class ContainedResources {
|
static class ContainedResources {
|
||||||
private long myNextContainedId = 1;
|
private long myNextContainedId = 1;
|
||||||
|
|
||||||
private IdentityHashMap<IBaseResource, IdDt> myResourceToId = new IdentityHashMap<IBaseResource, IdDt>();
|
|
||||||
private List<IBaseResource> myResources = new ArrayList<IBaseResource>();
|
private List<IBaseResource> myResources = new ArrayList<IBaseResource>();
|
||||||
|
private IdentityHashMap<IBaseResource, IdDt> myResourceToId = new IdentityHashMap<IBaseResource, IdDt>();
|
||||||
|
|
||||||
public void addContained(IBaseResource theResource) {
|
public void addContained(IBaseResource theResource) {
|
||||||
if (myResourceToId.containsKey(theResource)) {
|
if (myResourceToId.containsKey(theResource)) {
|
||||||
|
|
|
@ -1104,7 +1104,7 @@ public class JsonParser extends BaseParser implements IParser {
|
||||||
def = myContext.getResourceDefinition(resourceType);
|
def = myContext.getResourceDefinition(resourceType);
|
||||||
}
|
}
|
||||||
|
|
||||||
ParserState<? extends IBaseResource> state = (ParserState<? extends IBaseResource>) ParserState.getPreResourceInstance(def.getImplementingClass(), myContext, true);
|
ParserState<? extends IBaseResource> state = ParserState.getPreResourceInstance(def.getImplementingClass(), myContext, true);
|
||||||
state.enteringNewElement(null, def.getName());
|
state.enteringNewElement(null, def.getName());
|
||||||
|
|
||||||
parseChildren(object, state);
|
parseChildren(object, state);
|
||||||
|
@ -1117,11 +1117,6 @@ public class JsonParser extends BaseParser implements IParser {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends IBaseResource> T parseResource(Class<T> theResourceType, String theMessageString) {
|
|
||||||
return parseResource(theResourceType, new StringReader(theMessageString));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TagList parseTagList(Reader theReader) {
|
public TagList parseTagList(Reader theReader) {
|
||||||
JsonReader reader = Json.createReader(theReader);
|
JsonReader reader = Json.createReader(theReader);
|
||||||
|
|
|
@ -121,6 +121,34 @@ class ParserState<T> {
|
||||||
return myState.isPreResource();
|
return myState.isPreResource();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BaseContainedDt newContainedDt(IResource theTarget) {
|
||||||
|
|
||||||
|
BaseContainedDt newChildInstance;
|
||||||
|
try {
|
||||||
|
newChildInstance = theTarget.getStructureFhirVersionEnum().getVersionImplementation().getContainedType().newInstance();
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
||||||
|
}
|
||||||
|
return newChildInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseResourceReferenceDt newResourceReferenceDt(IBase theFirstTarget, IResource theTarget) {
|
||||||
|
|
||||||
|
BaseResourceReferenceDt newChildInstance;
|
||||||
|
try {
|
||||||
|
// if (theFirstTarget instanceof IResource)
|
||||||
|
IFhirVersion version = theTarget.getStructureFhirVersionEnum().getVersionImplementation();
|
||||||
|
newChildInstance = version.getResourceReferenceType().newInstance();
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
||||||
|
}
|
||||||
|
return newChildInstance;
|
||||||
|
}
|
||||||
|
|
||||||
private void pop() {
|
private void pop() {
|
||||||
myState = myState.myStack;
|
myState = myState.myStack;
|
||||||
myState.wereBack();
|
myState.wereBack();
|
||||||
|
@ -237,10 +265,10 @@ class ParserState<T> {
|
||||||
private static final int STATE_TERM = 1;
|
private static final int STATE_TERM = 1;
|
||||||
|
|
||||||
private int myCatState = STATE_NONE;
|
private int myCatState = STATE_NONE;
|
||||||
private TagList myTagList;
|
|
||||||
private String myTerm;
|
|
||||||
private String myLabel;
|
private String myLabel;
|
||||||
private String myScheme;
|
private String myScheme;
|
||||||
|
private TagList myTagList;
|
||||||
|
private String myTerm;
|
||||||
|
|
||||||
public AtomCategoryState(TagList theTagList) {
|
public AtomCategoryState(TagList theTagList) {
|
||||||
super(null);
|
super(null);
|
||||||
|
@ -932,6 +960,33 @@ class ParserState<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class BundleEntrySearchState extends BaseState {
|
||||||
|
|
||||||
|
private BundleEntry myEntry;
|
||||||
|
|
||||||
|
public BundleEntrySearchState(BundleEntry theEntry) {
|
||||||
|
super(null);
|
||||||
|
myEntry = theEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void endingElement() throws DataFormatException {
|
||||||
|
pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
||||||
|
if ("mode".equals(theLocalPart)) {
|
||||||
|
push(new PrimitiveState(getPreResourceState(), myEntry.getSearchMode()));
|
||||||
|
} else if ("score".equals(theLocalPart)) {
|
||||||
|
push(new PrimitiveState(getPreResourceState(), myEntry.getScore()));
|
||||||
|
} else {
|
||||||
|
throw new DataFormatException("Unexpected element in Bundle.entry.search: " + theLocalPart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class BundleEntryState extends BaseState {
|
public class BundleEntryState extends BaseState {
|
||||||
|
|
||||||
private BundleEntry myEntry;
|
private BundleEntry myEntry;
|
||||||
|
@ -1030,34 +1085,6 @@ class ParserState<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class BundleEntrySearchState extends BaseState {
|
|
||||||
|
|
||||||
private BundleEntry myEntry;
|
|
||||||
|
|
||||||
public BundleEntrySearchState(BundleEntry theEntry) {
|
|
||||||
super(null);
|
|
||||||
myEntry = theEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void endingElement() throws DataFormatException {
|
|
||||||
pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
|
||||||
if ("mode".equals(theLocalPart)) {
|
|
||||||
push(new PrimitiveState(getPreResourceState(), myEntry.getSearchMode()));
|
|
||||||
} else if ("score".equals(theLocalPart)) {
|
|
||||||
push(new PrimitiveState(getPreResourceState(), myEntry.getScore()));
|
|
||||||
} else {
|
|
||||||
throw new DataFormatException("Unexpected element in Bundle.entry.search: " + theLocalPart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class BundleEntryTransactionState extends BaseState {
|
public class BundleEntryTransactionState extends BaseState {
|
||||||
|
|
||||||
private BundleEntry myEntry;
|
private BundleEntry myEntry;
|
||||||
|
@ -1089,10 +1116,10 @@ class ParserState<T> {
|
||||||
|
|
||||||
private BundleEntry myEntry;
|
private BundleEntry myEntry;
|
||||||
private String myHref;
|
private String myHref;
|
||||||
private Bundle myInstance;
|
|
||||||
private String myRel;
|
|
||||||
private boolean myInRelation = false;
|
private boolean myInRelation = false;
|
||||||
|
private Bundle myInstance;
|
||||||
private boolean myInUrl = false;
|
private boolean myInUrl = false;
|
||||||
|
private String myRel;
|
||||||
|
|
||||||
public BundleLinkState(Bundle theInstance) {
|
public BundleLinkState(Bundle theInstance) {
|
||||||
super(null);
|
super(null);
|
||||||
|
@ -1178,34 +1205,6 @@ class ParserState<T> {
|
||||||
pop();
|
pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void wereBack() {
|
|
||||||
for (BundleEntry nextEntry : myInstance.getEntries()) {
|
|
||||||
IResource nextResource = nextEntry.getResource();
|
|
||||||
|
|
||||||
String bundleBaseUrl = myInstance.getLinkBase().getValue();
|
|
||||||
String entryBaseUrl = nextEntry.getLinkBase().getValue();
|
|
||||||
String version = ResourceMetadataKeyEnum.VERSION.get(nextResource);
|
|
||||||
String resourceName = myContext.getResourceDefinition(nextResource).getName();
|
|
||||||
String bundleIdPart = nextResource.getId().getIdPart();
|
|
||||||
if (isNotBlank(bundleIdPart)) {
|
|
||||||
if (isNotBlank(entryBaseUrl)) {
|
|
||||||
nextResource.setId(new IdDt(entryBaseUrl, resourceName, bundleIdPart, version));
|
|
||||||
} else {
|
|
||||||
nextResource.setId(new IdDt(bundleBaseUrl, resourceName, bundleIdPart, version));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String bundleVersion = (String) myInstance.getResourceMetadata().get(ResourceMetadataKeyEnum.VERSION);
|
|
||||||
String baseUrl = myInstance.getLinkBase().getValue();
|
|
||||||
String id = myInstance.getId().getIdPart();
|
|
||||||
if (isNotBlank(id)) {
|
|
||||||
myInstance.setId(new IdDt(baseUrl, "Bundle", id, bundleVersion));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
||||||
if ("id".equals(theLocalPart)) {
|
if ("id".equals(theLocalPart)) {
|
||||||
|
@ -1264,12 +1263,40 @@ class ParserState<T> {
|
||||||
return myInstance;
|
return myInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void wereBack() {
|
||||||
|
for (BundleEntry nextEntry : myInstance.getEntries()) {
|
||||||
|
IResource nextResource = nextEntry.getResource();
|
||||||
|
|
||||||
|
String bundleBaseUrl = myInstance.getLinkBase().getValue();
|
||||||
|
String entryBaseUrl = nextEntry.getLinkBase().getValue();
|
||||||
|
String version = ResourceMetadataKeyEnum.VERSION.get(nextResource);
|
||||||
|
String resourceName = myContext.getResourceDefinition(nextResource).getName();
|
||||||
|
String bundleIdPart = nextResource.getId().getIdPart();
|
||||||
|
if (isNotBlank(bundleIdPart)) {
|
||||||
|
if (isNotBlank(entryBaseUrl)) {
|
||||||
|
nextResource.setId(new IdDt(entryBaseUrl, resourceName, bundleIdPart, version));
|
||||||
|
} else {
|
||||||
|
nextResource.setId(new IdDt(bundleBaseUrl, resourceName, bundleIdPart, version));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String bundleVersion = (String) myInstance.getResourceMetadata().get(ResourceMetadataKeyEnum.VERSION);
|
||||||
|
String baseUrl = myInstance.getLinkBase().getValue();
|
||||||
|
String id = myInstance.getId().getIdPart();
|
||||||
|
if (isNotBlank(id)) {
|
||||||
|
myInstance.setId(new IdDt(baseUrl, "Bundle", id, bundleVersion));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ContainedResourcesState extends PreResourceState {
|
private class ContainedResourcesState extends PreResourceState {
|
||||||
|
|
||||||
public ContainedResourcesState(PreResourceState thePreResourcesState) {
|
public ContainedResourcesState(PreResourceState thePreResourcesState) {
|
||||||
super(thePreResourcesState);
|
super(thePreResourcesState, thePreResourcesState.myInstance.getStructureFhirVersionEnum());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1359,7 +1386,6 @@ class ParserState<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enteringNewElementExtension(StartElement theElement, String theUrlAttr, boolean theIsModifier) {
|
public void enteringNewElementExtension(StartElement theElement, String theUrlAttr, boolean theIsModifier) {
|
||||||
RuntimeChildDeclaredExtensionDefinition declaredExtension = myDefinition.getChildExtensionForUrl(theUrlAttr);
|
RuntimeChildDeclaredExtensionDefinition declaredExtension = myDefinition.getChildExtensionForUrl(theUrlAttr);
|
||||||
|
@ -1382,35 +1408,7 @@ class ParserState<T> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseResourceReferenceDt newResourceReferenceDt(IBase theFirstTarget, IResource theTarget) {
|
private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
|
|
||||||
BaseResourceReferenceDt newChildInstance;
|
|
||||||
try {
|
|
||||||
// if (theFirstTarget instanceof IResource)
|
|
||||||
IFhirVersion version = theTarget.getStructureFhirVersionEnum().getVersionImplementation();
|
|
||||||
newChildInstance = version.getResourceReferenceType().newInstance();
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
|
||||||
}
|
|
||||||
return newChildInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private BaseContainedDt newContainedDt(IResource theTarget) {
|
|
||||||
|
|
||||||
BaseContainedDt newChildInstance;
|
|
||||||
try {
|
|
||||||
newChildInstance = theTarget.getStructureFhirVersionEnum().getVersionImplementation().getContainedType().newInstance();
|
|
||||||
} catch (InstantiationException e) {
|
|
||||||
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
throw new ConfigurationException("Failed to instantiate " + myContext.getVersion().getResourceReferenceType(), e);
|
|
||||||
}
|
|
||||||
return newChildInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
|
||||||
|
|
||||||
private BaseRuntimeElementCompositeDefinition<?> myDefinition;
|
private BaseRuntimeElementCompositeDefinition<?> myDefinition;
|
||||||
private T2 myInstance;
|
private T2 myInstance;
|
||||||
|
@ -1578,7 +1576,7 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
BaseRuntimeElementCompositeDefinition<?> compositeTarget = (BaseRuntimeElementCompositeDefinition<?>) target;
|
BaseRuntimeElementCompositeDefinition<?> compositeTarget = (BaseRuntimeElementCompositeDefinition<?>) target;
|
||||||
ICompositeDatatype newChildInstance = (ICompositeDatatype) compositeTarget.newInstance();
|
ICompositeDatatype newChildInstance = (ICompositeDatatype) compositeTarget.newInstance();
|
||||||
myExtension.setValue(newChildInstance);
|
myExtension.setValue(newChildInstance);
|
||||||
ElementCompositeState newState = new ElementCompositeState(getPreResourceState(), compositeTarget, newChildInstance);
|
ElementCompositeState<IBase> newState = new ElementCompositeState<IBase>(getPreResourceState(), compositeTarget, newChildInstance);
|
||||||
push(newState);
|
push(newState);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1716,33 +1714,12 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ResourceState extends ElementCompositeState<IResource>
|
|
||||||
{
|
|
||||||
|
|
||||||
public ResourceState(PreResourceState thePreResourceState, BaseRuntimeElementCompositeDefinition<?> theDef, IResource theInstance) {
|
|
||||||
super(thePreResourceState, theDef, theInstance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void enteringNewElement(String theNamespace, String theChildName) throws DataFormatException {
|
|
||||||
if ("id".equals(theChildName)) {
|
|
||||||
push(new PrimitiveState(getPreResourceState(), getCurrentElement().getId()));
|
|
||||||
} else if ("meta".equals(theChildName)) {
|
|
||||||
push(new MetaElementState(getPreResourceState(), getCurrentElement().getResourceMetadata()));
|
|
||||||
}else {
|
|
||||||
super.enteringNewElement(theNamespace, theChildName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private class PreResourceState extends BaseState {
|
private class PreResourceState extends BaseState {
|
||||||
|
|
||||||
private Map<String, IBaseResource> myContainedResources = new HashMap<String, IBaseResource>();
|
private Map<String, IBaseResource> myContainedResources = new HashMap<String, IBaseResource>();
|
||||||
private BundleEntry myEntry;
|
private BundleEntry myEntry;
|
||||||
private IResource myInstance;
|
private IResource myInstance;
|
||||||
|
private FhirVersionEnum myParentVersion;
|
||||||
private List<BaseResourceReferenceDt> myResourceReferences = new ArrayList<BaseResourceReferenceDt>();
|
private List<BaseResourceReferenceDt> myResourceReferences = new ArrayList<BaseResourceReferenceDt>();
|
||||||
private Class<? extends IBaseResource> myResourceType;
|
private Class<? extends IBaseResource> myResourceType;
|
||||||
|
|
||||||
|
@ -1750,6 +1727,11 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
super(null);
|
super(null);
|
||||||
myEntry = theEntry;
|
myEntry = theEntry;
|
||||||
myResourceType = theResourceType;
|
myResourceType = theResourceType;
|
||||||
|
if (theResourceType != null) {
|
||||||
|
myParentVersion = myContext.getResourceDefinition(theResourceType).getStructureVersion();
|
||||||
|
} else {
|
||||||
|
myParentVersion = myContext.getVersion().getVersion();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1757,12 +1739,13 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
* May be null
|
* May be null
|
||||||
*/
|
*/
|
||||||
public PreResourceState(Class<? extends IBaseResource> theResourceType) {
|
public PreResourceState(Class<? extends IBaseResource> theResourceType) {
|
||||||
super(null);
|
this(null, theResourceType);
|
||||||
myResourceType = theResourceType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PreResourceState(PreResourceState thePreResourcesState) {
|
public PreResourceState(PreResourceState thePreResourcesState, FhirVersionEnum theParentVersion) {
|
||||||
super(thePreResourcesState);
|
super(thePreResourcesState);
|
||||||
|
Validate.notNull(theParentVersion);
|
||||||
|
myParentVersion = theParentVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1774,9 +1757,9 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
public void enteringNewElement(String theNamespaceURI, String theLocalPart) throws DataFormatException {
|
||||||
BaseRuntimeElementDefinition<?> definition;
|
BaseRuntimeElementDefinition<?> definition;
|
||||||
if (myResourceType == null) {
|
if (myResourceType == null) {
|
||||||
definition = myContext.getResourceDefinition(theLocalPart);
|
definition = myContext.getResourceDefinition(myParentVersion, theLocalPart);
|
||||||
if ((definition == null)) {
|
if ((definition == null)) {
|
||||||
throw new DataFormatException("Element '" + theLocalPart + "' is not a resource, expected a resource at this position");
|
throw new DataFormatException("Element '" + theLocalPart + "' is not a known resource type, expected a resource at this position");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
definition = myContext.getResourceDefinition(myResourceType);
|
definition = myContext.getResourceDefinition(myResourceType);
|
||||||
|
@ -2035,6 +2018,25 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
DISPLAY, INITIAL, REFERENCE
|
DISPLAY, INITIAL, REFERENCE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ResourceState extends ElementCompositeState<IResource> {
|
||||||
|
|
||||||
|
public ResourceState(PreResourceState thePreResourceState, BaseRuntimeElementCompositeDefinition<?> theDef, IResource theInstance) {
|
||||||
|
super(thePreResourceState, theDef, theInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enteringNewElement(String theNamespace, String theChildName) throws DataFormatException {
|
||||||
|
if ("id".equals(theChildName)) {
|
||||||
|
push(new PrimitiveState(getPreResourceState(), getCurrentElement().getId()));
|
||||||
|
} else if ("meta".equals(theChildName)) {
|
||||||
|
push(new MetaElementState(getPreResourceState(), getCurrentElement().getResourceMetadata()));
|
||||||
|
} else {
|
||||||
|
super.enteringNewElement(theNamespace, theChildName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private class SwallowChildrenWholeState extends BaseState {
|
private class SwallowChildrenWholeState extends BaseState {
|
||||||
|
|
||||||
private int myDepth;
|
private int myDepth;
|
||||||
|
@ -2095,11 +2097,11 @@ private class ElementCompositeState<T2 extends IBase> extends BaseState {
|
||||||
|
|
||||||
private static final int SCHEME = 3;
|
private static final int SCHEME = 3;
|
||||||
private static final int TERM = 1;
|
private static final int TERM = 1;
|
||||||
|
private String myLabel;
|
||||||
|
private String myScheme;
|
||||||
private int mySubState = 0;
|
private int mySubState = 0;
|
||||||
private TagList myTagList;
|
private TagList myTagList;
|
||||||
private String myTerm;
|
private String myTerm;
|
||||||
private String myLabel;
|
|
||||||
private String myScheme;
|
|
||||||
|
|
||||||
public TagState(TagList theTagList) {
|
public TagState(TagList theTagList) {
|
||||||
super(null);
|
super(null);
|
||||||
|
|
|
@ -926,7 +926,6 @@ public class XmlParser extends BaseParser implements IParser {
|
||||||
@Override
|
@Override
|
||||||
public <T extends IBaseResource> T parseResource(Class<T> theResourceType, Reader theReader) {
|
public <T extends IBaseResource> T parseResource(Class<T> theResourceType, Reader theReader) {
|
||||||
XMLEventReader streamReader = createStreamReader(theReader);
|
XMLEventReader streamReader = createStreamReader(theReader);
|
||||||
|
|
||||||
return parseResource(theResourceType, streamReader);
|
return parseResource(theResourceType, streamReader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
# Core Library Messages
|
# Core Library Messages
|
||||||
|
ca.uhn.fhir.context.FhirContext.unknownResourceName=Unknown resource name "{0}" (this name is not known in FHIR version "{1}")
|
||||||
ca.uhn.fhir.context.FhirContext.noStructures=Could not find any HAPI-FHIR structure JARs on the classpath. Note that as of HAPI-FHIR v0.8, a separate FHIR strcture JAR must be added to your classpath (or project pom.xml if you are using Maven)
|
ca.uhn.fhir.context.FhirContext.noStructures=Could not find any HAPI-FHIR structure JARs on the classpath. Note that as of HAPI-FHIR v0.8, a separate FHIR strcture JAR must be added to your classpath (or project pom.xml if you are using Maven)
|
||||||
ca.uhn.fhir.context.FhirContext.noStructuresForSpecifiedVersion=Could not find the HAPI-FHIR structure JAR on the classpath for version {0}. Note that as of HAPI-FHIR v0.8, a separate FHIR strcture JAR must be added to your classpath (or project pom.xml if you are using Maven)
|
ca.uhn.fhir.context.FhirContext.noStructuresForSpecifiedVersion=Could not find the HAPI-FHIR structure JAR on the classpath for version {0}. Note that as of HAPI-FHIR v0.8, a separate FHIR strcture JAR must be added to your classpath (or project pom.xml if you are using Maven)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package ca.uhn.fhir.context;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class MultiVersionModelScannerTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testScan() {
|
||||||
|
FhirContext ctx = FhirContext.forDstu1();
|
||||||
|
|
||||||
|
RuntimeResourceDefinition def;
|
||||||
|
def = ctx.getResourceDefinition(ca.uhn.fhir.model.dstu2.resource.Patient.class);
|
||||||
|
assertEquals(FhirVersionEnum.DSTU2, def.getStructureVersion());
|
||||||
|
|
||||||
|
def = ctx.getResourceDefinition(new ca.uhn.fhir.model.dstu2.resource.Patient());
|
||||||
|
assertEquals(FhirVersionEnum.DSTU2, def.getStructureVersion());
|
||||||
|
|
||||||
|
def = ctx.getResourceDefinition("Patient");
|
||||||
|
assertEquals(FhirVersionEnum.DSTU1, def.getStructureVersion());
|
||||||
|
assertEquals(ca.uhn.fhir.model.dstu.resource.Patient.class, def.getImplementingClass());
|
||||||
|
|
||||||
|
def = ctx.getResourceDefinition(FhirVersionEnum.DSTU2, "Patient");
|
||||||
|
assertEquals(FhirVersionEnum.DSTU2, def.getStructureVersion());
|
||||||
|
assertEquals(ca.uhn.fhir.model.dstu2.resource.Patient.class, def.getImplementingClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ public class MultiVersionJsonParserTest {
|
||||||
p.addIdentifier("urn:sys", "001");
|
p.addIdentifier("urn:sys", "001");
|
||||||
p.addUndeclaredExtension(false, "http://foo#ext", new QuantityDt(2.2));
|
p.addUndeclaredExtension(false, "http://foo#ext", new QuantityDt(2.2));
|
||||||
|
|
||||||
String str = FhirContext.forDev().newJsonParser().encodeResourceToString(p);
|
String str = FhirContext.forDstu2().newJsonParser().encodeResourceToString(p);
|
||||||
ourLog.info(str);
|
ourLog.info(str);
|
||||||
|
|
||||||
assertThat(str,StringContains.containsString("{\"resourceType\":\"Patient\",\"http://foo#ext\":[{\"valueQuantity\":{\"value\":2.2}}],\"identifier\":[{\"system\":\"urn:sys\",\"value\":\"001\"}]}"));
|
assertThat(str,StringContains.containsString("{\"resourceType\":\"Patient\",\"http://foo#ext\":[{\"valueQuantity\":{\"value\":2.2}}],\"identifier\":[{\"system\":\"urn:sys\",\"value\":\"001\"}]}"));
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="owner.project.facets" value="java"/>
|
<attribute name="owner.project.facets" value="java"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<faceted-project>
|
<faceted-project>
|
||||||
<installed facet="jst.utility" version="1.0"/>
|
<installed facet="jst.utility" version="1.0"/>
|
||||||
<installed facet="java" version="1.6"/>
|
<installed facet="java" version="1.7"/>
|
||||||
</faceted-project>
|
</faceted-project>
|
||||||
|
|
|
@ -83,7 +83,6 @@ import ca.uhn.fhir.model.api.Tag;
|
||||||
import ca.uhn.fhir.model.api.TagList;
|
import ca.uhn.fhir.model.api.TagList;
|
||||||
import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
||||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||||
import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
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.parser.DataFormatException;
|
import ca.uhn.fhir.parser.DataFormatException;
|
||||||
|
@ -537,8 +536,8 @@ public abstract class BaseFhirDao implements IDao {
|
||||||
|
|
||||||
theEntity.setResourceType(toResourceName(theResource));
|
theEntity.setResourceType(toResourceName(theResource));
|
||||||
|
|
||||||
List<ResourceReferenceDt> refs = myContext.newTerser().getAllPopulatedChildElementsOfType(theResource, ResourceReferenceDt.class);
|
List<BaseResourceReferenceDt> refs = myContext.newTerser().getAllPopulatedChildElementsOfType(theResource, BaseResourceReferenceDt.class);
|
||||||
for (ResourceReferenceDt nextRef : refs) {
|
for (BaseResourceReferenceDt nextRef : refs) {
|
||||||
if (nextRef.getReference().isEmpty() == false) {
|
if (nextRef.getReference().isEmpty() == false) {
|
||||||
if (nextRef.getReference().hasVersionIdPart()) {
|
if (nextRef.getReference().hasVersionIdPart()) {
|
||||||
nextRef.setReference(nextRef.getReference().toUnqualifiedVersionless());
|
nextRef.setReference(nextRef.getReference().toUnqualifiedVersionless());
|
||||||
|
|
|
@ -54,9 +54,9 @@ import ca.uhn.fhir.model.api.IQueryParameterAnd;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
||||||
import ca.uhn.fhir.model.api.TagList;
|
import ca.uhn.fhir.model.api.TagList;
|
||||||
|
import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
||||||
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
|
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
|
||||||
import ca.uhn.fhir.model.dstu.valueset.IssueSeverityEnum;
|
import ca.uhn.fhir.model.dstu.valueset.IssueSeverityEnum;
|
||||||
import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
|
|
||||||
import ca.uhn.fhir.model.primitive.IdDt;
|
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.model.valueset.BundleEntryTransactionOperationEnum;
|
import ca.uhn.fhir.model.valueset.BundleEntryTransactionOperationEnum;
|
||||||
|
@ -249,8 +249,8 @@ public class FhirSystemDao extends BaseFhirDao implements IFhirSystemDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (IResource nextResource : theResources) {
|
for (IResource nextResource : theResources) {
|
||||||
List<ResourceReferenceDt> allRefs = terser.getAllPopulatedChildElementsOfType(nextResource, ResourceReferenceDt.class);
|
List<BaseResourceReferenceDt> allRefs = terser.getAllPopulatedChildElementsOfType(nextResource, BaseResourceReferenceDt.class);
|
||||||
for (ResourceReferenceDt nextRef : allRefs) {
|
for (BaseResourceReferenceDt nextRef : allRefs) {
|
||||||
IdDt nextId = nextRef.getReference();
|
IdDt nextId = nextRef.getReference();
|
||||||
if (idConversions.containsKey(nextId)) {
|
if (idConversions.containsKey(nextId)) {
|
||||||
IdDt newId = idConversions.get(nextId);
|
IdDt newId = idConversions.get(nextId);
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class FhirSystemDaoTest {
|
||||||
private static IFhirResourceDao<Patient> ourPatientDao;
|
private static IFhirResourceDao<Patient> ourPatientDao;
|
||||||
private static IFhirSystemDao ourSystemDao;
|
private static IFhirSystemDao ourSystemDao;
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testGetResourceCounts() {
|
public void testGetResourceCounts() {
|
||||||
Observation obs = new Observation();
|
Observation obs = new Observation();
|
||||||
obs.getName().addCoding().setSystem("urn:system").setCode("testGetResourceCountsO01");
|
obs.getName().addCoding().setSystem("urn:system").setCode("testGetResourceCountsO01");
|
||||||
|
@ -73,7 +73,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testHistory() throws Exception {
|
public void testHistory() throws Exception {
|
||||||
Date start = new Date();
|
Date start = new Date();
|
||||||
Thread.sleep(10);
|
Thread.sleep(10);
|
||||||
|
@ -119,7 +119,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testPersistWithSimpleLink() {
|
public void testPersistWithSimpleLink() {
|
||||||
Patient patient = new Patient();
|
Patient patient = new Patient();
|
||||||
patient.setId(new IdDt("Patient/testPersistWithSimpleLinkP01"));
|
patient.setId(new IdDt("Patient/testPersistWithSimpleLinkP01"));
|
||||||
|
@ -173,7 +173,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testPersistWithUnknownId() {
|
public void testPersistWithUnknownId() {
|
||||||
Observation obs = new Observation();
|
Observation obs = new Observation();
|
||||||
obs.getName().addCoding().setSystem("urn:system").setCode("testPersistWithSimpleLinkO01");
|
obs.getName().addCoding().setSystem("urn:system").setCode("testPersistWithSimpleLinkO01");
|
||||||
|
@ -197,7 +197,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTagOperationss() throws Exception {
|
public void testTagOperationss() throws Exception {
|
||||||
|
|
||||||
TagList preSystemTl = ourSystemDao.getAllTags();
|
TagList preSystemTl = ourSystemDao.getAllTags();
|
||||||
|
@ -270,7 +270,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionCreateMatchUrlWithOneMatch() {
|
public void testTransactionCreateMatchUrlWithOneMatch() {
|
||||||
String methodName = "testTransactionCreateMatchUrlWithOneMatch";
|
String methodName = "testTransactionCreateMatchUrlWithOneMatch";
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionCreateMatchUrlWithTwoMatch() {
|
public void testTransactionCreateMatchUrlWithTwoMatch() {
|
||||||
String methodName = "testTransactionCreateMatchUrlWithTwoMatch";
|
String methodName = "testTransactionCreateMatchUrlWithTwoMatch";
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ public class FhirSystemDaoTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionCreateMatchUrlWithZeroMatch() {
|
public void testTransactionCreateMatchUrlWithZeroMatch() {
|
||||||
String methodName = "testTransactionCreateMatchUrlWithZeroMatch";
|
String methodName = "testTransactionCreateMatchUrlWithZeroMatch";
|
||||||
|
|
||||||
|
@ -365,7 +365,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionCreateNoMatchUrl() {
|
public void testTransactionCreateNoMatchUrl() {
|
||||||
String methodName = "testTransactionCreateNoMatchUrl";
|
String methodName = "testTransactionCreateNoMatchUrl";
|
||||||
|
|
||||||
|
@ -382,7 +382,7 @@ public class FhirSystemDaoTest {
|
||||||
assertThat(p.getId().getIdPart(), not(containsString("test")));
|
assertThat(p.getId().getIdPart(), not(containsString("test")));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionDeleteMatchUrlWithOneMatch() {
|
public void testTransactionDeleteMatchUrlWithOneMatch() {
|
||||||
String methodName = "testTransactionDeleteMatchUrlWithOneMatch";
|
String methodName = "testTransactionDeleteMatchUrlWithOneMatch";
|
||||||
|
|
||||||
|
@ -424,7 +424,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionDeleteMatchUrlWithTwoMatch() {
|
public void testTransactionDeleteMatchUrlWithTwoMatch() {
|
||||||
String methodName = "testTransactionDeleteMatchUrlWithTwoMatch";
|
String methodName = "testTransactionDeleteMatchUrlWithTwoMatch";
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ public class FhirSystemDaoTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionDeleteMatchUrlWithZeroMatch() {
|
public void testTransactionDeleteMatchUrlWithZeroMatch() {
|
||||||
String methodName = "testTransactionDeleteMatchUrlWithZeroMatch";
|
String methodName = "testTransactionDeleteMatchUrlWithZeroMatch";
|
||||||
|
|
||||||
|
@ -531,7 +531,7 @@ public class FhirSystemDaoTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test(expected = InvalidRequestException.class)
|
@Test(expected = InvalidRequestException.class)
|
||||||
public void testTransactionFailsWithDuplicateIds() {
|
public void testTransactionFailsWithDuplicateIds() {
|
||||||
Patient patient1 = new Patient();
|
Patient patient1 = new Patient();
|
||||||
patient1.setId(new IdDt("Patient/testTransactionFailsWithDusplicateIds"));
|
patient1.setId(new IdDt("Patient/testTransactionFailsWithDusplicateIds"));
|
||||||
|
@ -544,7 +544,7 @@ public class FhirSystemDaoTest {
|
||||||
ourSystemDao.transaction(Arrays.asList((IResource) patient1, patient2));
|
ourSystemDao.transaction(Arrays.asList((IResource) patient1, patient2));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionFromBundle() throws Exception {
|
public void testTransactionFromBundle() throws Exception {
|
||||||
|
|
||||||
InputStream bundleRes = FhirSystemDaoTest.class.getResourceAsStream("/bundle.json");
|
InputStream bundleRes = FhirSystemDaoTest.class.getResourceAsStream("/bundle.json");
|
||||||
|
@ -560,7 +560,7 @@ public class FhirSystemDaoTest {
|
||||||
assertThat(id, not(equalToIgnoringCase("")));
|
assertThat(id, not(equalToIgnoringCase("")));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateMatchUrlWithOneMatch() {
|
public void testTransactionUpdateMatchUrlWithOneMatch() {
|
||||||
String methodName = "testTransactionUpdateMatchUrlWithOneMatch";
|
String methodName = "testTransactionUpdateMatchUrlWithOneMatch";
|
||||||
|
|
||||||
|
@ -596,7 +596,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateMatchUrlWithTwoMatch() {
|
public void testTransactionUpdateMatchUrlWithTwoMatch() {
|
||||||
String methodName = "testTransactionUpdateMatchUrlWithTwoMatch";
|
String methodName = "testTransactionUpdateMatchUrlWithTwoMatch";
|
||||||
|
|
||||||
|
@ -629,7 +629,7 @@ public class FhirSystemDaoTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateMatchUrlWithZeroMatch() {
|
public void testTransactionUpdateMatchUrlWithZeroMatch() {
|
||||||
String methodName = "testTransactionUpdateMatchUrlWithZeroMatch";
|
String methodName = "testTransactionUpdateMatchUrlWithZeroMatch";
|
||||||
|
|
||||||
|
@ -663,7 +663,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateMatchUrlWithZeroMatchAndNotPreExisting() {
|
public void testTransactionUpdateMatchUrlWithZeroMatchAndNotPreExisting() {
|
||||||
String methodName = "testTransactionUpdateMatchUrlWithZeroMatchAndNotPreExisting";
|
String methodName = "testTransactionUpdateMatchUrlWithZeroMatchAndNotPreExisting";
|
||||||
|
|
||||||
|
@ -692,7 +692,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateNoMatchUrl() {
|
public void testTransactionUpdateNoMatchUrl() {
|
||||||
String methodName = "testTransactionUpdateNoMatchUrl";
|
String methodName = "testTransactionUpdateNoMatchUrl";
|
||||||
|
|
||||||
|
@ -728,7 +728,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionUpdateNoOperationSpecified() throws Exception {
|
public void testTransactionUpdateNoOperationSpecified() throws Exception {
|
||||||
List<IResource> res = new ArrayList<IResource>();
|
List<IResource> res = new ArrayList<IResource>();
|
||||||
|
|
||||||
|
@ -789,7 +789,7 @@ public class FhirSystemDaoTest {
|
||||||
/**
|
/**
|
||||||
* Issue #55
|
* Issue #55
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionWithCidIds() throws Exception {
|
public void testTransactionWithCidIds() throws Exception {
|
||||||
List<IResource> res = new ArrayList<IResource>();
|
List<IResource> res = new ArrayList<IResource>();
|
||||||
|
|
||||||
|
@ -821,7 +821,7 @@ public class FhirSystemDaoTest {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTransactionWithDelete() throws Exception {
|
public void testTransactionWithDelete() throws Exception {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class ResourceProviderDstu1Test {
|
||||||
/**
|
/**
|
||||||
* Test for issue #60
|
* Test for issue #60
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testStoreUtf8Characters() throws Exception {
|
public void testStoreUtf8Characters() throws Exception {
|
||||||
Organization org = new Organization();
|
Organization org = new Organization();
|
||||||
org.setName("測試醫院");
|
org.setName("測試醫院");
|
||||||
|
@ -91,7 +91,7 @@ public class ResourceProviderDstu1Test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchWithInclude() throws Exception {
|
public void testSearchWithInclude() throws Exception {
|
||||||
Organization org = new Organization();
|
Organization org = new Organization();
|
||||||
org.addIdentifier().setSystem("urn:system").setValue( "testSearchWithInclude01");
|
org.addIdentifier().setSystem("urn:system").setValue( "testSearchWithInclude01");
|
||||||
|
@ -121,7 +121,7 @@ public class ResourceProviderDstu1Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testCountParam() throws Exception {
|
public void testCountParam() throws Exception {
|
||||||
// NB this does not get used- The paging provider has its own limits built in
|
// NB this does not get used- The paging provider has its own limits built in
|
||||||
ourDaoConfig.setHardSearchLimit(100);
|
ourDaoConfig.setHardSearchLimit(100);
|
||||||
|
@ -147,7 +147,7 @@ public class ResourceProviderDstu1Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testImagingStudyResources() throws Exception {
|
public void testImagingStudyResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ public class ResourceProviderDstu1Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testDocumentReferenceResources() throws Exception {
|
public void testDocumentReferenceResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ public class ResourceProviderDstu1Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testDiagnosticOrderResources() throws Exception {
|
public void testDiagnosticOrderResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ public class ResourceProviderDstu1Test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testCreateWithClientSuppliedId() {
|
public void testCreateWithClientSuppliedId() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testCreateWithId01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testCreateWithId01");
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ public class ResourceProviderDstu1Test {
|
||||||
assertNotNull(history.getEntries().get(0).getResource());
|
assertNotNull(history.getEntries().get(0).getResource());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testDeepChaining() {
|
public void testDeepChaining() {
|
||||||
delete("Location", Location.SP_NAME, "testDeepChainingL1");
|
delete("Location", Location.SP_NAME, "testDeepChainingL1");
|
||||||
delete("Location", Location.SP_NAME, "testDeepChainingL2");
|
delete("Location", Location.SP_NAME, "testDeepChainingL2");
|
||||||
|
@ -303,7 +303,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveExistingNarrative() {
|
public void testSaveAndRetrieveExistingNarrative() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSaveAndRetrieveExistingNarrative01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSaveAndRetrieveExistingNarrative01");
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ public class ResourceProviderDstu1Test {
|
||||||
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
|
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveWithContained() {
|
public void testSaveAndRetrieveWithContained() {
|
||||||
Patient p1 = new Patient();
|
Patient p1 = new Patient();
|
||||||
p1.addIdentifier().setSystem("urn:system").setValue("testSaveAndRetrieveWithContained01");
|
p1.addIdentifier().setSystem("urn:system").setValue("testSaveAndRetrieveWithContained01");
|
||||||
|
@ -339,7 +339,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveWithoutNarrative() {
|
public void testSaveAndRetrieveWithoutNarrative() {
|
||||||
Patient p1 = new Patient();
|
Patient p1 = new Patient();
|
||||||
p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
|
p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
|
||||||
|
@ -350,7 +350,7 @@ public class ResourceProviderDstu1Test {
|
||||||
assertThat(actual.getText().getDiv().getValueAsString(), containsString("<td>Identifier</td><td>testSearchByResourceChain01</td>"));
|
assertThat(actual.getText().getDiv().getValueAsString(), containsString("<td>Identifier</td><td>testSearchByResourceChain01</td>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByIdentifier() {
|
public void testSearchByIdentifier() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier01");
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier02");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier02");
|
||||||
|
@ -370,7 +370,7 @@ public class ResourceProviderDstu1Test {
|
||||||
assertEquals(p1Id.getIdPart(), actual.getEntries().get(0).getId().getIdPart());
|
assertEquals(p1Id.getIdPart(), actual.getEntries().get(0).getId().getIdPart());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByIdentifierWithoutSystem() {
|
public void testSearchByIdentifierWithoutSystem() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "", "testSearchByIdentifierWithoutSystem01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "", "testSearchByIdentifierWithoutSystem01");
|
||||||
|
|
||||||
|
@ -384,7 +384,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByResourceChain() {
|
public void testSearchByResourceChain() {
|
||||||
delete("Organization", Organization.SP_NAME, "testSearchByResourceChainName01");
|
delete("Organization", Organization.SP_NAME, "testSearchByResourceChainName01");
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByResourceChain01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByResourceChain01");
|
||||||
|
@ -419,7 +419,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTryToCreateResourceWithReferenceThatDoesntExist() {
|
public void testTryToCreateResourceWithReferenceThatDoesntExist() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testTryToCreateResourceWithReferenceThatDoesntExist01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testTryToCreateResourceWithReferenceThatDoesntExist01");
|
||||||
|
|
||||||
|
@ -437,7 +437,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testUpdateRejectsInvalidTypes() throws InterruptedException {
|
public void testUpdateRejectsInvalidTypes() throws InterruptedException {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateRejectsInvalidTypes");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateRejectsInvalidTypes");
|
||||||
|
|
||||||
|
@ -464,7 +464,7 @@ public class ResourceProviderDstu1Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testUpdateWithClientSuppliedIdWhichDoesntExist() {
|
public void testUpdateWithClientSuppliedIdWhichDoesntExist() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExist");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExist");
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class ResourceProviderDstu2Test {
|
||||||
/**
|
/**
|
||||||
* Test for issue #60
|
* Test for issue #60
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testStoreUtf8Characters() throws Exception {
|
public void testStoreUtf8Characters() throws Exception {
|
||||||
Organization org = new Organization();
|
Organization org = new Organization();
|
||||||
org.setName("測試醫院");
|
org.setName("測試醫院");
|
||||||
|
@ -97,7 +97,7 @@ public class ResourceProviderDstu2Test {
|
||||||
/**
|
/**
|
||||||
* Test for issue #60
|
* Test for issue #60
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testReadAllInstancesOfType() throws Exception {
|
public void testReadAllInstancesOfType() throws Exception {
|
||||||
Patient pat;
|
Patient pat;
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ public class ResourceProviderDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchWithInclude() throws Exception {
|
public void testSearchWithInclude() throws Exception {
|
||||||
Organization org = new Organization();
|
Organization org = new Organization();
|
||||||
org.addIdentifier().setSystem("urn:system:rpdstu2").setValue( "testSearchWithInclude01");
|
org.addIdentifier().setSystem("urn:system:rpdstu2").setValue( "testSearchWithInclude01");
|
||||||
|
@ -151,7 +151,7 @@ public class ResourceProviderDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testCountParam() throws Exception {
|
public void testCountParam() throws Exception {
|
||||||
// NB this does not get used- The paging provider has its own limits built in
|
// NB this does not get used- The paging provider has its own limits built in
|
||||||
ourDaoConfig.setHardSearchLimit(100);
|
ourDaoConfig.setHardSearchLimit(100);
|
||||||
|
@ -177,7 +177,7 @@ public class ResourceProviderDstu2Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testImagingStudyResources() throws Exception {
|
public void testImagingStudyResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ public class ResourceProviderDstu2Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testDocumentReferenceResources() throws Exception {
|
public void testDocumentReferenceResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ public class ResourceProviderDstu2Test {
|
||||||
/**
|
/**
|
||||||
* See issue #52
|
* See issue #52
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void testDiagnosticOrderResources() throws Exception {
|
public void testDiagnosticOrderResources() throws Exception {
|
||||||
IGenericClient client = ourClient;
|
IGenericClient client = ourClient;
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ public class ResourceProviderDstu2Test {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testCreateWithClientSuppliedId() {
|
public void testCreateWithClientSuppliedId() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system:rpdstu2", "testCreateWithId01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system:rpdstu2", "testCreateWithId01");
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ public class ResourceProviderDstu2Test {
|
||||||
assertNotNull(history.getEntries().get(0).getResource());
|
assertNotNull(history.getEntries().get(0).getResource());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testDeepChaining() {
|
public void testDeepChaining() {
|
||||||
delete("Location", Location.SP_NAME, "testDeepChainingL1");
|
delete("Location", Location.SP_NAME, "testDeepChainingL1");
|
||||||
delete("Location", Location.SP_NAME, "testDeepChainingL2");
|
delete("Location", Location.SP_NAME, "testDeepChainingL2");
|
||||||
|
@ -336,7 +336,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveExistingNarrative() {
|
public void testSaveAndRetrieveExistingNarrative() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSaveAndRetrieveExistingNarrative01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSaveAndRetrieveExistingNarrative01");
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ public class ResourceProviderDstu2Test {
|
||||||
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
|
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveWithContained() {
|
public void testSaveAndRetrieveWithContained() {
|
||||||
Patient p1 = new Patient();
|
Patient p1 = new Patient();
|
||||||
p1.addIdentifier().setSystem("urn:system:rpdstu2").setValue("testSaveAndRetrieveWithContained01");
|
p1.addIdentifier().setSystem("urn:system:rpdstu2").setValue("testSaveAndRetrieveWithContained01");
|
||||||
|
@ -372,7 +372,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSaveAndRetrieveWithoutNarrative() {
|
public void testSaveAndRetrieveWithoutNarrative() {
|
||||||
Patient p1 = new Patient();
|
Patient p1 = new Patient();
|
||||||
p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
|
p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
|
||||||
|
@ -383,7 +383,7 @@ public class ResourceProviderDstu2Test {
|
||||||
assertThat(actual.getText().getDiv().getValueAsString(), containsString("<td>Identifier</td><td>testSearchByResourceChain01</td>"));
|
assertThat(actual.getText().getDiv().getValueAsString(), containsString("<td>Identifier</td><td>testSearchByResourceChain01</td>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByIdentifier() {
|
public void testSearchByIdentifier() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier01");
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier02");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByIdentifier02");
|
||||||
|
@ -404,7 +404,7 @@ public class ResourceProviderDstu2Test {
|
||||||
assertEquals(BundleEntrySearchModeEnum.MATCH, actual.getEntries().get(0).getSearchMode().getValueAsEnum());
|
assertEquals(BundleEntrySearchModeEnum.MATCH, actual.getEntries().get(0).getSearchMode().getValueAsEnum());
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByIdentifierWithoutSystem() {
|
public void testSearchByIdentifierWithoutSystem() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "", "testSearchByIdentifierWithoutSystem01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "", "testSearchByIdentifierWithoutSystem01");
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testSearchByResourceChain() {
|
public void testSearchByResourceChain() {
|
||||||
delete("Organization", Organization.SP_NAME, "testSearchByResourceChainName01");
|
delete("Organization", Organization.SP_NAME, "testSearchByResourceChainName01");
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByResourceChain01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testSearchByResourceChain01");
|
||||||
|
@ -453,7 +453,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testTryToCreateResourceWithReferenceThatDoesntExist() {
|
public void testTryToCreateResourceWithReferenceThatDoesntExist() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testTryToCreateResourceWithReferenceThatDoesntExist01");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testTryToCreateResourceWithReferenceThatDoesntExist01");
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testUpdateRejectsInvalidTypes() throws InterruptedException {
|
public void testUpdateRejectsInvalidTypes() throws InterruptedException {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateRejectsInvalidTypes");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateRejectsInvalidTypes");
|
||||||
|
|
||||||
|
@ -498,7 +498,7 @@ public class ResourceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void testUpdateWithClientSuppliedIdWhichDoesntExist() {
|
public void testUpdateWithClientSuppliedIdWhichDoesntExist() {
|
||||||
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2");
|
deleteToken("Patient", Patient.SP_IDENTIFIER, "urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2");
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class SystemProviderTest {
|
||||||
public void testTransactionFromBundle() throws Exception {
|
public void testTransactionFromBundle() throws Exception {
|
||||||
|
|
||||||
InputStream bundleRes = SystemProviderTest.class.getResourceAsStream("/test-server-seed-bundle.json");
|
InputStream bundleRes = SystemProviderTest.class.getResourceAsStream("/test-server-seed-bundle.json");
|
||||||
Bundle bundle = new FhirContext().newJsonParser().parseBundle(new InputStreamReader(bundleRes));
|
Bundle bundle = FhirContext.forDstu1().newJsonParser().parseBundle(new InputStreamReader(bundleRes));
|
||||||
List<IResource> res = bundle.toListOfResources();
|
List<IResource> res = bundle.toListOfResources();
|
||||||
|
|
||||||
ourClient.transaction().withResources(res).execute();
|
ourClient.transaction().withResources(res).execute();
|
||||||
|
@ -100,6 +100,7 @@ public class SystemProviderTest {
|
||||||
|
|
||||||
ourCtx = restServer.getFhirContext();
|
ourCtx = restServer.getFhirContext();
|
||||||
|
|
||||||
|
ourCtx.getRestfulClientFactory().setSocketTimeout(600 * 1000);
|
||||||
ourClient = ourCtx.newRestfulGenericClient(serverBase);
|
ourClient = ourCtx.newRestfulGenericClient(serverBase);
|
||||||
ourClient.setLogRequestAndResponse(true);
|
ourClient.setLogRequestAndResponse(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class ModelScannerTest {
|
||||||
/** This failed at one point */
|
/** This failed at one point */
|
||||||
@Test
|
@Test
|
||||||
public void testCarePlan() throws DataFormatException {
|
public void testCarePlan() throws DataFormatException {
|
||||||
new ModelScanner(new FhirContext(), CarePlan.class);
|
FhirContext.forDstu1().getResourceDefinition(CarePlan.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -34,8 +34,8 @@ public class ModelScannerTest {
|
||||||
@Test
|
@Test
|
||||||
public void testScanExtensionTypes() throws DataFormatException {
|
public void testScanExtensionTypes() throws DataFormatException {
|
||||||
|
|
||||||
ModelScanner scanner = new ModelScanner(new FhirContext(),ResourceWithExtensionsA.class);
|
FhirContext ctx = FhirContext.forDstu1();
|
||||||
RuntimeResourceDefinition def = (RuntimeResourceDefinition) scanner.getClassToElementDefinitions().get(ResourceWithExtensionsA.class);
|
RuntimeResourceDefinition def = ctx.getResourceDefinition(ResourceWithExtensionsA.class);
|
||||||
|
|
||||||
assertEquals(RuntimeChildCompositeDatatypeDefinition.class, def.getChildByNameOrThrowDataFormatException("identifier").getClass());
|
assertEquals(RuntimeChildCompositeDatatypeDefinition.class, def.getChildByNameOrThrowDataFormatException("identifier").getClass());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue