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    
020    import static org.opengion.fukurou.util.StringUtil.nval;
021    
022    import java.util.concurrent.atomic.AtomicInteger;       // 5.5.2.6 (2012/05/25) findbugs対å¿?
023    
024    /**
025     * Query画面の拡張検索領域を指定用のタグですã?
026     *
027     * 通常は属æ?を何もセãƒ?ƒˆせずにQuery画面のéš?�—メニューに利用しますã?
028     * queryButtonタグが存在しなã�??合ã?ボタンをå?力したい場æ‰?�«IDをセãƒ?ƒˆしたspanタグã‚?
029     * 配置しã?そã?IDをこのタグのbuttonId属æ?でæŒ?®šして下さã�??
030     * タグの動きとしてはにはbodyå†?�«書ã�?�Ÿå†?®¹をbuttonIdでæŒ?®šしたé?域に動的に作æ?した
031     * ボタン(初期値はシスãƒ?ƒ パラメータの画åƒ?でON/OFF制御可能としますã?
032     * なおã?body部åˆ?�«はog:firldsetタグも利用可能ですã?
033     *
034     * @og.formSample
035     * <pre>
036     * ●形式ï¼?
037     *       ・&lt;og:hideMenu
038     *                   [ id           = "uniqHideId"   ] タグで囲われた部åˆ?�«付けるID
039     *                   [ buttonId     = "targetId"     ] ボタンをå?力するå?æ‰??IDを指å®?
040     *                   [ defaultNone  = "[true|false]" ] 初期状態ã?開閉æŒ?®?
041     *                   [ openButton   = "open.png"     ] 開く(??ボタンの画åƒ?
042     *                   [ closeButton  = "close.png"    ] 閉じã‚???ボタンの画åƒ?
043     *                   [ lbl          = "MSG0076"      ] 画像ã?alt属æ?に付けるメãƒ?‚»ージ(初期値:MSG0076)
044     *         &gt;
045     * ●body?šあã‚?EVAL_BODY_INCLUDE:BODYをインクルードし、{&#064;XXXX} は解析しません)
046     *
047     * ●Tag定義??
048     *   &lt;og:hideMenu
049     *       id                 【TAG】このタグのBODY部åˆ?�«IDを指定しまã�?
050     *       buttonId           【TAG】画像ã?タン出力å?のIDを指定しまã�?
051     *       defaultNone        【TAG】å?期状態ã?開閉æŒ?®š[[true:閉じてã�?‚‹/false:開いてã�?‚‹]を指定しまã�?初期値:true)
052     *       openButton         【TAG】開くã?タンの画像をæŒ?®šしまã�?
053     *       closeButton        【TAG】閉じるボタンの画像をæŒ?®šしまã�?
054     *       lbl                【TAG】ラベルリソースのラベルIDを指定しまã�?
055     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
056     *   &gt;   ... Body ...
057     *   &lt;/og:hideMenu&gt;
058     *
059     * ●使用ä¾?
060     * 例ï¼?通常のQUERY画面での利用
061     *         &lt;og:hideMenu&gt;
062     *           &lt;table&gt;&lt;tr&gt;
063     *             &lt;og:column name="CLM"/&gt;
064     *           &lt;/tr&gt;&lt;/table&gt;
065     *         &lt;/og:hideMenu&gt;
066     *
067     * 例ï¼?queryButtonタグが存在しなã�?ж況での利用(buttonIdの明示çš?�ªæŒ?®?
068     *         &lt;span id="hideButtonSet"&gt; &lt;/span&gt;
069     *         &lt;og:hideMenu&gt;
070     *             ......
071     *         &lt;/og:hideMenu&gt;
072     * </pre>
073     * @og.rev 4.3.6.0 (2009/04/01) 新規作æ?
074     * @og.group 画面部å“?
075     *
076     * @version  4.0
077     * @author   Takahashi Masakazu
078     * @since    JDK5.0,
079     */
080    public class HideMenuTag extends CommonTagSupport {
081            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
082            private static final String VERSION = "5.7.1.2 (2013/12/20)" ;
083    
084            private static final long serialVersionUID = 571220131220L ;
085    
086    //      private static volatile int uniqID = 1 ;                                                                // ユニã?クID作æ?用
087            private static final AtomicInteger uniqID = new AtomicInteger(1);               // 5.5.2.6 (2012/05/25) findbugs対å¿?
088    
089            private String id                       = null;                                                                         // こã?領域に付けるid
090            private String buttonId         = "query-button-append";                                        // ボタンをå?力するå?æ‰??id
091            private boolean defaultNone = true;                                                                             // 開閉初期状æ…?
092    
093            private String openButton  = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_OPEN_BUTTON" );                // 開くボタン
094            private String closeButton = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_CLOSE_BUTTON" );               // 閉じるã?タン
095            private String hideClass                = null; // 5.5.4.4 (2012/07/20)
096            
097            /**
098             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
099             *
100             * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã?staticフィールドへの書き込みに、AtomicInteger を利用しますã?
101             * @og.rev 5.5.3.2 (2012/06/08) 画像にalt属æ?を追åŠ?�—ますã?
102             * @og.rev 5.5.4.4 (2012/07/20) hideClassを外部からæŒ?®š可能にしまã�?
103             * @og.rev 5.7.1.2 (2013/12/20) msg â‡?msglbl 変更
104             *
105             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_INCLUDE )
106             */
107            @Override
108            public int doStartTag() {
109                    String IMG = null; // imgタグ
110    //              String hideClass = "hideMenu" + String.valueOf( uniqID++ );             // ユニã?クã�?�Œ、JS側がクラスで制御するためã€?
111    //              String hideClass = "hideMenu" + ( uniqID++ );                                   // ユニã?クã�?�Œ、JS側がクラスで制御するためã€?
112    //              String hideClass = "hideMenu" + ( uniqID.getAndIncrement() );   // 5.5.2.6 (2012/05/25) findbugs対å¿?
113                    if( hideClass == null || hideClass.length() == 0 ){ // 5.5.4.4 (2012/07/20) 外部æŒ?®š対å¿?
114                            hideClass = "hideMenu" + ( uniqID.getAndIncrement() );
115                    }
116                    
117                    
118                    // 5.5.3.2 (2012/06/08) 画像にalt属æ?を追åŠ?�—ますã?
119                    String msg = getMsglbl();
120                    String msglbl = getMsglbl();    // 5.7.1.2 (2013/12/20) msg â‡?msglbl 変更
121    //              if( msg == null ) { setLbl( "MSG0076" ); msg = getMsglbl(); }   // 初期値は、MSG0076:拡張検索条件
122                    if( msglbl == null ) { setLbl( "MSG0076" ); msglbl = getMsglbl(); }     // 初期値は、MSG0076:拡張検索条件
123    
124                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
125                    buf.append( "<div class=\"" ).append( hideClass ).append( "\" " );
126                    if( id != null){ buf.append( "id\"=" + id + "\" " ); }
127                    if( defaultNone ){
128                            buf.append( "style=\"display: none;\"" );
129    //                      IMG = "  <img id=\"queryHide\" src=\"" + openButton + "\" alt=\"Expand\" border=\"0px\" "+
130    //                      IMG = "  <img id=\"queryHide\" src=\"" + openButton + "\" alt=\"" + msg + "\" border=\"0px\" "+
131                            IMG = "  <img id=\"queryHide\" src=\"" + openButton + "\" alt=\"" + msglbl + "\" border=\"0px\" "+
132                                    " onClick=\"hideClass( event, this, '" + hideClass + "', '" + openButton + "', '" + closeButton + "' )\"/> ";
133                    }
134                    else{
135    //                      IMG = "  <img id=\"queryHide\" src=\"" + closeButton + "\" alt=\"Expand\" border=\"0px\" "+
136    //                      IMG = "  <img id=\"queryHide\" src=\"" + closeButton + "\" alt=\"" + msg + "\" border=\"0px\" "+
137                            IMG = "  <img id=\"queryHide\" src=\"" + closeButton + "\" alt=\"" + msglbl + "\" border=\"0px\" "+
138                                    " onClick=\"hideClass( event, this, '" + hideClass + "', '" + openButton + "', '" + closeButton + "' )\"/> ";
139                    }
140                    buf.append( ">" );
141    
142                    // æŒ?®šしたIDにボタン画像を放り込ã‚?‚¹クリプトをå?åŠ?
143                    if( buttonId != null && buttonId.length() > 0){
144                            buf.append( "<script language=\"javascript\">" ).append( HybsSystem.CR );
145                            buf.append( "$(function(){$('#" + buttonId + "').append(\"" );
146                            buf.append( IMG.replace( "\"", "\\\"" ) );
147                            buf.append( "\");})" ).append( HybsSystem.CR );
148                            buf.append( "</script>").append( HybsSystem.CR );
149                    }
150    
151                    jspPrint( buf.toString() );
152                    return( EVAL_BODY_INCLUDE );    // Body インクルーãƒ? extends TagSupport æ™?
153            }
154    
155            /**
156             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
157             *
158             * @return      後続å?ç�??æŒ?¤º
159             */
160            @Override
161            public int doEndTag() {
162                    debugPrint();
163    
164                    jspPrint( HybsSystem.CR + "</div>" );
165    
166                    return(EVAL_PAGE);              // ペã?ジの残りを評価するã€?
167            }
168    
169            /**
170             * タグリブオブジェクトをリリースしますã?
171             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
172             *
173             * @og.rev 5.5.4.4 (2012/07/20) hideClass対å¿?
174             */
175            @Override
176            protected void release2() {
177                    super.release2();
178                    id                      = null;
179                    buttonId        = "query-button-append";
180                    defaultNone = true;
181                    openButton  = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_OPEN_BUTTON" );               // 開くボタン
182                    closeButton = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_CLOSE_BUTTON" );              // 閉じるã?タン
183                    hideClass       = null;
184            }
185    
186            /**
187             * 【TAG】このタグのBODY部åˆ?�«IDを指定しますã?
188             *
189             * @og.tag
190             * 開閉される部åˆ?‚’囲ってã�?‚‹DIVにIDを指定しますã?
191             * 特定ã?hideMenuにスタイルを指定したい場合等に利用して下さã�??
192             *
193             * @param       input   BODY部åˆ??ID
194             */
195            @Override
196            public void setId( final String input) {
197                    id = nval( getRequestParameter( input ), id );
198            }
199    
200            /**
201             * 【TAG】画像ã?タン出力å?のIDを指定しますã?
202             *
203             * @og.tag
204             * 初期値は"query-button-append"ですã?
205             * queryButtonタグが存在する画面では通常æŒ?®šするå¿?¦�ã?ありませんã€?
206             * queryButtonタグが存在しなã�??合ã?、別途用意したspanタグの
207             * IDを指定する事でボタンが表示されますã?
208             *
209             * @param       input   出力å?のID
210             *
211             */
212            public void setButtonId( final String input) {
213                    buttonId = nval( getRequestParameter( input ), buttonId );
214            }
215    
216            /**
217             * 【TAG】å?期状態ã?開閉æŒ?®š[[true:閉じてã�?‚‹/false:開いてã�?‚‹]を指定しまã�?初期値:true)ã€?
218             *
219             * @og.tag
220             * 初期状態が開いてã�?‚‹かã?閉じてã�?‚‹かをæŒ?®šしますã?
221             * 初期値は閉じã‚?true)ですã?
222             *
223             * @param flag 開閉æŒ?®?[true:閉じてã�?‚‹/false:開いてã�?‚‹]
224             *
225             */
226            public void setDefaultNone( final String flag) {
227                    defaultNone = nval( getRequestParameter( flag ), defaultNone );
228            }
229    
230            /**
231             * 【TAG】開くã?タンの画像をæŒ?®šしますã?
232             *
233             * @og.tag
234             * ボタンの画像をæŒ?®šしますã?
235             * 絶対パスの場合ã?、シスãƒ?ƒ の先é?から、相対パスの場合ã?基底ã?å�?”»面のフォルãƒ?�¨なりますã?
236             * 初期値はjsp/imageフォルãƒ??のシスãƒ?ƒ パラメータHIDE_OPEN_BUTTONのファイルですã?
237             * (/シスãƒ?ƒ ID/jsp/image/expand_u.png)
238             *
239             * @param       name    画像ファイルå�?
240             *
241             */
242            public void setOpenButton( final String name) {
243                    openButton = nval( getRequestParameter( name ), openButton );
244            }
245    
246            /**
247             * 【TAG】閉じるボタンの画像をæŒ?®šしますã?
248             *
249             * @og.tag
250             * ボタンの画像をæŒ?®šしますã?
251             * 絶対パスの場合ã?、シスãƒ?ƒ の先é?から、相対パスの場合ã?基底ã?å�?”»面のフォルãƒ?�¨なりますã?
252             * 初期値はjsp/imageフォルãƒ??のシスãƒ?ƒ パラメータHIDE_CLOSE_BUTTONのファイルですã?
253             * (/シスãƒ?ƒ ID/jsp/image/shrink_u.png)
254             *
255             * @param       name    画像ファイルå�?
256             *
257             */
258            public void setCloseButton( final String name) {
259                    closeButton = nval( getRequestParameter( name ), closeButton );
260            }
261            
262            /**
263             * 【TAG】開閉するclassを指定しますã?
264             *
265             * @og.tag
266             * 開閉を制御するためのclass属æ?を外部からæŒ?®šしますã?
267             * æŒ?®šしなã�??合ã?自動でユニã?クなClassがセãƒ?ƒˆされますã?
268             *
269             * @param       name    クラス
270             * 
271             * @og.rev 5.5.4.4 (2012/07/20) 新規追åŠ?
272             */
273            public void setHideClass( final String name) {
274                    hideClass = nval( getRequestParameter( name ), hideClass );
275            }
276    
277            /**
278             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
279             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
280             *
281             * @return こã?クラスのæ–?­—å?表現
282             */
283            @Override
284            public String toString() {
285                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
286                                    .println( "VERSION"                     ,VERSION                                                )
287                                    .println( "id"                          ,id                                                             )
288                                    .println( "buttonId"            ,buttonId                                               )
289                                    .println( "defaultNone"         ,defaultNone                                    )
290                                    .println( "openButton"          ,openButton                                             )
291                                    .println( "closeButton"         ,closeButton                                    )
292                                    .println( "Other..."            ,getAttributes().getAttribute() )
293                                    .fixForm().toString() ;
294            }
295    }