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.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.fukurou.util.XHTMLTag;
020    
021    import static org.opengion.fukurou.util.StringUtil.nval ;
022    
023    /**
024     * ラジオボタンで表示é ?Order By 句)を指定するタグですã?
025     *
026     * name 属æ?値はã€?"ORDER_BY" 固定ですã?
027     * columns 属æ?は、カンマ区åˆ?‚Šのカラãƒ?±žæ?を設定しますã?
028     * ロケールは、ユーザーæƒ??の lang 属æ?をå?期å?で使用しã? セãƒ?ƒˆされてã�?�ªã�??合ã?ã€?
029     * リクエスト情報のロケールから取得しますã?
030     *
031     * @og.formSample
032     * ●形式ï¼?lt;og:orderBy columns="…" />
033     * ●body?šなã�?
034     *
035     * ●Tag定義??
036     *   <og:orderBy
037     *       columns          ○ã?TAG】表示é ?¯¾象のカラãƒ?‚’CSV形式でè¤?•°æŒ?®šしまã�?å¿??)ã€?
038     *       checked            【TAG】å?めからチェãƒ?‚¯された状æ…?checked)で表示しまã�?
039     *       lbls               【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしまã�?
040     *       checkedValue       【TAG】å?めからチェãƒ?‚¯された状態にする値を指定しまã�?
041     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
042     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
043     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
044     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
045     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
046     *   />
047     *
048     * ●使用ä¾?
049     *    <og:orderBy columns="PN,YOBI" checked="checked" />
050     *    <og:orderBy columns="YOBI,PN"   />
051     *    <og:orderBy columns="MKNM,YOBI" />
052     *
053     * @og.rev 3.1.4.0 (2003/04/18) 継承å…?‚’、CommonTagSupport に変更ã€?
054     * @og.group 画面部å“?
055     *
056     * @version  4.0
057     * @author   Kazuhiko Hasegawa
058     * @since    JDK5.0,
059     */
060    public class OrderByTag extends CommonTagSupport {
061            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
062            private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
063    
064            private static final long serialVersionUID = 522020101101L ;
065    
066            private String columns      = null;
067            private String labels       = null;
068            private String checked      = null;
069            private String checkedValue = null;
070    
071            /**
072             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
073             *
074             * @og.rev 3.1.4.1 (2003/04/21) HTMLTagSupport の継承をå»?­¢した為、doEndTag() を追åŠ??
075             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
076             *
077             * @return      後続å?ç�??æŒ?¤º
078             */
079            @Override
080            public int doEndTag() {
081                    debugPrint();           // 4.0.0 (2005/02/28)
082                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
083                    if( useTag() ) {
084                            jspPrint( makeTag() );
085                    }
086                    return(EVAL_PAGE);
087            }
088    
089            /**
090             * タグリブオブジェクトをリリースしますã?
091             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
092             *
093             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
094             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
095             *
096             */
097            @Override
098            protected void release2() {
099                    super.release2();
100                    columns      = null;
101                    labels       = null;
102                    checked      = null;
103                    checkedValue = null;
104            }
105    
106            /**
107             * 検索条件の入力用のãƒ?‚­ストフィールドを作æ?しますã?
108             *
109             * ãƒ??ブルタグによりフィールドã?åˆ?‰²されますã?
110             * 使用時ã?、テーブルタグを前後に使用して下さã�??
111             *
112             * @og.rev 3.1.1.0 (2003/03/28) radio ボタン等で、ラベルをクリãƒ?‚¯してもå?をセãƒ?ƒˆできるようにするã€?
113             *
114             * @return  入力用のãƒ?‚­ストフィールドタグ
115             */
116            protected String makeTag() {
117                    set( "type","radio" );
118                    set( "name","ORDER_BY" );
119                    set( "value",columns );
120                    if( labels == null ) { setLbls( columns ); }
121                    String lbls = getMsglbl();
122    
123                    if( checkedValue != null && checkedValue.length() > 0 ) {
124                            if( checkedValue.equals( columns ) ) {
125                                    set( "checked","checked" );
126                            }
127                    }
128                    else {
129                            set( "checked",checked );
130                    }
131    
132                    if( get( "id" ) == null ) { set( "id",TaglibUtil.getTagId() ); }
133    
134                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
135    
136                    rtn.append( "<td>" );
137                    rtn.append( XHTMLTag.input( getAttributes() ) );
138                    rtn.append( "</td>" );
139                    rtn.append( "<td>" );
140                    rtn.append( "<label for=\"" );
141                    rtn.append( get( "id" ) );
142                    rtn.append( "\">" );
143                    rtn.append( lbls );
144                    rtn.append( "</label>" );
145                    rtn.append( "</td>" );
146    
147                    return rtn.toString() ;
148            }
149    
150            /**
151             * 【TAG】表示é ?¯¾象のカラãƒ?‚’CSV形式でè¤?•°æŒ?®šしますã?
152             *
153             * @og.tag 表示é ?¯¾象のカラãƒ?‚’æŒ?®šしますã?
154             *
155             * @param   columns カラãƒ?CSV形å¼?
156             */
157            public void setColumns( final String columns ) {
158                    this.columns = getRequestParameter( columns );
159            }
160    
161            /**
162             * 【TAG】å?めからチェãƒ?‚¯された状æ…?checked)で表示しますã?
163             *
164             * @og.tag
165             * check 値ã�?"checked" の場合ã?み、実行されますã?
166             *
167             * @param   ch "checked" 値
168             */
169            public void setChecked( final String ch ) {
170                    checked = getRequestParameter( ch );
171                    if( "checked".equals( checked )) {
172                            checked = "checked";
173                    }
174                    else {
175                            checked = null;
176                    }
177            }
178    
179            /**
180             * 【TAG】å?めからチェãƒ?‚¯された状態にする値を指定しますã?
181             *
182             * @og.tag
183             * チェãƒ?‚¯バリューがã?自åˆ??身のカラãƒ?��と同じであれば、チェãƒ?‚¯がつきますã?
184             * 通常、checkedValue = "{&#064;ORDER_BY}" で、è?動的にチェãƒ?‚¯されますã?
185             *
186             * @param   ch チェãƒ?‚¯された状態にする値
187             */
188            public void setCheckedValue( final String ch ) {
189                    checkedValue = nval( getRequestParameter( ch ),checkedValue );
190            }
191    
192            /**
193             * 【TAG】ラベルをCSV形式でè¤?•°æŒ?®šしますã?
194             *
195             * @og.tag
196             * ラベル(è¤?•°)を変更するときに、lbls属æ?を使ã�?�¾すã?
197             *
198             * シングルラベルの lbl 属æ?との違いは,ここではラベルをè¤?•° カンマ区åˆ?‚Šで
199             * 渡すことが可能であることですã?これによりã€?A,B,C" とã�?�†値に対してã€?
200             * "Aのラベル表示,Bのラベル表示,Cのラベル表示" とã�?�†具合にæ–?­—å?ã‚?
201             * 再合成しますã?
202             * これは、SQLæ–??Order By 句で、ソートé?を指定するå?合などに便利ですã?
203             *
204             * @og.rev 3.5.6.2 (2004/07/05) 先に配å?にåˆ?§£してからリクエスト変数の値を取å¾?
205             * @og.rev 5.2.2.0 (2010/11/01) setMsglbl å»?­¢ â‡?setLbl に置換え
206             *
207             * @param   lbls è¤?•°ラベルID(カンマ区åˆ?‚Š)
208             */
209            public void setLbls( final String lbls ) {
210                    labels = getRequestParameter( lbls ) ;
211    
212                    String[] array = getCSVParameter( lbls );
213    
214                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
215                    buf.append( getLabel( array[0] ) );
216                    for( int i=1; i<array.length; i++ ) {
217                            buf.append( "," );
218                            buf.append( getLabel( array[i] ) );
219                    }
220    //              setMsglbl( buf.toString() );
221                    setLbl( buf.toString() );               // 5.2.2.0 (2010/11/01) setMsglbl å»?­¢ â‡?setLbl に置換え
222            }
223    
224            /**
225             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
226             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
227             *
228             * @return こã?クラスのæ–?­—å?表現
229             */
230            @Override
231            public String toString() {
232                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
233                                    .println( "VERSION"                     ,VERSION                )
234                                    .println( "columns"                     ,columns                )
235                                    .println( "labels"                      ,labels                 )
236                                    .println( "checked"                     ,checked                )
237                                    .println( "checkedValue"        ,checkedValue   )
238                                    .println( "Other..."            ,getAttributes().getAttribute() )
239                                    .fixForm().toString() ;
240            }
241    }