/*
 * StringC.java
 *
 * Created on 2007/03/24, 1:17
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.itscool.stylist.function;

import java.util.StringTokenizer;
import org.itscool.commons.util.PaddingUtil;

/**
 * 文字列操作EL関数
 * @author KANO
 */
public class StringC {
    public static void main(String[] argv){
        StringC c = new StringC();
        System.out.println(c.insertLine("hello world mr michiaki kanou yahoo", 5));
        System.out.println(c.insertLine("hello", 5));
        System.out.println(c.insertLine("hey", 5));
        System.out.println(c.insertLine("hey", 0));
        
        System.out.println(c.lineToBr("aaa\nbbbb\nccc\n"));
    }
    
    /**
     * 引数で指定された文字列にたいして、指定文字列数ごとに改行（&lt;br/&gt;）
     * を挿入します。
     * @param srcStr 変換元文字列
     * @param lineLen 1行ごとの文字数
     * @return 改行を挿入した文字列
     */
    public String insertLine(String srcStr, int lineLen){
        String dstStr = "";
        int len = srcStr.length();
        if( lineLen == 0 ){
            return srcStr;
        }
        int count = len / lineLen;
        int index = 0;
        if( count == 0 ){
            return srcStr;
        }
        for( int i=0; i<=count; i++){
            String substr;
            if( len > (index+lineLen) ){
                substr = srcStr.substring(index, index+lineLen);
                dstStr += substr + "<br/>";
            }else{
                substr = srcStr.substring(index, len);
                dstStr += substr;
            }
            
            index += lineLen;
        }
        return dstStr;
    }
    
    /**
     * 改行コードを（&lt;br/&gt;）に置き換えます。
     * @param srcStr 変換元文字列
     * @return 改行（&lt;br/&gt;）を挿入した文字列
     */
    public String lineToBr(String srcStr){
        String dstStr = "";
        StringTokenizer propertySt = new StringTokenizer(srcStr, "\n");
        if( propertySt.countTokens() == 0 ){
            return srcStr;
        }
        while(propertySt.hasMoreTokens()){
            dstStr += propertySt.nextElement() + "<br/>";
        }
        return dstStr;
    }
    
    /**
     * 指定した文字列に対してtrimを実行します
     * @param srcStr trim対象文字列
     * @return trim実行後の文字列
     */
    public String trim(String srcStr){
        if(srcStr == null) return "";
        return srcStr.trim();
    }
    
    /**
     * データを指定されたサイズでゼロパディングします
     * @param value タグデータ
     * @param size タグデータのサイズ
     * @return パディング済みのデータ
     */
    public String zeroPadding(String value, int size){
        return PaddingUtil.zeroPadding(value, size);
    }
    
    /**
     * データを指定されたサイズでスペースパディングします
     * @param value タグデータ
     * @param size タグデータのサイズ
     * @return パディング済みのデータ
     */
    public String spacePadding(String value, int size){
        return PaddingUtil.spacePadding(value, size);
    }
    
    /**
     * データを指定されたサイズで全角スペースパディングします
     * @param value タグデータ
     * @param size タグデータのサイズ
     * @return パディング済みのデータ
     */
    public String nSpacePadding(String value, int size){
        return PaddingUtil.nSpacePadding(value, size);
    }
    
    /**
     * データを指定されたサイズでゼロパディングします
     * @param valueInt タグデータ
     * @param size タグデータのサイズ
     * @return パディング済みのデータ
     */
    public String zeroPadding(int valueInt, int size){
        return PaddingUtil.zeroPadding(valueInt, size);
    }
    
    /**
     * データを指定されたサイズでスペースパディングします
     * @param valueInt タグデータ
     * @param size タグデータのサイズ
     * @return パディング済みのデータ
     */
    public String spacePadding(int valueInt, int size){
        return PaddingUtil.spacePadding(valueInt, size);
    }
}
