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