package com.eactive.eai.rms.onl.common.util;//package com.eactive.eai.rms.onl.common.util;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.apache.commons.httpclient.NameValuePair;
//import org.apache.log4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.w3c.dom.Document;
//import org.w3c.dom.NamedNodeMap;
//import org.w3c.dom.Node;
//import org.w3c.dom.NodeList;
//
//import com.eactive.eai.rms.onl.common.exception.BizException;
//import com.eactive.eai.rms.onl.transaction.tracking.DbTrackingService;
//import com.gauce.GauceDataColumn;
//import com.gauce.GauceDataRow;
//import com.gauce.GauceDataSet;
//import com.gauce.http.HttpGauceRequest;
//import com.gauce.http.HttpGauceResponse;
//import com.gauce.io.GauceOutputStream;
//
///**
// * <pre>
// * 1. ��� : Xml �����͸� ���콺 DataSet���� ��ȯ, Ŭ���̾�Ʈ�� �����Ѵ�.
// * 2. ó�� ���� :
// *     - ������ URL�� �޾� ������ ��� ������(XML)�� DataSet���� ��ȯ�Ͽ� �����ϰų�
// *       Ŭ���̾�Ʈ�� �ٷ� �����Ѵ�.
// * 3. ���ǻ��� :
// * </pre>
// * @author  : vs.net
// * @version : $Revision: 1.29 $
// * @since : rts 2.0
// */
//public class GauceDataSetUtil {
//    private final Logger logger = Logger.getLogger(GauceDataSetUtil.class);
//
//
//    private NodeList nodes;
//    private String columnNodeName = "Column";
//    private String rowNodeName = "Row";
//    private String columnAttributeName = "name";
//    private String columnAttributeType = "type";
//    private String columnAttributeSize = "size";
//    private String decimalDelemeter = ",";
//    private int firstRowSize = 100;
//    private GauceDataSet dataSet;
//    private String dataSetName = "";
//    private HttpServletRequest req = null;
//    private NameValuePair[] postParams = null;
//    private int limitRowCount = -1;
//    private boolean isCreatedDataSetHeader = false;
//
//    public void setLimitRowCount(int rowCount) {
//        limitRowCount = rowCount;
//    }
//
//    public void setPostParameter(NameValuePair[] postParameters) {
//        if (postParameters == null || postParameters.length == 0)
//            throw new IllegalArgumentException(
//                    "Post parameters cannot not be null.");
//
//        postParams = postParameters;
//    }
//
//    /*
//     * �����ͼ� ���� �����Ѵ�.
//     * POST ������� �����͸� ��ȸ�ϴ� ���
//     * ��ǲ ��Ʈ�����κ��� �ش� �����ͼ��� �����ؾ� �Ѵ�.
//     */
//    public void setFromInputStream(HttpServletRequest request,
//            String dataSetName) {
//        this.req = request;
//        this.dataSetName = dataSetName;
//    }
//
//    /*
//     * FirstRow Size�� �����Ѵ�.
//     */
//    public void setFirstRowSize(int rowSize) {
//        if (rowSize < 1) {
//            logger.error("first row size must great than zero.");
//            throw new IllegalArgumentException("first row size too small.");
//        }
//
//        firstRowSize = rowSize;
//    }
//
//    /*
//     * Xml�� �÷��� �ĺ��ϴ� ������ �����Ѵ�.
//     */
//    public void setColumnNodeName(String nodeName) {
//        if (nodeName == null || nodeName.length() < 1) {
//            logger.error("Column Node Name cannot be null");
//            throw new IllegalArgumentException(
//                    "Column Node Name cannot be null");
//        }
//
//        columnNodeName = nodeName;
//    }
//
//    /*
//     * Xml�� ���� �ĺ��ϴ� ������ �����Ѵ�.
//     */
//    public void setRowNodeName(String nodeName) {
//        if (nodeName == null || nodeName.length() < 1) {
//            logger.error("Row Node Name cannot be null");
//            throw new IllegalArgumentException("Row Node Name cannot be null");
//        }
//
//        rowNodeName = nodeName;
//    }
//
//    /*
//     * Decimal Ÿ���� ��� ������ �Ҽ��� �����ڸ� �����Ѵ�.(������ : ,)
//     */
//    public void setDecimalDelemeter(String delemeter) {
//        if (delemeter == null || delemeter.length() < 1) {
//            logger.error("Decimal Delemeter cannot be null");
//            throw new IllegalArgumentException(
//                    "Decimal Delemeter cannot be null");
//        }
//
//        decimalDelemeter = delemeter;
//    }
//
//    /*
//     * ���콺 ������ �÷��� �����´�.
//     */
//    private GauceDataColumn getGauceDataColumn(String colName, String colType,
//            String colSize) {
//        GauceDataColumn column = null;
//        int columnType;
//
//        if (colType.equalsIgnoreCase("string"))
//            columnType = GauceDataColumn.TB_STRING;
//        else if (colType.equalsIgnoreCase("int"))
//            columnType = GauceDataColumn.TB_INT;
//        else if (colType.equalsIgnoreCase("long"))
//            columnType = GauceDataColumn.TB_BIGINT;
//        else if (colType.equalsIgnoreCase("decimal"))
//            columnType = GauceDataColumn.TB_DECIMAL;
//        else if (colType.equalsIgnoreCase("url"))
//            columnType = GauceDataColumn.TB_URL;
//        else
//            columnType = GauceDataColumn.TB_STRING;
//
//        // Decimal�� ��� 10,3 ���� �������� �����Ѵ�.
//        if (colSize.indexOf(decimalDelemeter) != -1) {
//            String[] str = colSize.split(decimalDelemeter);
//            column = new GauceDataColumn(colName, columnType,
//                    Integer.parseInt(str[0]), Integer.parseInt(str[1]));
//        } else {
//            column = new GauceDataColumn(colName, columnType,
//                    Integer.parseInt(colSize));
//        }
//
//        return column;
//    }
//
//    /*
//     * ���κ��� ������ ���� ����� �÷������� �����Ѵ�.
//     */
//    private void makeDataSetHeader(NodeList nodeList) throws Exception {
//        if (dataSetName.equals("") || req == null) {
//            dataSet = new GauceDataSet();
//        } else {
//            dataSet = ((HttpGauceRequest) req).getGauceInputStream().read(
//                dataSetName);
//        }
//
//        dataSet.setFirstRowSize(firstRowSize);
//
//        // Column List�� �����Ͽ� DataSet Column�� �����.
//        for (int i = 0; i < nodeList.getLength(); i++) {
//            NamedNodeMap nnm = nodeList.item(i).getAttributes();
//            String columnName = null;
//            String columnType = null;
//            String columnSize = null;
//
//            for (int j = 0; j < nnm.getLength(); j++) {
//                Node n = nnm.item(j);
//
//                if (n.getNodeName().equalsIgnoreCase(columnAttributeName))
//                    columnName = n.getNodeValue();
//                else if (n.getNodeName().equalsIgnoreCase(columnAttributeType))
//                    columnType = n.getNodeValue();
//                else if (n.getNodeName().equalsIgnoreCase(columnAttributeSize))
//                    columnSize = n.getNodeValue();
//            }
//
//            // XML�� �ֵ帮��Ʈ�� �÷���� �÷� Ÿ���� ������ �����̴�.
//            if (columnName == null || columnType == null || columnSize == null)
//                throw new Exception(
//                        "Column Info(Name/Type/Size) value cannot be null at XML Data.");
//
//            // �÷� �߰�
//            dataSet.addDataColumn(getGauceDataColumn(columnName, columnType,
//                columnSize));
//        }
//    }
//
//    /*
//     * ���� ���� ������(��)�� �߰��Ѵ�.
//     */
//    private void addDataRows(NodeList nodes) {
//        // Row List�� �����Ͽ� DataSet�� Row�� �߰��Ѵ�.
//        for (int i = 0; i < nodes.getLength(); i++) {
//            NodeList nl = nodes.item(i).getChildNodes();
//            GauceDataRow row = dataSet.newDataRow();
//
//            int colIndex = -1;
//            for (int j = 0; j < nl.getLength(); j++) {
//                Node n = nl.item(j);
//
//                if (n.getNodeType() == 3)
//                    continue;
//
//                colIndex++;
//
//                switch (dataSet.getDataColumn(colIndex).getColType()) {
//                case 1:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                case 2:
//                    row.setInt(colIndex, Integer.parseInt(n.getTextContent()));
//                    break;
//                case 4:
//                    row.setDouble(colIndex,
//                        Double.parseDouble(n.getTextContent()));
//                    break;
//                case 9:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                case 13:
//                    row.setLong(colIndex, Long.parseLong(n.getTextContent()));
//                    break;
//                default:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                }
//            }
//
//            dataSet.addDataRow(row);
//        }
//    }
//
//    /*
//     * �Ķ���ͷ� �־��� �ʵ带 �˻��Ͽ� �ش� �ʵ��� ���� 
//     * �������ѿ� ���� ���� �����ڵ� �� ��쿡�� ���ڵ带 �߰��Ѵ�.
//     */
//    private void addDataRowsByBizCode(NodeList nodes, String bizField,
//            String approveCodes ) {
//
//        // Row List�� �����Ͽ� DataSet�� Row�� �߰��Ѵ�.
//        for (int i = 0; i < nodes.getLength(); i++) {
//            NodeList nl = nodes.item(i).getChildNodes();
//            GauceDataRow row = dataSet.newDataRow();
//            boolean isValid = true;
//
//            int colIndex = -1;
//            for (int j = 0; j < nl.getLength(); j++) {
//                Node n = nl.item(j);
//
//                if (n.getNodeType() == 3)
//                    continue;
//
//                colIndex++;
//
//                switch (dataSet.getDataColumn(colIndex).getColType()) {
//                case 1:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                case 2:
//                    row.setInt(colIndex, Integer.parseInt(n.getTextContent()));
//                    break;
//                case 4:
//                    row.setDouble(colIndex,
//                        Double.parseDouble(n.getTextContent()));
//                    break;
//                case 9:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                case 13:
//                    row.setLong(colIndex, Long.parseLong(n.getTextContent()));
//                    break;
//                default:
//                    row.setString(colIndex, n.getTextContent());
//                    break;
//                }
//
//                if (dataSet.getDataColumn(colIndex)
//                        .getColName()
//                        .equalsIgnoreCase(bizField)) {
//                   // String strCode = n.getTextContent();
//                    if (approveCodes.indexOf(n.getTextContent()) == -1) {
//                        isValid = false;
//                        break;
//                    }
//                }
//            }
//
//            if (isValid) {
//                dataSet.addDataRow(row);
//            }
//        }
//    }
//
//    /*
//     * HttpServletResponse�� Agent URL�� �޾� Ŭ���̾�Ʈ�� Data�� �����Ѵ�.
//     * ���� : GauceDataSet �� �����޽����� Ŭ���̾�Ʈ�� ���� �����ϹǷ� ������ throw ���� �ʴ´�.
//     * Get ������� ���� ����
//     */
//    public void flushXmlToClient(HttpServletResponse response, String url)
//            throws Exception {
//        flushXmlToClient(response, new String[] { url });
//    }
//
//    /*
//     * HttpServletResponse�� Agent URL�� �޾� Ŭ���̾�Ʈ�� Data�� �����Ѵ�.
//     * ���� : GauceDataSet �� �����޽����� Ŭ���̾�Ʈ�� ���� �����ϹǷ� ������ throw ���� �ʴ´�.
//     */
//    public void flushXmlToClient(HttpServletResponse response, String[] url)
//            throws Exception {
//        HttpGauceResponse res = (HttpGauceResponse) response;
//        GauceOutputStream gos = res.getGauceOutputStream();
//
//        try {
//            for (int i = 0; i < url.length; i++) {
//                try {
//                    // CallAgentUtil�� ���� Xml�� �޴´�.
//                    CallAgentUtil agent = new CallAgentUtil();
//                    Document doc = null;
//
//                    // NameValuePair �� ������ Post ������� ������ Get ������� ȣ���Ѵ�.
//                    if (postParams != null && postParams.length > 0)
//                        doc = agent.getAgentDataToDocument(url[i], postParams);
//                    else
//                        doc = agent.getAgentDataToDocument(url[i]);
//
//                    if (doc == null) {
//                        //						throw new Exception("Xml Document is null. Check your Xml Data.");
//                        continue;
//                    }
//
//                    // Xml ��� �� Column ������ �����ͼ� �����ͼ� ���� �� �÷��� �����Ѵ�.
//                    nodes = doc.getElementsByTagName(columnNodeName);
//
//                    if (isCreatedDataSetHeader == false) {
//                        makeDataSetHeader(nodes);
//                        gos.fragment(dataSet);
//
//                        isCreatedDataSetHeader = true;
//                    }
//
//                    // �ο� �μ�Ʈ
//                    nodes = doc.getElementsByTagName(rowNodeName);
//                    addDataRows(nodes);
//                } catch (BizException be) {
//                    // YUN_DEBUG : 20081110
//                    // Ư�� host agent ���� ��û�� �����ϴ��� 
//                    // �ش� ��û�� ����ó���ϰ�, ���� agent�� ��û�� ����Ѵ�.
//                    // throw new BizException(be.getMessage());
//                    //be.printStackTrace();
//                    continue;
//                } catch (Exception e) {
//                    // YUN_DEBUG : 20081110
//                    // Ư�� host agent ���� ��û�� �����ϴ��� 
//                    // �ش� ��û�� ����ó���ϰ�, ���� agent�� ��û�� ����Ѵ�.
//
//                    //e.printStackTrace();
//                    continue;
//                }
//            }
//
//            // Ŭ���̾�Ʈ�� ������ ����
//            gos.write(dataSet);
//        } catch (Exception e) {
//            logger.error(e.getStackTrace());
//            res.addException(e);
//            throw e;
//        } finally {
//            if (gos != null) {
//                try {
//                    gos.close();
//                } catch (Exception e) {
//                    gos = null;
//                }
//            }
//        }
//    }
//
//    /*
//     * Agent URL�� �޾� GauceDataSet�� ��ȯ�Ѵ�.
//     */
//    public GauceDataSet getXmlToGauceDataSet(String url) throws Exception {
//        return getXmlToGauceDataSet(new String[] { url });
//    }
//
//    /* getXmlToGauceDataSet() �Լ��� ������ ����� ����������, �������� �ʵ� �� ��ȸ�Ͽ� 
//     * �������� �� �ִ� ���ڵ常 �����Ѵ�.
//     */
//    public GauceDataSet getXmlToGauceDataSetByBizFilter(String[] url,
//            String bizField, String approveCodes) throws BizException, Exception {
//        if (url.length < 1)
//            throw new Exception("url cannot be null");
//
//        if ("".equals(bizField)) {
//            return getXmlToGauceDataSet(url);
//        }        
//
//        CallAgentUtil agent = new CallAgentUtil();
//
//        try {
//            int receivedRowCount = 0;
//            for (int i = 0; i < url.length; i++) {
//                logger.debug("##### START FOR " + i + " #####");
//                // #########################################
//                // Test�̹Ƿ� Agent ������ �����ع�����.
//                // ���ý� ���� try~catch�� ���ְ� �ٱ��� catch���� �ּ� �����Ѵ�.
//                // #########################################
//                try {
//                    // CallAgentUtil�� ���� Xml�� �޴´�.
//                    Document doc = null;
//
//                    // NameValuePair �� ������ Post ������� ������ Get ������� ȣ���Ѵ�.
//                    if (postParams != null && postParams.length > 0)
//                        doc = agent.getAgentDataToDocument(url[i], postParams);
//                    else
//                        doc = agent.getAgentDataToDocument(url[i]);
//
//                    logger.debug("#### Agent all complete ####");
//
//                    if (doc == null) {
//                        logger.debug("#### doc is null ####");
//                        continue;
//                        // Test������ throw���� ����
//                        //throw new Exception("Xml Document is null. Check your Xml Data.");
//                    }
//
//                    // Xml ��� �� Column ������ �����ͼ� �����ͼ� ���� �� �÷��� �����Ѵ�.
//                    nodes = doc.getElementsByTagName(columnNodeName);
//
//                    // YUN_DEBUG (2008.05.19) : doc �� ���� �����͸� ������ ���� �ʴ��� doc �� null �� �ƴϴ�.
//                    if (null == nodes || nodes.getLength() == 0) {
//                        logger.warn("nodes of (col:" + columnNodeName
//                                + ") count is zero");
//                        continue;
//                    }
//
//                    logger.debug("#### nodes count is " + nodes.getLength()
//                            + " ####");
//
//                    if (isCreatedDataSetHeader == false) {
//                        logger.debug("#### DATA set make start " + i + " ####");
//                        makeDataSetHeader(nodes);
//                        isCreatedDataSetHeader = true;
//                        logger.debug("#### DATA set make end " + i + " ####");
//                    }
//
//                    // �ο� �μ�Ʈ
//                    nodes = doc.getElementsByTagName(rowNodeName);
//
//                    // YUN_DEBUG (2008.05.19) : doc �� ���� �����͸� ������ ���� �ʴ��� doc �� null �� �ƴϴ�.
//                    if (null == nodes || nodes.getLength() == 0) {
//                        logger.warn("nodes of (row:" + rowNodeName
//                                + ") count is zero");
//                        continue;
//                    }
//
//                    logger.debug("#### START DATA ROW ADD " + i + " ####");
//
//                    if (limitRowCount > 0) {
//                        logger.debug("#### limitRowCount CHECK ["
//                                + limitRowCount + "] ####");
//
//                        // Agent���� ���� �ο츦 �ѱ��� ù��° �ο��� ù��° �÷��� LIMIT_ERROR ��� TEXT�� ������.
//                        NodeList nl = nodes.item(0).getChildNodes();
//
//                        if (DbTrackingService.LIMIT_ERROR_CODE.equals(nl.item(
//                            1)
//                                .getTextContent()
//                                .trim())) {
//                            logger.debug("#### "
//                                    + DbTrackingService.LIMIT_ERROR_CODE);
//                            throw new BizException(
//                            		DbTrackingService.LIMIT_ERROR_MSG);
//                        }
//
//                        receivedRowCount += nodes.getLength();
//                        if (receivedRowCount > limitRowCount) {
//                            logger.debug("##### "
//                                    + DbTrackingService.LIMIT_ERROR_CODE);
//                            throw new BizException(
//                            		DbTrackingService.LIMIT_ERROR_MSG);
//                        }
//                    }
//                    addDataRowsByBizCode(nodes, bizField, approveCodes);
//                    logger.debug("#### END DATA ROW ADD " + i + " ####");
//
//                } catch (BizException be) {
//                    throw new BizException(be.getMessage());
//                } catch (Exception e) {
//                	logger.error(" error : ", e); 
//                    //e.printStackTrace();
//                }
//            }
//        } catch (Exception e) {
//            logger.error(e);
//            throw e;
//        }
//
//        logger.debug("#### GauceDataSetUtil LOGGER START ####");
//        logger.debug("#### GauceDataSetUtil " + dataSet.getDataColCnt()
//                + " ####");
//        logger.debug("#### GauceDataSetUtil " + dataSet.getDataRowCnt()
//                + " ####");
//        logger.debug("#### GauceDataSetUtil LOGGER END ####");
//
//        return dataSet;
//    }
//
//    /*
//     * Agent URL�� �޾� GauceDataSet�� ��ȯ�Ѵ�.
//     */
//    public GauceDataSet getXmlToGauceDataSet(String[] url) throws BizException,
//            Exception {
//        if (url.length < 1)
//            throw new Exception("url cannot be null");
//
//        CallAgentUtil agent = new CallAgentUtil();
//
//        try {
//            int receivedRowCount = 0;
//            for (int i = 0; i < url.length; i++) {
//                logger.debug("##### START FOR " + i + " #####");
//                // #########################################
//                // Test�̹Ƿ� Agent ������ �����ع�����.
//                // ���ý� ���� try~catch�� ���ְ� �ٱ��� catch���� �ּ� �����Ѵ�.
//                // #########################################
//                try {
//                    // CallAgentUtil�� ���� Xml�� �޴´�.
//                    Document doc = null;
//
//                    // NameValuePair �� ������ Post ������� ������ Get ������� ȣ���Ѵ�.
//                    if (postParams != null && postParams.length > 0)
//                        doc = agent.getAgentDataToDocument(url[i], postParams);
//                    else
//                        doc = agent.getAgentDataToDocument(url[i]);
//
//                    logger.debug("#### Agent all complete ####");
//
//                    if (doc == null) {
//                        logger.debug("#### doc is null ####");
//                        continue;
//                        // Test������ throw���� ����
//                        //throw new Exception("Xml Document is null. Check your Xml Data.");
//                    }
//
//                    // Xml ��� �� Column ������ �����ͼ� �����ͼ� ���� �� �÷��� �����Ѵ�.
//                    nodes = doc.getElementsByTagName(columnNodeName);
//
//                    // YUN_DEBUG (2008.05.19) : doc �� ���� �����͸� ������ ���� �ʴ��� doc �� null �� �ƴϴ�.
//                    if (null == nodes || nodes.getLength() == 0) {
//                        logger.warn("nodes of (col:" + columnNodeName
//                                + ") count is zero");
//                        continue;
//                    }
//
//                    logger.debug("#### nodes count is " + nodes.getLength()
//                            + " ####");
//
//                    if (isCreatedDataSetHeader == false) {
//                        logger.debug("#### DATA set make start " + i + " ####");
//                        makeDataSetHeader(nodes);
//                        isCreatedDataSetHeader = true;
//                        logger.debug("#### DATA set make end " + i + " ####");
//                    }
//
//                    // �ο� �μ�Ʈ
//                    nodes = doc.getElementsByTagName(rowNodeName);
//
//                    // YUN_DEBUG (2008.05.19) : doc �� ���� �����͸� ������ ���� �ʴ��� doc �� null �� �ƴϴ�.
//                    if (null == nodes || nodes.getLength() == 0) {
//                        logger.warn("nodes of (row:" + rowNodeName
//                                + ") count is zero");
//                        continue;
//                    }
//
//                    logger.debug("#### START DATA ROW ADD " + i + " ####");
//
//                    if (limitRowCount > 0) {
//                        logger.debug("#### limitRowCount CHECK ["
//                                + limitRowCount + "] ####");
//
//                        // Agent���� ���� �ο츦 �ѱ��� ù��° �ο��� ù��° �÷��� LIMIT_ERROR ��� TEXT�� ������.
//                        NodeList nl = nodes.item(0).getChildNodes();
//
//                        if (DbTrackingService.LIMIT_ERROR_CODE.equals(nl.item(
//                            1)
//                                .getTextContent()
//                                .trim())) {
//                            logger.debug("#### "
//                                    + DbTrackingService.LIMIT_ERROR_CODE);
//                            throw new BizException(
//                            		DbTrackingService.LIMIT_ERROR_MSG);
//                        }
//
//                        receivedRowCount += nodes.getLength();
//                        if (receivedRowCount > limitRowCount) {
//                            logger.debug("##### "
//                                    + DbTrackingService.LIMIT_ERROR_CODE);
//                            throw new BizException(
//                            		DbTrackingService.LIMIT_ERROR_MSG);
//                        }
//                    }
//                    addDataRows(nodes);
//                    logger.debug("#### END DATA ROW ADD " + i + " ####");
//
//                } catch (BizException be) {
//                    throw new BizException(be.getMessage());
//                } catch (Exception e) {
//                	logger.error(" error : ", e); 
//                    //e.printStackTrace();
//                }
//            }
//        } catch (Exception e) {
//            logger.error(e);
//            throw e;
//        }
//
//        logger.debug("#### GauceDataSetUtil LOGGER START ####");
//        logger.debug("#### GauceDataSetUtil " + dataSet.getDataColCnt()
//                + " ####");
//        logger.debug("#### GauceDataSetUtil " + dataSet.getDataRowCnt()
//                + " ####");
//        logger.debug("#### GauceDataSetUtil LOGGER END ####");
//
//        return dataSet;
//    }
//
//}