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?šã‚ã‚?
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.5.4.4 (2012/07/20)" ;
083    
084            private static final long serialVersionUID = 554420120720L ;
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             *
104             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_INCLUDE )
105             */
106            @Override
107            public int doStartTag() {
108                    String IMG = null; // imgã‚¿ã‚°
109    //              String hideClass = "hideMenu" + String.valueOf( uniqID++ );             // ユニã?クã?Œã€JSå´ãŒã‚¯ãƒ©ã‚¹ã§åˆ¶å¾¡ã™ã‚‹ãŸã‚ã€?
110    //              String hideClass = "hideMenu" + ( uniqID++ );                                   // ユニã?クã?Œã€JSå´ãŒã‚¯ãƒ©ã‚¹ã§åˆ¶å¾¡ã™ã‚‹ãŸã‚ã€?
111    //              String hideClass = "hideMenu" + ( uniqID.getAndIncrement() );   // 5.5.2.6 (2012/05/25) findbugs対�
112                    if( hideClass == null || hideClass.length() == 0 ){ // 5.5.4.4 (2012/07/20) 外部æŒ?®šå¯¾å¿?
113                            hideClass = "hideMenu" + ( uniqID.getAndIncrement() );
114                    }
115                    
116                    
117                    // 5.5.3.2 (2012/06/08) ç”»åƒã«alt属æ?を追åŠ?—ã¾ã™ã?
118                    String msg = getMsglbl();
119                    if( msg == null ) { setLbl( "MSG0076" ); msg = getMsglbl(); }   // åˆæœŸå€¤ã¯ã€MSG0076:拡張検索æ¡ä»¶
120    
121                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
122                    buf.append( "<div class=\"" ).append( hideClass ).append( "\" " );
123                    if( id != null){ buf.append( "id\"=" + id + "\" " ); }
124                    if( defaultNone ){
125                            buf.append( "style=\"display: none;\"" );
126    //                      IMG = "  <img id=\"queryHide\" src=\"" + openButton + "\" alt=\"Expand\" border=\"0px\" "+
127                            IMG = "  <img id=\"queryHide\" src=\"" + openButton + "\" alt=\"" + msg + "\" border=\"0px\" "+
128                                    " onClick=\"hideClass( event, this, '" + hideClass + "', '" + openButton + "', '" + closeButton + "' )\"/> ";
129                    }
130                    else{
131    //                      IMG = "  <img id=\"queryHide\" src=\"" + closeButton + "\" alt=\"Expand\" border=\"0px\" "+
132                            IMG = "  <img id=\"queryHide\" src=\"" + closeButton + "\" alt=\"" + msg + "\" border=\"0px\" "+
133                                    " onClick=\"hideClass( event, this, '" + hideClass + "', '" + openButton + "', '" + closeButton + "' )\"/> ";
134                    }
135                    buf.append( ">" );
136    
137                    // æŒ?®šã—ãŸIDã«ãƒœã‚¿ãƒ³ç”»åƒã‚’放り込ã‚?‚¹ã‚¯ãƒªãƒ—トをå?åŠ?
138                    if( buttonId != null && buttonId.length() > 0){
139                            buf.append( "<script language=\"javascript\">" ).append( HybsSystem.CR );
140                            buf.append( "$(function(){$('#" + buttonId + "').append(\"" );
141                            buf.append( IMG.replace( "\"", "\\\"" ) );
142                            buf.append( "\");})" ).append( HybsSystem.CR );
143                            buf.append( "</script>").append( HybsSystem.CR );
144                    }
145    
146                    jspPrint( buf.toString() );
147                    return( EVAL_BODY_INCLUDE );    // Body インクルー� extends TagSupport �
148            }
149    
150            /**
151             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
152             *
153             * @return      後続å?ç??æŒ?¤º
154             */
155            @Override
156            public int doEndTag() {
157                    debugPrint();
158    
159                    jspPrint( HybsSystem.CR + "</div>" );
160    
161                    return(EVAL_PAGE);              // ペã?ã‚¸ã®æ®‹ã‚Šã‚’評価ã™ã‚‹ã€?
162            }
163    
164            /**
165             * タグリブオブジェクトをリリースã—ã¾ã™ã?
166             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
167             *
168             * @og.rev 5.5.4.4 (2012/07/20) hideClass対�
169             */
170            @Override
171            protected void release2() {
172                    super.release2();
173                    id                      = null;
174                    buttonId        = "query-button-append";
175                    defaultNone = true;
176                    openButton  = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_OPEN_BUTTON" );               // é–‹ãボタン
177                    closeButton = HybsSystem.sys( "JSP" ) + "/image/" + HybsSystem.sys( "HIDE_CLOSE_BUTTON" );              // é–‰ã˜ã‚‹ã?タン
178                    hideClass       = null;
179            }
180    
181            /**
182             * ã€TAG】ã“ã®ã‚¿ã‚°ã®BODY部åˆ?«IDを指定ã—ã¾ã™ã?
183             *
184             * @og.tag
185             * é–‹é–‰ã•れる部åˆ?‚’囲ã£ã¦ã?‚‹DIVã«IDを指定ã—ã¾ã™ã?
186             * 特定ã?hideMenuã«ã‚¹ã‚¿ã‚¤ãƒ«ã‚’指定ã—ãŸã„å ´åˆç­‰ã«åˆ©ç”¨ã—ã¦ä¸‹ã•ã??
187             *
188             * @param       input   BODY部�?ID
189             */
190            @Override
191            public void setId( final String input) {
192                    id = nval( getRequestParameter( input ), id );
193            }
194    
195            /**
196             * ã€TAG】画åƒã?タン出力å?ã®IDを指定ã—ã¾ã™ã?
197             *
198             * @og.tag
199             * åˆæœŸå€¤ã¯"query-button-append"ã§ã™ã?
200             * queryButtonã‚¿ã‚°ãŒå­˜åœ¨ã™ã‚‹ç”»é¢ã§ã¯é€šå¸¸æŒ?®šã™ã‚‹å¿?¦ã?ã‚りã¾ã›ã‚“ã€?
201             * queryButtonã‚¿ã‚°ãŒå­˜åœ¨ã—ãªã??åˆã?ã€åˆ¥é€”用æ„ã—ãŸspanã‚¿ã‚°ã®
202             * IDを指定ã™ã‚‹äº‹ã§ãƒœã‚¿ãƒ³ãŒè¡¨ç¤ºã•れã¾ã™ã?
203             *
204             * @param       input   出力å?ã®ID
205             *
206             */
207            public void setButtonId( final String input) {
208                    buttonId = nval( getRequestParameter( input ), buttonId );
209            }
210    
211            /**
212             * ã€TAG】å?期状態ã?é–‹é–‰æŒ?®š[[true:é–‰ã˜ã¦ã?‚‹/false:é–‹ã„ã¦ã?‚‹]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
213             *
214             * @og.tag
215             * åˆæœŸçŠ¶æ…‹ãŒé–‹ã„ã¦ã?‚‹ã‹ã?é–‰ã˜ã¦ã?‚‹ã‹ã‚’æŒ?®šã—ã¾ã™ã?
216             * åˆæœŸå€¤ã¯é–‰ã˜ã‚?true)ã§ã™ã?
217             *
218             * @param flag é–‹é–‰æŒ?®?[true:é–‰ã˜ã¦ã?‚‹/false:é–‹ã„ã¦ã?‚‹]
219             *
220             */
221            public void setDefaultNone( final String flag) {
222                    defaultNone = nval( getRequestParameter( flag ), defaultNone );
223            }
224    
225            /**
226             * ã€TAG】開ãã?タンã®ç”»åƒã‚’æŒ?®šã—ã¾ã™ã?
227             *
228             * @og.tag
229             * ボタンã®ç”»åƒã‚’æŒ?®šã—ã¾ã™ã?
230             * 絶対パスã®å ´åˆã?ã€ã‚·ã‚¹ãƒ?ƒ ã®å…ˆé?ã‹ã‚‰ã€ç›¸å¯¾ãƒ‘スã®å ´åˆã?基底ã?å?”»é¢ã®ãƒ•ォルãƒ?¨ãªã‚Šã¾ã™ã?
231             * åˆæœŸå€¤ã¯jsp/imageフォルãƒ??ã®ã‚·ã‚¹ãƒ?ƒ ãƒ‘ラメータHIDE_OPEN_BUTTONã®ãƒ•ァイルã§ã™ã?
232             * (/シスãƒ?ƒ ID/jsp/image/expand_u.png)
233             *
234             * @param       name    ç”»åƒãƒ•ァイルå?
235             *
236             */
237            public void setOpenButton( final String name) {
238                    openButton = nval( getRequestParameter( name ), openButton );
239            }
240    
241            /**
242             * ã€TAG】閉ã˜ã‚‹ãƒœã‚¿ãƒ³ã®ç”»åƒã‚’æŒ?®šã—ã¾ã™ã?
243             *
244             * @og.tag
245             * ボタンã®ç”»åƒã‚’æŒ?®šã—ã¾ã™ã?
246             * 絶対パスã®å ´åˆã?ã€ã‚·ã‚¹ãƒ?ƒ ã®å…ˆé?ã‹ã‚‰ã€ç›¸å¯¾ãƒ‘スã®å ´åˆã?基底ã?å?”»é¢ã®ãƒ•ォルãƒ?¨ãªã‚Šã¾ã™ã?
247             * åˆæœŸå€¤ã¯jsp/imageフォルãƒ??ã®ã‚·ã‚¹ãƒ?ƒ ãƒ‘ラメータHIDE_CLOSE_BUTTONã®ãƒ•ァイルã§ã™ã?
248             * (/シスãƒ?ƒ ID/jsp/image/shrink_u.png)
249             *
250             * @param       name    ç”»åƒãƒ•ァイルå?
251             *
252             */
253            public void setCloseButton( final String name) {
254                    closeButton = nval( getRequestParameter( name ), closeButton );
255            }
256            
257            /**
258             * ã€TAG】開閉ã™ã‚‹classを指定ã—ã¾ã™ã?
259             *
260             * @og.tag
261             * 開閉を制御ã™ã‚‹ãŸã‚ã®class属æ?を外部ã‹ã‚‰æŒ?®šã—ã¾ã™ã?
262             * æŒ?®šã—ãªã??åˆã?自動ã§ãƒ¦ãƒ‹ã?クãªClassãŒã‚»ãƒ?ƒˆã•れã¾ã™ã?
263             *
264             * @param       name    クラス
265             * 
266             * @og.rev 5.5.4.4 (2012/07/20) æ–°è¦è¿½åŠ?
267             */
268            public void setHideClass( final String name) {
269                    hideClass = nval( getRequestParameter( name ), hideClass );
270            }
271    
272            /**
273             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
274             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
275             *
276             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
277             */
278            @Override
279            public String toString() {
280                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
281                                    .println( "VERSION"                     ,VERSION                                                )
282                                    .println( "id"                          ,id                                                             )
283                                    .println( "buttonId"            ,buttonId                                               )
284                                    .println( "defaultNone"         ,defaultNone                                    )
285                                    .println( "openButton"          ,openButton                                             )
286                                    .println( "closeButton"         ,closeButton                                    )
287                                    .println( "Other..."            ,getAttributes().getAttribute() )
288                                    .fixForm().toString() ;
289            }
290    }