package com.eactive.eai.transformer.function.convert;

import java.util.Stack;

import org.nfunk.jep.ParseException;
import org.nfunk.jep.function.PostfixMathCommand;


/**
 * 0x20값을 Space(0x30)으로 변환하는 함수.
 * 입력 값은 byte[], 결과는 byte[]임.
 */
public class Space2Zero extends PostfixMathCommand {
    public Space2Zero() {
        numberOfParameters = 1;
    }

    public void run(Stack inStack) throws ParseException {
        checkStack(inStack);

        Object param = inStack.pop();

        byte[] value = null;

        if (param instanceof String) {
            value = ((String) param).getBytes();
        } else if (param instanceof byte[]) {
            value = (byte[]) param;
        } else if (param == null) {
            inStack.push(new byte[0]);
            return;
        } else {
            throw new ParseException("Function의 파라미터 인수가 byte[], String이 아닙니다. : " + param);
        }

        try {
        	for(int i=0; i<value.length; i++) {
        		if(value[i] == (byte)0x20) value[i] = (byte)0x30;
        	}
            inStack.push(value);
        } catch (Exception e) {
            throw new ParseException(e.getMessage(), e);
        }
    }
}
