package ca.uhn.fhir.model; import static org.junit.Assert.*; import java.io.IOException; import java.util.HashSet; import java.util.Map.Entry; import java.util.Properties; import org.hl7.fhir.instance.model.api.IBase; import org.hl7.fhir.instance.model.api.IBaseResource; import org.junit.Test; import ca.uhn.fhir.context.BaseRuntimeChildDefinition; import ca.uhn.fhir.context.BaseRuntimeElementCompositeDefinition; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.context.RuntimeChildResourceBlockDefinition; import ca.uhn.fhir.context.RuntimeResourceDefinition; public class InstantiationTest { @SuppressWarnings("unchecked") @Test public void testResources() throws IOException, ClassNotFoundException { FhirContext ctx = FhirContext.forDstu2Hl7Org(); Properties prop = new Properties(); prop.load(ctx.getVersion().getFhirVersionPropertiesFile()); for (Entry<Object, Object> next : prop.entrySet()) { if (next.getKey().toString().startsWith("resource.")) { Class<? extends IBaseResource> clazz = (Class<? extends IBaseResource>) Class.forName(next.getValue().toString()); RuntimeResourceDefinition res = ctx.getResourceDefinition(clazz); scanChildren(new HashSet<Class<?>>(), clazz, res); } } } private void scanChildren(HashSet<Class<?>> theHashSet, Class<? extends IBase> theClazz, BaseRuntimeElementCompositeDefinition<?> theRes) { for (BaseRuntimeChildDefinition next : theRes.getChildren()) { if (next.getElementName().contains("_")) { fail("Element name " + next.getElementName() + " in type " + theClazz + " contains illegal '_'"); } if (next instanceof RuntimeChildResourceBlockDefinition) { RuntimeChildResourceBlockDefinition nextBlock = (RuntimeChildResourceBlockDefinition) next; for (String nextName : nextBlock.getValidChildNames()) { BaseRuntimeElementCompositeDefinition<?> elementDef = nextBlock.getChildByName(nextName); if (theHashSet.add(elementDef.getImplementingClass())) { scanChildren(theHashSet, elementDef.getImplementingClass(), elementDef); } } } } } }