/*
 * ElementList.java
 *
 * Created on 2007/03/16, 22:16
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.itscool.stylist.el;

import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.StringTokenizer;
import org.itscool.commons.bean.BeanUtil;

/**
 * EL関数情報管理クラス
 * @author KANO
 */
public class ElementFunc{
    public static final String LINE=System.getProperty("line.separator");
    private String className;
    private String funcName;
    private LinkedList argList = new LinkedList();
    
    /**
     * 引数で指定されたEL関数文字列からEL関数を処理するために必要な情報を
     * 抽出します。
     * @param srcStr EL関数文字列
     * @return ElementFunc EL関数情報を返します
     */
    public static ElementFunc createFuncList(String srcStr){
        int kakko = srcStr.indexOf("(");
        int tojiKakko = srcStr.indexOf(")");
        if( kakko == -1 || tojiKakko == -1 ){
            
        }
        String args = srcStr.substring(kakko+1, tojiKakko);
        String classFuncName = srcStr.substring(0, kakko);
        int classNameIndex = classFuncName.indexOf(".");
        String className = classFuncName.substring(0, classNameIndex);
        className = className.substring(0, 1).toUpperCase() + className.substring(1, className.length());
        String funcName = classFuncName.substring(classNameIndex +1, classFuncName.length());
        funcName = funcName.trim();
//        System.out.println("func : " + funcName);
        
        ElementFunc func = new ElementFunc();
        func.setClassName(className);
        func.setFuncName(funcName);
        
        StringTokenizer propertySt = new StringTokenizer(args, ",");
        while(propertySt.hasMoreTokens()){
            String arg = propertySt.nextToken().trim();
//            System.out.println("arg : "+arg);
//            arg = BeanUtil.supressQuate(arg);
            if(arg == null || arg.length() == 0){
                arg = "";
            }
            ElementList elementList = ElementList.createElementList(arg);
            func.addArg(elementList);
        }
        
        return func;
    }
    
    /**
     * 関数名を取得します
     * @return 関数名を返します
     */
    public String getFuncName() {
        return funcName;
    }
    
    /**
     * 関数名をセットします
     * @param funcName 関数名
     */
    public void setFuncName(String funcName) {
        this.funcName = funcName;
    }
    
    /**
     * 引数リストを取得します
     * @return 引数リストを返します
     */
    public LinkedList getArgList() {
        return argList;
    }
    
    /**
     * 引数情報を引数リストに追加します
     * @param elementList 引数情報
     */
    public void addArg(ElementList elementList){
        argList.addLast(elementList);
    }
    
    /**
     * クラス名を取得します
     * @return クラス名を返します
     */
    public String getClassName() {
        return className;
    }
    
    /**
     * クラス名をセットします
     * @param className クラス名
     */
    public void setClassName(String className) {
        this.className = className;
    }
    
    
    
}