/*
 * $Id: Function.java,v 1.5 2005/12/25 23:36:16 sugimotokenichi Exp $
 * Copyright (C) 2005 SUGIMOTO Ken-ichi
 * 作成日: 2005/03/23
 */
package feat.v1.config;

import feat.v1.StringUtil;

/**
 * 関数の名前とパラメータ。
 * @author SUGIMOTO Ken-ichi
 */
public class Function {

	private String name;
	private String[] params;

    public Function(String name, String[] params) {
        this.name = name;
        this.params = params;
    }

    /**
     * 関数形式の文字列をパースする。
     * 文字列は 関数名(引数1, 引数2, ... ) の形式。
     * 名前、引数とも前後の空白文字は削除される。
     * @param func 関数形式の文字列
     * @see Character#isWhitespace(char)
     */
    public Function(String func) {
        int leftBracketIndex = func.indexOf('(');
        // 関数名
        if ( leftBracketIndex == -1 ) {
            name = func.trim();
        }
        else if ( leftBracketIndex > 0 ) {
            name = func.substring(0, leftBracketIndex).trim();
        }

        // 引数リスト
        if ( leftBracketIndex > -1 ) {
            int rightBracketIndex = func.indexOf(')', leftBracketIndex+1);
            String pstr = func.substring(leftBracketIndex+1, rightBracketIndex);
            params = StringUtil.stripAll(StringUtil.split(pstr, ','));
        }
        else {
            params = new String[0];
        }
    }

    /**
     * @return name を戻します。
     */
    public String getName() {
        return name;
    }
    /**
     * @return params を戻します。
     */
    public String[] getParams() {
        return params;
    }

    public String toString() {
        StringBuffer buf = new StringBuffer();
        buf.append("name:").append(name);
        buf.append(" params:[").append(StringUtil.join(params, ",")).append("]");
        return buf.toString();
    }
}
