001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    // package org.opengion.hayabusa.html;
017    package org.opengion.fukurou.util;
018    
019    
020    /**
021     * DBCell で共通的に使用されã‚?フォーマッタークラスですã?
022     * フォーマットã?ã€?1,$2,$3,$4?¥?¥?¥$9とã�?�†æ–?­—å?を含んだ入力テキストですã?
023     * これに、AAA:BBB:CCC:DDD とã�?�†値(value)をã?コロン(:)でåˆ?‰²しã?
024     * おã?おã?のã€?1,$2,$3,$4 に割り当てなおして、文字å?を合成しますã?
025     * またã?$1 は、本来の値として使用しますã?で、getValut()メソãƒ?ƒ‰でã€?
026     * 取り出せるようになってã�?�¾すã?
027     * さらに、å?のæ–?­—å?"AAA:BBB:CCC:DDD"はã€?0 に割り当てられますã?割り当てã�?
028     * なã�?¤‰数はã€?"(ゼロæ–?­—å?)として、扱われますã?
029     *
030     * @og.rev 3.4.0.2 (2003/09/05) 新規作æ?
031     * @og.rev 5.2.2.0 (2010/11/01) パッケージ移å‹?hayabusa.html â‡?fukurou.util)
032     * @og.group ãƒ??タ表示
033     * @og.group ãƒ??タ編é›?
034     *
035     * @version  4.0
036     * @author       Kazuhiko Hasegawa
037     * @since    JDK5.0,
038     */
039    public class StringFormat {
040            private static final String[] FROM = new String[] { "$1","$2","$3","$4","$5","$6","$7","$8","$9" } ;
041            /** 初期セパレータ {@value} */
042            public static final char SEPARATOR = ':' ;
043            private final String inText   ;
044            private final String inValue  ;
045            private final String inName; // 4.3.4.0 (2008/12/01) $Cの置換え追åŠ?
046            private String outText  = null;
047            private String outValue = null;
048    
049    //      /**
050    //       * コンストラクター
051    //       * ãƒ?‚­ストとコロン(:)で区åˆ?‚‰れた引数を指定してオブジェクトを構築しますã?
052    //       * ãƒ?‚­ストにはã€?1,$2,$3,$4?¥?¥?¥$9とã�?�†æ–?­—å?を含んだ入力テキストですã?
053    //       * 値は、コロン(:)で区åˆ?‚‰れてã€?1,$2等にé ?•ªに割り当てられますã?
054    //       *
055    //       * @param text  $1,$2,$3,$4?¥?¥?¥$9とã�?�†æ–?­—å?を含んだ入力テキスãƒ?
056    //       * @param value コロン(:)で区åˆ?‚‰れた引数(AAA:BBB:CCC:DDD)
057    //       */
058    //      public StringFormat( final String text, final String value ) {
059    //              inText  = text;
060    //              inValue = value;
061    //      }
062    
063            /**
064             * コンストラクター
065             * ãƒ?‚­ストとコロン(:)で区åˆ?‚‰れた引数を指定してオブジェクトを構築しますã?
066             * ãƒ?‚­ストにはã€?1,$2,$3,$4?¥?¥?¥$9とã�?�†æ–?­—å?を含んだ入力テキストですã?
067             * 値は、コロン(:)で区åˆ?‚‰れてã€?1,$2等にé ?•ªに割り当てられますã?
068             * nameは$Cで置き換えるæ–?­—å?ですã?
069             *
070             * @og.rev 4.3.4.0 (2008/12/01) $C対応追åŠ?
071             *
072             * @param text  $1,$2,$3,$4?¥?¥?¥$9とã�?�†æ–?­—å?を含んだ入力テキスãƒ?
073             * @param value コロン(:)で区åˆ?‚‰れた引数(AAA:BBB:CCC:DDD)
074             * @param name  $Cと置き換えるæ–?­—å?
075             */
076            public StringFormat( final String text, final String value, final String name ) {
077                    inText  = text;
078                    inValue = value;
079                    inName  = name;
080            }
081    
082            /**
083             * フォーマット変換を行い結果を返しますã?
084             * 変換時にã€?1,$2?¥?¥?¥等に割り当てられなã�?¤‰数には、ゼロæ–?­—å?("")が割り当てられますã?
085             *
086             * @og.rev 3.8.8.2 (2007/01/26) 自åˆ??身をã?$0 に割り当てるã?
087             * @og.rev 4.3.4.0 (2008/12/01) $Cの置換え追åŠ?
088             *
089             * @return フォーマット変換結果
090             */
091            public String format() {
092    
093                    final String[] to;
094                    if( inValue != null && inValue.indexOf( SEPARATOR ) >= 0 ) {
095                            to = StringUtil.csv2Array( inValue, SEPARATOR );
096                    }
097                    else {
098                            to = new String[] { inValue };
099                    }
100    
101                    String newText = inText;
102                    int i = 0;
103                    for( ; i < to.length; i++ ) {
104                            newText = StringUtil.replace( newText, FROM[i], to[i] );
105                    }
106                    for( ; i < FROM.length; i++ ) {
107                            newText = StringUtil.replace( newText, FROM[i], "" );
108                    }
109    
110                    // 3.8.8.2 (2007/01/26) 自åˆ??身をã?$0 に割り当てるã?
111                    newText = StringUtil.replace( newText, "$0", inValue );
112    
113                    // 4.3.4.0 (2008/12/01) $Cの置換え
114                    newText = StringUtil.replace( newText, "$C", inName );
115    
116                    outValue = to[0];
117                    outText = newText;
118                    return outText;
119            }
120    
121            /**
122             * 第ä¸?¼•数($1に相å½?を返しますã?
123             * 引数はコロン(:)で区åˆ?‚‰れて渡されてã�?�¾すã?å†?ƒ¨で使用する本当ã?引数は
124             * 第ä¸?¼•数ですã?これは、フォーマット時の$1に割り当てられますã?
125             * フォーマット変換前に取得すると、null が返りますã?
126             *
127             * @return 第ä¸?¼•数($1に相å½?
128             */
129            public String getValue() {
130                    return outValue;
131            }
132    
133            /**
134             * フォーマット変換結果を返しますã?
135             * これはã€?format() 処ç�?‚’実行した結果をå?部でキャãƒ?‚·ュしてã�?�¾すã?
136             * 何度も結果ã�?�‘を取得したい場合に使用しますã?(変換処ç�??実行しません)
137             * フォーマット変換前に取得すると、null が返りますã?
138             *
139             * @return フォーマット変換結果
140             */
141            public String getText() {
142                    return outText;
143            }
144    }