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 * ・<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 * >
045 * ●body?šあã‚?EVAL_BODY_INCLUDE:BODYをインクルードし、{@XXXX} は解析しません)
046 *
047 * ●Tag定義??
048 * <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 * > ... Body ...
057 * </og:hideMenu>
058 *
059 * ●使用ä¾?
060 * 例ï¼?通常のQUERY画面での利用
061 * <og:hideMenu>
062 * <table><tr>
063 * <og:column name="CLM"/>
064 * </tr></table>
065 * </og:hideMenu>
066 *
067 * 例ï¼?queryButtonタグが存在しなã�?ж況での利用(buttonIdの明示çš?�ªæŒ?®?
068 * <span id="hideButtonSet"> </span>
069 * <og:hideMenu>
070 * ......
071 * </og:hideMenu>
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 }