tion, java.io.IOException
{
if (is == null)
{
Debug.logWarning("[UtilXml.readXmlDocument] InputStream was null,
doing nothing", module);
return null;
}
Document document = null;
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setValidating(validate);
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
if (validate)
{
LocalResolver lr = new LocalResolver(new DefaultHandler());
ErrorHandler eh = new LocalErrorHandler(docDescription, lr);
builder.setEntityResolver(lr);
builder.setErrorHandler(eh);
}
document = builder.parse(is);
return document;
}
public static Document makeEmptyXmlDocument()
{
return makeEmptyXmlDocument(null);
}
public static Document makeEmptyXmlDocument(String
rootElementName)
{
Document document = null;
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setValidating(true);
// factory.setNamespaceAware(true);
try
{
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.newDocument();
}
catch (Exception e)
{
Debug.logError(e, module);
}
if (document == null)
return null;
if (rootElementName != null)
{
Element rootElement =
document.createElement(rootElementName);
document.appendChild(rootElement);
}
return document;
}
public static Element addChildElement(Element element, String
childElementName, Document document)
{
Element newElement =
document.createElement(childElementName);
element.appendChild(newElement);
return newElement;
}
public static Element addChildElementValue(Element element, String
childElementName, String childElementValue, Document
document)
{
Element newElement = addChildElement(element, childElementName,
document);
newElement.appendChild(document.createTextNode(childElementValue));
return newElement;
}
public static Element addChildElementCDATAValue(Element element,
String childElementName, String childElementValue, Document
document)
{
Element newElement = addChildElement(element, childElementName,
document);
newElement.appendChild(document.createCDATASection(childElementValue));
return newElement;
}
public static List childElementList(Element element, String
childElementName)
{
if (element == null)
return null;
List elements = new LinkedList();
Node node = element.getFirstChild();
if (node != null)
{
do
{
if (node.getNodeType() == Node.ELEMENT_NODE
&& (childElementName == null ||
childElementName.equals(node.getNodeName())))
{
Element childElement = (Element) node;
elements.add(childElement);
}
}
while ((node = node.getNextSibling()) != null);
}
return elements;
}
public static Element firstChildElement(Element element, String
childElementName)
{
if (element == null)
return null;
// get the first element with the given name
Node node = element.getFirstChild();
if (node != null)
{
do
{
if (node.getNodeType() == Node.ELEMENT_NODE
&& (childElementName == null ||
childElementName.equals(node.getNodeName())))
{
Element childElement = (Element) node;
return childElement;
}
}
while ((node = node.getNextSibling()) != null);
}
return null;
}
public static Element firstChildElement(Element element, String
childElementName, String attrName, String attrValue)
{
if (element == null)
return null;
// get the first element with the given name
Node node = element.getFirstChild();
if (node != null)
{
do
{
if (node.getNodeType() == Node.ELEMENT_NODE
&& (childElementName == null ||
childElementName.equals(node.getNodeName())))
{
Element childElement = (Element) node;
String value = childElement.getAttribute(attrName);
if (value != null &&
value.equals(attrValue))
{
return childElement;
}
}
}
while ((node = node.getNextSibling()) != null);
}
return null;
}
public static String childElementValue(Element element, String
childElementName)
{
if (element == null)
return null;
// get the value of the first element with the given name
Element childElement = firstChildElement(element,
childElementName);
return elementValue(childElement);
}
public static String childElementValue(Element element, String
childElementName, String defaultValue)
{
if (element == null)
return defaultValue;
// get the value of the first element with the given name
Element childElement = firstChildElement(element,
childElementName);
String elementValue = elementValue(childElement);
if (elementValue == null || elementValue.length() == 0)
return defaultValue;
else
return elementValue;
}
public static String elementValue(Element element)
{
if (element == null)
return null;
// make sure we get all the text there...
element.normalize();
Node textNode = element.getFirstChild();
if (textNode == null)
return null;
StringBuffer valueBuffer = new StringBuffer();
do
{
if (textNode.getNodeType() == Node.CDATA_SECTION_NODE ||
textNode.getNodeType() == Node.TEXT_NODE)
{
valueBuffer.append(textNode.getNodue());
}
}
while ((textNode = textNode.getNextSibling()) != null);
return valueBuffer.toString();
}
public static String checkEmpty(String string)
{
if (string != null &&
string.length() > 0)
return string;
else
return "";
}
public static String checkEmpty(String string1, String
string2)
{
if (string1 != null &&
string1.length() > 0)
return string1;
else
if (string2 != null &&
string2.length() > 0)
return string2;
else
return "";
}
public static String checkEmpty(String string1, String string2,
String string3)
{
if (string1 != null &&
string1.length() > 0)
return string1;
else
if (string2 != null &&
string2.length() > 0)
return string2;
else
if (string3 != null &&
string3.length() > 0)
return string3;
else
return "";
}
public static boolean checkBoolean(String str)
{
return checkBoolean(str, false);
}
public static boolean checkBoolean(String str, boolean
defaultValue)
{
if (defaultValue)
{
//default to true, ie anything but false is true
return !"false".equals(str);
}
else
{
//default to false, ie anything but true is false
return "true".equals(str);
}
}
public static class LocalResolver implements EntityResolver
{
private boolean hasDTD = false;
private EntityResolver defaultResolver;
public LocalResolver(EntityResolver defaultResolver)
{
this.defaultResolver = defaultResolver;
}
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException
{
hasDTD = false;
String dtd =
UtilProperties.getSplitPropertyValue(UtilURL.fromResource("localdtds.properties"),
publicId);
if (Debug.verboseOn())
Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] resolving
DTD with publicId [" + publicId + "], systemId [" + systemId + "]
and the dtd file is [" + dtd + "]", module);
if (dtd != null && dtd.length()
> 0)
{
try
{
URL dtdURL = UtilURL.fromResource(dtd);
InputStream dtdStream = dtdURL.openStream();
InputSource inputSource = new InputSource(dtdStream);
inputSource.setPublicId(publicId);
hasDTD = true;
if (Debug.verboseOn())
Debug.logVerbose("[UtilXml.LocalResolver.resolveEntity] got LOCAL
DTD input source with publicId [" + publicId + "] and the dtd file
is [" + dtd + "]", module);
return inputSource;
}
catch (Exception e)
{
Debug.logWarning(e, module);
}
}
if (Debug.verboseOn())
Debug.logVerbose(
"[UtilXml.LocalResolver.resolveEntity] local resolve failed for DTD
with publicId [" + publicId + "] and the dtd file is [" + dtd + "],
trying defaultResolver",
module);
return defaultResolver.resolveEntity(publicId, systemId);
}
public boolean hasDTD()
{
return hasDTD;
}
}
public static class LocalErrorHandler implements ErrorHandler
{
private String docDescription;
private LocalResolver localResolver;
public LocalErrorHandler(String docDescription, LocalResolver
localResolver)
{
this.docDescription = docDescription;
this.localResolver = localResolver;
}
public void error(SAXParseException exception)
{
if (localResolver.hasDTD())
{
Debug.logError("XmlFileLoader: File " + docDescription + " process
error. Line: " + String.valueOf(exception.getLineNumber()) + ".
Error message: " + exception.getMessage(), module);
}
}
public void fatalError(SAXParseException exception)
{
if (localResolver.hasDTD())
{
Debug.logError(
"XmlFileLoader: File " + docDescription + " process fatal error.
Line: " + String.valueOf(exception.getLineNumber()) + ". Error
message: " + exception.getMessage(),
module);
}
}
public void warning(SAXParseException exception)
{
if (localResolver.hasDTD())
{
Debug.logError("XmlFileLoader: File " + docDescription + " process
warning. Line: " + String.valueOf(exception.getLineNumber()) + ".
Error message: " + exception.getMessage(), module);
}
}
}
}