com.dream.messaging.engine.csv.CSVDataHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.dream.messaging.engine.csv.CSVDataHandler.java

Source

/**************************************************************************
 * Licensed Material - Property of Dawn InfoTek                           *
 * Copyright (c) Dawn InfoTek Inc. 1999, 2004, 2008 -All rights reserved. * 
 * (<http://www.dawninfotek.com>)                                         *
 *                                                                        *
 * This file contains proprietary intellectual property of                *
 * Dawn InfoTek Inc. The contents of and information in this file         *
 * is only to be used in conjunction with a valid Dawn4J license          *
 * as specified in the Dawn4J license agreement. All other use            *
 * is prohibited.                                                         *
 **************************************************************************/
package com.dream.messaging.engine.csv;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.w3c.dom.Node;

import com.dream.messaging.DataConvertException;
import com.dream.messaging.Message;
import com.dream.messaging.StringMessage;
import com.dream.messaging.engine.DataHandler;
import com.dream.messaging.parser.ElementAttr;
import com.dream.messaging.parser.ElementClassType;
import com.dream.messaging.parser.Strings;
import com.dream.messaging.utils.QueryNode;

// TODO: Auto-generated Javadoc
/**
 * The Class CSVDataHandler proccesses Comma-Separated Values data.
 * 
 * <p>
 * 
 * @author Liang Yanpeng
 * @author Zhang Fu
 */
public class CSVDataHandler extends DataHandler {

    /** The delimeter. */
    private String delimeter;

    /**
     * Instantiates a new CSV data handler.
     * 
     * @param delimeter
     *            the delimeter
     */
    public CSVDataHandler(String delimeter) {
        super();
        if (delimeter != null) {
            this.delimeter = Strings.replaceESC(delimeter);
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#appendData(com.dawninfotek
     * .base.packet.common.Message, java.lang.Object)
     */
    @Override
    public void appendData(Message message, Object append) throws DataConvertException {
        try {
            message.append(append == null ? "" : append).append(this.delimeter);
        } catch (IOException e) {
            throw new DataConvertException("", e);
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @seecom.dawninfotek.base.packet.engine.DataHandler#appendFixedData(com.
     * dawninfotek.base.packet.common.Message, java.lang.Object)
     */
    @Override
    public void appendFixedData(Message message, Object append) throws DataConvertException {
        try {
            message.append(append == null ? "" : append);
        } catch (IOException e) {
            throw new DataConvertException("", e);
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#appendMessage(com.dawninfotek
     * .base.packet.common.Message, com.dawninfotek.base.packet.common.Message)
     */
    @Override
    public void appendMessage(Message message, Message append) throws DataConvertException {
        if (append != null) {
            try {
                message.append(append.getContent());
            } catch (IOException e) {
                throw new DataConvertException("", e);
            }
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#createMessageData(java
     * .lang.Object, org.w3c.dom.Node)
     */
    @Override
    public Object createMessageData(Object data, Node node) throws DataConvertException {
        String formatedString = this.createStringMessage(data, node);
        if (formatedString == null) {
            return null;
        }
        String clzName = QueryNode.getAttribute(node, ElementAttr.Attr_Class);
        if (clzName == null) {
            return formatedString;
        } else {
            if (clzName.equalsIgnoreCase(ElementClassType.CLASS_DECIMAL)
                    || clzName.equalsIgnoreCase(ElementClassType.CLASS_FLOAT)
                    || (clzName.equalsIgnoreCase(ElementClassType.CLASS_DOUBLE))) {
                formatedString = StringUtils.remove(formatedString, ".");
            }
        }
        return formatedString;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#createValue(java.lang.
     * Object, org.w3c.dom.Node)
     */
    @Override
    public Object createValue(Object data, Node node) {
        String sData = (String) data;
        String clsname = QueryNode.getAttribute(node, ElementAttr.Attr_Class);
        if ((clsname != null) && (clsname.equalsIgnoreCase(ElementClassType.CLASS_DECIMAL)
                || clsname.equalsIgnoreCase(ElementClassType.CLASS_DOUBLE)
                || clsname.equalsIgnoreCase(ElementClassType.CLASS_FLOAT))) {
            String format = QueryNode.getAttribute(node, ElementAttr.Attr_Format);
            if (format != null) {
                int index = format.indexOf('s');
                char sign = 0;
                if (index >= 0) {
                    format = format.substring(0, index);
                    if (sData.startsWith("+") || sData.startsWith("-")) {
                        sign = sData.charAt(0);
                        sData = sData.substring(1);

                    } else if (sData.endsWith("+") || sData.endsWith("-")) {
                        sign = sData.charAt(sData.length() - 1);
                        sData = sData.substring(0, sData.length() - 1);
                    } else if (sData.endsWith(" ")) {
                        sign = '+';
                        sData = sData.substring(0, sData.length() - 1);
                    }

                }
                if (sData.indexOf('.') < 0) {
                    index = format.indexOf('p');
                    if (index >= 0) {
                        format = format.substring(index + 1);
                        index = format.indexOf('s');
                        if (index >= 0) {
                            format = format.substring(0, index);
                        }
                    }
                    int factor = Integer.parseInt(format);
                    int len = sData.length();
                    if (len > factor) {
                        sData = sData.substring(0, len - factor) + "." + sData.substring(len - factor);
                    }
                }
                sData = sign + sData;
            }
        }
        return this.createValue(sData, node);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#formatMessage(java.lang
     * .Object, org.w3c.dom.Node)
     */
    @Override
    public Object formatMessage(Object msgData, Node node) {
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.dawninfotek.base.packet.engine.DataHandler#newMessage()
     */
    @Override
    public Message newMessage() {

        return new StringMessage();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#readCount(com.dawninfotek
     * .base.packet.common.Message, org.w3c.dom.Node)
     */
    @Override
    public int readCount(Message message, Node node) {

        try {
            return Integer.parseInt(this.readString(message, node));
        } catch (NumberFormatException ex) {
            return -1;
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#readData(com.dawninfotek
     * .base.packet.common.Message, org.w3c.dom.Node)
     */
    @Override
    public Object readData(Message message, Node node) {
        String fixed = QueryNode.getAttribute(node, ElementAttr.Attr_Fixed);
        Object data = null;
        if (fixed != null) {
            fixed = Strings.replaceESC(fixed);

            String msg = (String) message.getContent();
            int len = fixed.length();
            data = msg.substring(this.offset, len + this.offset);
            this.offset += len;
            return data;
        } else {
            return this.readString(message, node);
        }

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#readFixedData(com.dawninfotek
     * .base.packet.common.Message, java.lang.String)
     */
    @Override
    public Object readFixedData(Message message, String fixed) throws DataConvertException {
        if (fixed != null) {
            fixed = Strings.replaceESC(fixed);

            String msg = (String) message.getContent();
            int len = fixed.length();
            String data = msg.substring(this.offset, len + this.offset);
            this.offset += len;
            return data;
        }
        return null;
    }

    /**
     * Read string.
     * 
     * @param message
     *            the message
     * @param node
     *            the node
     * 
     * @return the string
     */
    private String readString(Message message, Node node) {
        String msg = (String) message.getContent();
        int index = msg.indexOf(this.delimeter, this.offset);
        if (index < 0) {
            return null;
        }
        String data = msg.substring(this.offset, index);
        this.offset = index + this.delimeter.length();
        // ???

        String sData = data;
        String clsname = QueryNode.getAttribute(node, ElementAttr.Attr_Class);
        if ((clsname != null) && (clsname.equalsIgnoreCase(ElementClassType.CLASS_DECIMAL)
                || clsname.equalsIgnoreCase(ElementClassType.CLASS_DOUBLE)
                || clsname.equalsIgnoreCase(ElementClassType.CLASS_FLOAT))) {
            sData = StringUtils.remove(sData, ",");
            String format = QueryNode.getAttribute(node, ElementAttr.Attr_Format);
            if (format != null) {
                int idx = format.indexOf('s');
                char sign = 0;
                if (idx >= 0) {
                    format = format.substring(0, idx);
                    if (sData.startsWith("+") || sData.startsWith("-")) {
                        sign = sData.charAt(0);
                        sData = sData.substring(1);

                    } else if (sData.endsWith("+") || sData.endsWith("-")) {
                        sign = sData.charAt(sData.length() - 1);
                        sData = sData.substring(0, sData.length() - 1);
                    }
                }
                if (sData.indexOf('.') < 0) {
                    idx = format.indexOf('p');
                    if (idx >= 0) {
                        format = format.substring(idx + 1);
                        idx = format.indexOf('s');
                        if (idx >= 0) {
                            format = format.substring(0, idx);
                        }
                    }
                    int factor = Integer.parseInt(format);
                    int len = sData.length();
                    if (len > factor) {
                        sData = sData.substring(0, len - factor) + "." + sData.substring(len - factor);
                    }
                }
                sData = sData + sign;
            }
        }
        return sData;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.dawninfotek.base.packet.engine.DataHandler#validateData(java.lang
     * .Object, org.w3c.dom.Node)
     */
    @Override
    public boolean validateData(Object data, Node node) {
        return true;
    }

}