package ca.uhn.fhir.context;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.AfterClass;
import org.junit.Test;
import ca.uhn.fhir.model.api.IResource;
import ca.uhn.fhir.model.dstu.resource.Patient;
import ca.uhn.fhir.rest.method.RestSearchParameterTypeEnum;
import ca.uhn.fhir.util.TestUtil;
import com.google.common.collect.ImmutableSet;
import com.google.common.reflect.ClassPath;
import com.google.common.reflect.ClassPath.ClassInfo;
public class NameChanges {
@SuppressWarnings("unchecked")
@Test
public void testNameChanges() throws IOException, ClassNotFoundException {
FhirContext ctx = FhirContext.forDstu1();
ImmutableSet<ClassInfo> names = ClassPath.from(getClass().getClassLoader()).getTopLevelClasses(Patient.class.getPackage().getName());
List<String> changes = new ArrayList<String>();
for (ClassInfo classInfo : names) {
if (classInfo.getName().endsWith(".BaseResource")) {
continue;
}
RuntimeResourceDefinition def = ctx.getResourceDefinition((Class<? extends IResource>) Class.forName(classInfo.getName()));
for (RuntimeSearchParam nextParam : def.getSearchParams()) {
if (nextParam.getParamType() == RestSearchParameterTypeEnum.COMPOSITE) {
continue;
}
String name = nextParam.getName();
if (name.contains("[x]")) {
continue;
}
if (name.startsWith("_")) {
continue; // _id and _language
}
String path = nextParam.getPath();
if (path.contains(" | ")) {
changes.add(def.getName() + ": " + name + " has multiple paths so there is no obvious name (" + nextParam.getDescription() + ")");
continue;
}
path = path.substring(path.indexOf('.') + 1);
StringBuilder b = new StringBuilder();
for (int i = 0; i < path.length(); i++) {
char nextChar = path.charAt(i);
if (Character.isUpperCase(nextChar)) {
b.append('-');
}else if (nextChar == '.') {
b.append('-');
continue;
}
b.append(Character.toLowerCase(nextChar));
}
if (name.equals(b.toString())==false) {
changes.add(def.getName() + "," + name + "," + b + "," + nextParam.getDescription());
}
}
}
System.out.println("Resource,old name,new name,description");
for (String next : changes) {
System.out.println(next);
}
}
@AfterClass
public static void afterClassClearContext() {
TestUtil.clearAllStaticFieldsForUnitTest();
}
}