1 package ca.uhn.fhir.context;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26
27 import ca.uhn.fhir.model.api.IElement;
28 import ca.uhn.fhir.model.api.IResource;
29 import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
30
31 public class RuntimeResourceReferenceDefinition extends BaseRuntimeElementDefinition<BaseResourceReferenceDt> {
32
33 private final List<Class<? extends IResource>> myResourceTypes;
34 private HashMap<Class<? extends IResource>, RuntimeResourceDefinition> myResourceTypeToDefinition;
35
36 public RuntimeResourceReferenceDefinition(String theName, List<Class<? extends IResource>> theResourceTypes) {
37 super(theName, BaseResourceReferenceDt.class);
38 if (theResourceTypes == null || theResourceTypes.isEmpty()) {
39 throw new ConfigurationException("Element '" + theName + "' has no resource types noted");
40 }
41 myResourceTypes = theResourceTypes;
42 }
43
44 public List<Class<? extends IResource>> getResourceTypes() {
45 return myResourceTypes;
46 }
47
48 @Override
49 void sealAndInitialize(Map<Class<? extends IElement>, BaseRuntimeElementDefinition<?>> theClassToElementDefinitions) {
50 myResourceTypeToDefinition = new HashMap<Class<? extends IResource>, RuntimeResourceDefinition>();
51 for (Class<? extends IResource> next : myResourceTypes) {
52 if (next.equals(IResource.class)) {
53 continue;
54 }
55 RuntimeResourceDefinition definition = (RuntimeResourceDefinition) theClassToElementDefinitions.get(next);
56 if (definition == null) {
57 throw new ConfigurationException("Couldn't find definition for: " + next.getCanonicalName());
58 }
59 myResourceTypeToDefinition.put(next, definition);
60 }
61 }
62
63 @Override
64 public ca.uhn.fhir.context.BaseRuntimeElementDefinition.ChildTypeEnum getChildType() {
65 return ChildTypeEnum.RESOURCE_REF;
66 }
67
68 public RuntimeResourceDefinition getDefinitionForResourceType(Class<? extends IResource> theType) {
69 RuntimeResourceDefinition retVal = myResourceTypeToDefinition.get(theType);
70 if (retVal == null) {
71 throw new ConfigurationException("Unknown type: " + theType.getCanonicalName());
72 }
73 return retVal;
74 }
75
76 }