package com.openMap1.mapper.fhir.server;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.openMap1.mapper.core.MapperException;
import com.openMap1.mapper.util.XMLUtil;
public class Conformance {
private FHIRServlet servlet;
public Conformance(FHIRServlet servlet)
{
this.servlet = servlet;
}
/**
*
* @return an XML DOM of the resource table and search table extracts for the current server
* @throws MapperException
*/
public Element makeConfigDom() throws MapperException
{
String serverName = servlet.serverName();
Document doc = XMLUtil.makeOutDoc();
Element root = XMLUtil.newElement(doc, "database");
doc.appendChild(root);
Element servers = XMLUtil.newElement(doc, "servers");
root.appendChild(servers);
Element resources = XMLUtil.newElement(doc, "resources");
root.appendChild(resources);
Element searches = XMLUtil.newElement(doc, "searches");
root.appendChild(searches);
Element serverRecord = XMLUtil.newElement(doc, "record");
servers.appendChild(serverRecord);
String[] details = servlet.getServerDetails(serverName);
for (int i = 0; i < details.length;i++)
{
String colName = servlet.serverColHeaders()[i];
Element colEl = XMLUtil.textElement(doc, colName, details[i]);
serverRecord.appendChild(colEl);
}
Hashtable<String,String[]> resourceDetails = servlet.getResourceDetailsForServer(serverName);
servlet.message("resources: " + resourceDetails.size());
for (Enumeration<String> en = resourceDetails.keys();en.hasMoreElements();)
{
String resourceName = en.nextElement();
Element resourceRecord = XMLUtil.newElement(doc, "record");
resources.appendChild(resourceRecord);
details = resourceDetails.get(resourceName);
for (int i = 0; i < details.length;i++)
{
String colName = servlet.resourceColHeaders()[i];
Element colEl = XMLUtil.textElement(doc, colName, details[i]);
resourceRecord.appendChild(colEl);
}
Vector<String[]> allSearchDetails = servlet.getSearches(serverName, resourceName);
if (allSearchDetails != null) for (int s = 0; s < allSearchDetails.size();s++)
{
String[] searchDetails = allSearchDetails.get(s);
Element searchRecord = XMLUtil.newElement(doc, "record");
searches.appendChild(searchRecord);
for (int d = 0; d < searchDetails.length;d++)
{
String colName = servlet.searchColHeaders()[d];
Element colEl = XMLUtil.textElement(doc, colName, searchDetails[d]);
searchRecord.appendChild(colEl);
}
}
}
return root;
}
}