pdbench/census/DataNoise/src/Settings.java

206 lines
4.0 KiB
Java

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class Settings
{
private String fileName = "..\\settings.xml";
private HashMap dbSettings;
private HashMap noiseSettings;
private HashMap vars;
public Settings(String aFileName)
{
fileName = aFileName;
dbSettings = new HashMap();
noiseSettings = new HashMap();
vars = new HashMap();
}
public boolean loadSettings()
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
Document doc;
try
{
db = dbf.newDocumentBuilder();
}
catch (ParserConfigurationException e)
{
return false;
}
try
{
doc = db.parse(fileName);
}
catch (IOException e)
{
System.out.println("File not found!");
return false;
}
catch (SAXException e)
{
System.out.println("Error parsing file!");
return false;
}
NodeList dbSettings = doc.getElementsByTagName("db");
if (dbSettings.getLength() == 1)
{
loadDBSettings(dbSettings.item(0));
}
else
{
return false;
}
NodeList noiseSettings = doc.getElementsByTagName("noise");
if (noiseSettings.getLength() == 1)
{
loadNoiseSettings(noiseSettings.item(0));
}
else
{
return false;
}
NodeList varSettings = doc.getElementsByTagName("vars");
if (varSettings.getLength() == 1)
{
loadVars(varSettings.item(0));
}
else
{
return false;
}
return true;
}
private boolean loadDBSettings(Node aRoot)
{
NodeList children = aRoot.getChildNodes();
for (int i = 0; i < children.getLength(); ++i)
{
Node child = children.item(i);
if (child.getNodeType() == Node.TEXT_NODE)
{
continue;
}
dbSettings.put(child.getNodeName(), child.getFirstChild().getNodeValue());
}
return true;
}
private boolean loadNoiseSettings(Node aRoot)
{
NodeList children = aRoot.getChildNodes();
for (int i = 0; i < children.getLength(); ++i)
{
Node child = children.item(i);
if (child.getNodeType() == Node.TEXT_NODE)
{
continue;
}
noiseSettings.put(child.getNodeName(), child.getFirstChild().getNodeValue());
}
return true;
}
private boolean loadVars(Node aRoot)
{
NodeList vars = aRoot.getChildNodes();
for (int i = 0; i < vars.getLength(); ++i)
{
if (vars.item(i).getNodeType() == Node.ELEMENT_NODE)
{
loadVar(vars.item(i));
}
}
return true;
}
private boolean loadVar(Node aVar)
{
aVar.normalize();
NodeList varSettings = aVar.getChildNodes();
int i = 0;
// Get the variable's name
if (varSettings.item(i).getNodeType() == Node.TEXT_NODE)
{
i++;
}
String name = varSettings.item(i).getFirstChild().getNodeValue();
i++;
// Get the values for the variable
ArrayList values = new ArrayList();
for(; i < varSettings.getLength(); ++i)
{
Node valueNode = varSettings.item(i);
if (valueNode.getNodeType() == Node.TEXT_NODE)
{
continue;
}
String value = valueNode.getFirstChild().getNodeValue();
values.add(value);
}
vars.put(name, values);
return true;
}
public ArrayList getVarValues(String aVarName)
{
if (!vars.containsKey(aVarName))
{
return null;
}
return (ArrayList) vars.get(aVarName);
}
public HashMap getVars()
{
return vars;
}
public Object[] getVarNames()
{
return vars.keySet().toArray();
}
public String getDBSetting(String aParameter)
{
if (dbSettings.containsKey(aParameter))
{
return (String) dbSettings.get(aParameter);
}
return null;
}
public String getNoiseSetting(String aParameter)
{
if (noiseSettings.containsKey(aParameter))
{
return (String) noiseSettings.get(aParameter);
}
return null;
}
}