/*
 * Copyright (c) 2007, Going Dot Com Inc. All rights reserved.
 */

package jp.co.going.xbrl.common.parse;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import jp.co.going.xbrl.common.XbException;

import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

/**
 * ＸＭＬファイルをパースするためのクラスです
 * @author Masako Okayasu
 */
public class XbPAOImpl implements XbPAO {

    // ドキュメント作成
    private DOMParser parser;  // XMLパーサのインスタンス

    /**
     * コンストラクタ
     * @throws		XbException
     */
    public XbPAOImpl() throws XbException {
    	// パーサの生成
        parser = new DOMParser();

        // エラー・ハンドラの登録
        parser.setErrorHandler(new XbPAOError());
    }

    /**
     * parseをする
     * @param fileName
     * @throws XbException
     */
    public void parse(String fileName) throws XbException {
        try {
            // XMLファイルのパース
            parser.parse(fileName);
        }
        catch (IOException e) {
            throw new XbException(e, e.getMessage());
        }
        catch (SAXException e) {
            throw new XbException(e);
        }
    }

    /**
     * Documentを取得する
     * @return Document
     * @throws XbException
     */
    public Document getDocument() {
        return  parser.getDocument();
    }

    /**
     * DocumentBuilder作成
     * @return			DocumentBuilder
     */
	public DocumentBuilder getDocumentBuilder() throws XbException {

		DocumentBuilder docbuilder = null;
		try {
			DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
			docbuilder = dbfactory.newDocumentBuilder();
		}
		catch (ParserConfigurationException e) {
            throw new XbException(e);
		}
		return docbuilder;
	}
}