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