/*
* Copyright 2010 InC-Gaming, Patrick Biesenbach aka. Forsaiken. All rights reserved.
*/
package silentium.gameserver.data.xml.parsers;
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
/**
* @author Forsaiken
*/
public final class XMLDocumentFactory
{
public static final XMLDocumentFactory getInstance()
{
return SingletonHolder._instance;
}
private final DocumentBuilder _builder;
private final Transformer _transformer;
protected XMLDocumentFactory() throws Exception
{
try
{
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);
_builder = factory.newDocumentBuilder();
_transformer = TransformerFactory.newInstance().newTransformer();
}
catch (Exception e)
{
throw new Exception("Failed initializing", e);
}
}
public final Document loadDocument(final String filePath) throws Exception
{
return loadDocument(new File(filePath));
}
public final Document loadDocument(final File file) throws Exception
{
if (!checkFile(file))
throw new Exception("File: " + file.getAbsolutePath() + " doesn't exist and/or is not a file.");
return _builder.parse(file);
}
public final void writeDocument(final String filePath, final Document doc) throws Exception
{
final File file = new File(filePath);
_transformer.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(file)));
}
public final Document newDocument()
{
return _builder.newDocument();
}
private final static boolean checkFile(final File file)
{
if (!file.exists())
return false;
if (!file.isFile())
return false;
return true;
}
private static class SingletonHolder
{
protected static final XMLDocumentFactory _instance;
static
{
try
{
_instance = new XMLDocumentFactory();
}
catch (Exception e)
{
throw new ExceptionInInitializerError(e);
}
}
}
}