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; 019import org.opengion.hayabusa.resource.GUIInfo; 020import org.opengion.fukurou.util.Attributes; 021import org.opengion.fukurou.util.XHTMLTag; 022 023import static org.opengion.fukurou.util.StringUtil.nval ; 024 025import java.io.File; 026 027/** 028 * 画面IDと同じヘルプファイルがあればリンクを作成するタグです(通常は query.jsp に組込み)。 029 * 030 * ヘルプファイルは、システムパラメータ の HELP_URL で定義されているhelpフォルダに配置します。 031 * このフォルダに、画面IDと同じファイル(例えば、GE0001.html など)があれば、リンクを作成します。 032 * ファイルがなければ、リンクは表示されません。 033 * メッセージの表示の制御は、viewMsg 属性で指定します。(false でファイルが存在した場合のみ表示) 034 * ファイルの拡張子も指定できますが、一般に、html でヘルプファイルを作成するほうが 035 * すばやく表示できます。 036 * また、og:topMenuタグ内にこのタグを記述することで、各画面分類に対するヘルプを表示することが 037 * できるようになります。 038 * (この場合も、画面分類のキーがヘルプファイルのキーになります) 039 * 040 * @og.formSample 041 * ●形式:一般ユーザーが直接組み込むことはありません。 042 * ●body:なし 043 * 044 * ●Tag定義: 045 * <og:help 046 * guiInfoKey 【TAG】GUIInfo のキーを指定します 047 * extension 【TAG】拡張子を指定します(初期値:html) 048 * lbl 【TAG】ラベルリソースのラベルIDを指定します 049 * target 【TAG】TARGET 属性を指定します(初期値:_blank) 050 * viewMsg 【TAG】メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false) 051 * iconURL 【TAG】ヘルプリンクをアイコンで指定する場合のアイコンURLを指定します (初期値:DEFAULT_HELP_ICON[=/image/help2.png]) 052 * faqIconURL 【TAG】FAQリンクをアイコンで指定する場合のアイコンURLを指定します (初期値:DEFAULT_FAQ_ICON[=/image/qaicon.png]) 053 * useFaq 【TAG】FAQ表示の機能を利用するかどうか[true/false]を指定します (初期値:USE_GUI_FAQ[=false]) 054 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 055 * /> 056 * 057 * ●使用例 058 * <og:help guiInfoKey="{@GUI.KEY}" lbl="HELP" /> 059 * 060 * <og:help 061 * guiInfoKey = "GUIInfo のキーを指定します(必須)。" 062 * extension = "拡張子を指定します(初期値:html)。" 063 * lbl = "ラベルリソースのメッセージIDを指定します。" 064 * target = "TARGET 属性を指定します(初期値:_blank)。" 065 * viewMsg = "メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false)。" 066 * iconURL = "ヘルプアイコンのURL(初期値:/image/help.png)"; // 5.3.8.0 (2011/08/01) 067 * /> 068 * 069 * @og.group メニュー制御 070 * 071 * @version 4.0 072 * @author Kazuhiko Hasegawa 073 * @since JDK5.0, 074 */ 075public class HelpTag extends CommonTagSupport { 076 //* このプログラムのVERSION文字列を設定します。 {@value} */ 077 private static final String VERSION = "5.6.7.3 (2013/08/23)" ; 078 079 private static final long serialVersionUID = 567320130823L ; // 5.6.7.3 (2013/08/23) 080 081 private static final String JSP = HybsSystem.sys( "JSP" ); 082 083 private String guiInfoKey = null; 084 private String extension = "html"; 085 private String baseURL = HybsSystem.sys( "HELP_URL" ); 086 private String target = "_blank"; // 3.6.0.7 (2004/11/06) 087 private boolean viewMsg = false; 088// private String iconURL = "/image/help.png"; // 5.3.8.0 (2011/08/01) 089 private String iconURL = HybsSystem.sys( "DEFAULT_HELP_ICON" ); // 5.4.3.6 (2012/01/19) 090 private String faqIconURL = HybsSystem.sys( "DEFAULT_FAQ_ICON" ); // 5.5.0.4 (2012/03/16) 091// private boolean useFaq = HybsSystem.sysBool( "USE_GUI_FAQ " ); // 5.5.0.4 (2012/03/16) 092 private String faqGUI = HybsSystem.sys( "DEFAULT_FAQ_GUI" ); // 5.5.0.4 (2012/03/16) 093// private String syscode = "*"; // 5.5.0.4 (2012/03/16) 094// private boolean useFaqCtrl = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL " ); // 5.6.4.3 (2013/05/24) 095 096 private boolean useFaq = HybsSystem.sysBool( "USE_GUI_FAQ" ); // 5.6.7.3 (2013/08/23) 097 private boolean useFaqCtrl = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL" ); // 5.6.7.3 (2013/08/23) 098 099 /** 100 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 101 * 102 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 103 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応 104 * @og.rev 5.5.0.4 (2012/03/16) FAQ対応 105 * @og.rev 5.6.4.3 (2013/05/26) FAQの画面別対応 106 * 107 * @return 後続処理の指示 108 */ 109 @Override 110 public int doEndTag() { 111 debugPrint(); // 4.0.0 (2005/02/28) 112 113 TopMenuTag topMenu = (TopMenuTag)findAncestorWithClass( this,TopMenuTag.class ); 114 if( topMenu == null ) { 115 jspPrint( makeTag() ); 116 if(useFaq){ 117 jspPrint( makeTagFaq() ); 118 } 119 } 120 else { 121 // 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応 122 String linkFormat = getLink( baseURL + "{FILENAME}" ); 123 String baseDir = HybsSystem.url2dir( baseURL ); 124 topMenu.add( "helpLinkFormat",linkFormat ); 125 topMenu.add( "helpBaseDir",baseDir ); 126 if(useFaq){ // 5.5.0.4 (2012/03/16) FAQ対応 127 GUIInfo guiInfo = getGUIInfo( faqGUI ); 128 if( guiInfo != null ) { 129 String address = guiInfo.getRealAddress( get( "href" ) ); 130 String faqFormat = getFAQLink(getRequestParameter( address+"?command=NEW&GAMENID="+faqGUI+"&KNRNGUI={GUIKEY}" )); 131 topMenu.add( "faqLinkFormat",faqFormat ); 132 } 133 } 134 } 135 136 return(EVAL_PAGE); 137 } 138 139 /** 140 * タグリブオブジェクトをリリースします。 141 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 142 * 143 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 144 * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加他 145 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 146 * @og.rev 3.6.0.7 (2004/11/06) target 属性の初期値を _new から _blank に変更 147 * @og.rev 5.3.8.0 (2011/08/01) iconURL追加 148 * @og.rev 5.5.0.4 (2012/03/16) faq 149 * @og.rev 5.6.4.3 (2013/05/24) faqCtrl 150 * @og.rev 5.6.7.3 (2013/08/23) useFaq と useFaqCtrl のキーの後ろにスペースが入っていた。 151 */ 152 @Override 153 protected void release2() { 154 super.release2(); 155 guiInfoKey = null; 156 extension = "html"; 157 baseURL = HybsSystem.sys( "HELP_URL" ); 158 target = "_blank"; // 3.6.0.7 (2004/11/06) 159 viewMsg = false; 160// iconURL = "/image/help.png"; // 5.3.8.0 (2011/08/01) 161 iconURL = HybsSystem.sys( "DEFAULT_HELP_ICON" ); // 5.4.3.6 (2012/01/19) 162 faqIconURL = HybsSystem.sys( "DEFAULT_FAQ_ICON" ); // 5.5.0.4 (2012/03/16) 163// useFaq = HybsSystem.sysBool( "USE_GUI_FAQ " ); // 5.5.0.4 (2012/03/16) 164 faqGUI = HybsSystem.sys( "DEFAULT_FAQ_GUI" ); // 5.5.0.4 (2012/03/16) 165// syscode = "*"; // 5.5.0.4 (2012/03/16) 166// useFaqCtrl = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL " ); // 5.6.4.3 (2013/05/24) 167 168 useFaq = HybsSystem.sysBool( "USE_GUI_FAQ" ); // 5.6.7.3 (2013/08/23) 169 useFaqCtrl = HybsSystem.sysBool( "USE_GUI_FAQ_CTRL" ); // 5.6.7.3 (2013/08/23) 170 } 171 172 /** 173 * HELPリンクを作成します。 174 * 175 * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加 176 * @og.rev 3.0.1.0 (2003/03/03) viewMsg フラグの制御のバグ修正 177 * @og.rev 5.3.8.0 (2011/08/01) iconURL対応 178 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応 179 * @og.rev 5.5.0.4 (2012/03/16) faq 180 * 181 * @return リンクタグ文字列 182 */ 183 protected String makeTag() { 184 String rtn = ""; 185 186 if( guiInfoKey == null ) { 187 guiInfoKey = getGUIInfoAttri( "KEY" ); 188 } 189 190 String url = baseURL + guiInfoKey + "." + extension; 191 File file = new File( HybsSystem.url2dir( url ) ); 192 193 // ファイルの存在チェック 194 if( file.exists() ) { // 3.5.6.0 (2004/06/18) 195 // 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応 196// Attributes attri = new Attributes(); 197// String path = getContextPath(); 198// attri.set( "href",path + "/" + url ); 199// attri.set( "body",getMsglbl() ); 200// attri.set( "body",getLinkBody() ); 201// attri.set( "target",target ); 202// 203// rtn = XHTMLTag.link( attri ) ; 204 rtn = getLink( url ); 205 } 206 else if( viewMsg ) { 207// rtn = getMsglbl() ; 208// rtn = getLinkBody(); 209 rtn = getLinkBody(null,getMsglbl()); // 5.5.0.4 210 } 211 212 return rtn; 213 } 214 215 /** 216 * FAQリンクを作成します。 217 * 218 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対応 219 * @og.rev 5.6.4.3 (2013/05/24) FAQ存在チェック対応 220 * 221 * @return リンクタグ文字列 222 */ 223 protected String makeTagFaq() { 224 String rtn = ""; 225 226 if( !useFaqCtrl && !"true".equals(getGUIInfoAttri( "FAQ" ) ) ) { return rtn; } // 5.6.4.3 (2013/05/24) 若干やっつけ 227 228 if( guiInfoKey == null ) { 229 guiInfoKey = getGUIInfoAttri( "KEY" ); 230 } 231 232 GUIInfo guiInfo = getGUIInfo( faqGUI ); 233 if( guiInfo == null ) { return rtn; } // 見つからない場合は、アクセス不可 234 235 String address = guiInfo.getRealAddress( get( "href" ) ); 236 String url = getRequestParameter( address+"?command=NEW&GAMENID="+faqGUI+"&KNRNGUI="+guiInfoKey ); 237 238 rtn = getFAQLink( url ); 239 240 return rtn; 241 } 242 243 /** 244 * リンク文字列を作成します。 245 * 246 * @og.rev 5.3.9.0 (2011/09/01) 新規作成 247 * @og.rev 5.5.0.4 (2012/03/16) faq 248 * 249 * @param url リンクのURL 250 * 251 * @return リンク文字列 252 */ 253 private String getLink( final String url ) { 254 Attributes attri = new Attributes(); 255 String path = getContextPath(); 256 attri.set( "href",path + "/" + url ); 257// attri.set( "body",getMsglbl() ); 258// attri.set( "body",getLinkBody() ); 259 attri.set( "body",getLinkBody(iconURL,getMsglbl()) ); //5.5.0.4 (2012/03/16) 260 attri.set( "target",target ); 261 attri.set( "class", "helplink" ); 262 263 return XHTMLTag.link( attri ); 264 } 265 266 /** 267 * FAQリンク文字列を作成します。 268 * 269 * @og.rev 5.5.0.4 (2012/03/16) 新規作成 270 * 271 * @param url リンクのURL 272 * 273 * @return リンク文字列 274 */ 275 private String getFAQLink( final String url ) { 276 Attributes attri = new Attributes(); 277 attri.set( "href", url ); 278 attri.set( "body",getLinkBody(faqIconURL,"FAQ") ); 279 attri.set( "target",target ); 280 attri.set( "class", "faqlink" ); 281 282 return XHTMLTag.link( attri ); 283 } 284 285 /** 286 * リンクのボディー部分を作成します。 287 * 288 * @og.rev 5.3.8.0 (2011/08/01) 新規作成 289 * @og.rev 5.3.9.0 (2011/09/01) 画像表示時にtitle属性を付加 290 * @og.rev 5.5.0.4 (2012/03/16) 引数対応 291 * 292 * @param icon アイコン 293 * @param title タイトル 294 * 295 * @return リンクボディー文字列 296 */ 297// private String getLinkBody() { 298 private String getLinkBody(final String icon, final String title) { 299 String rtn = null; 300// if( iconURL == null || iconURL.length() == 0 ) { 301 if( icon == null || icon.length() == 0 ) { 302 rtn = getMsglbl(); 303 } 304 else { 305 rtn = "<img src=\"" + JSP + icon + "\" title=\"" + title + "\"/>"; 306 } 307 return rtn; 308 } 309 310 /** 311 * 【TAG】GUIInfo のキーを指定します。 312 * 313 * @og.tag GUIInfo のキーを指定します。 314 * 315 * @param key GUIInfo のキー 316 */ 317 public void setGuiInfoKey( final String key ) { 318 guiInfoKey = getRequestParameter( key ); 319 } 320 321 /** 322 * 【TAG】拡張子を指定します(初期値:html)。 323 * 324 * @og.tag 325 * なにも設定されていない場合は、"html" が初期値となります。 326 * ここでは、ピリオドは、含める必要はありません。 327 * 328 * @param ext 拡張子 329 */ 330 public void setExtension( final String ext ) { 331 extension = nval( getRequestParameter( ext ),extension ); 332 } 333 334 /** 335 * 【TAG】TARGET 属性を指定します(初期値:_blank)。 336 * 337 * @og.tag 338 * 初期値は、 "_blank" として、新規に画面を立ち上げます。 339 * CONTENTS 等を指定すれば、コンテンツフレーム(メニューの右側全面)に、 340 * RESULT を指定すれば、リザルトフレーム(メニュー右下側)に表示します。 341 * 342 * @og.rev 3.0.0.3 (2003/02/21) ターゲット属性の新規追加 343 * 344 * @param val TARGET 属性を指定します(初期値:"_blank") 345 */ 346 public void setTarget( final String val ) { 347 target = nval( getRequestParameter( val ),target ); 348 } 349 350 /** 351 * 【TAG】メッセージを常時表示させるかどうか[true/false]を指定します(初期値:false)。 352 * 353 * @og.tag 354 * "true"の場合は、常時表示させます。 355 * ファイルが、存在した場合は、リンクが張られ、存在しない場合は、リンクが 356 * 張られません。 357 * "false" の場合は、ファイルが、存在した場合は、リンクが張られ、存在しない場合は、 358 * なにも表示されません。 359 * 初期値は、 "false"(メッセージを常時表示しない)です。 360 * 361 * @og.rev 3.0.0.3 (2003/02/21) メッセージ表示属性の新規追加 362 * 363 * @param flag メッセージを常時表示させるかどうかを指定 [true:常時表示/false:非表示] 364 */ 365 public void setViewMsg( final String flag ) { 366 viewMsg = nval( getRequestParameter( flag ),viewMsg ); 367 } 368 369 /** 370 * 【TAG】ヘルプリンクをアイコンで指定する場合のアイコンURLを指定します 371 * (初期値:DEFAULT_HELP_ICON[={@og.value org.opengion.hayabusa.common.SystemData#DEFAULT_HELP_ICON}])。 372 * 373 * @og.tag 374 * ヘルプリンクをアイコンで指定する場合、そのアイコン画像のURLを指定します。 375 * URLは、/[CONTEXT_PATH]/jspを基準として指定します。 376 * 例) /ge/jsp/image/help.pngに存在する画像を指定する場合、iconURL=/image/help.pngを指定します。 377 * このURLが指定されない場合、ヘルプリンクは、msgLbl属性で指定されたテキストで表示されます。 378 * (初期値:システム定数のDEFAULT_HELP_ICON[={@og.value org.opengion.hayabusa.common.SystemData#DEFAULT_HELP_ICON}])。 379 * 380 * @og.rev 5.3.8.0 (2011/08/01) 新規追加 381 * 382 * @param url アイコンURL 383 * @see org.opengion.hayabusa.common.SystemData#DEFAULT_HELP_ICON 384 */ 385 public void setIconURL( final String url ) { 386 iconURL = nval( getRequestParameter( url ),iconURL ); 387 } 388 389 /** 390 * 【TAG】FAQリンクをアイコンで指定する場合のアイコンURLを指定します 391 * (初期値:DEFAULT_FAQ_ICON[={@og.value org.opengion.hayabusa.common.SystemData#DEFAULT_FAQ_ICON}])。 392 * 393 * @og.tag 394 * FAQリンクをアイコンで指定する場合、そのアイコン画像のURLを指定します。 395 * URLは、/[CONTEXT_PATH]/jspを基準として指定します。 396 * 例) /ge/jsp/image/help.pngに存在する画像を指定する場合、iconURL=/image/help.pngを指定します。 397 * (初期値:システム定数のDEFAULT_FAQ_ICON[={@og.value org.opengion.hayabusa.common.SystemData#DEFAULT_FAQ_ICON}])。 398 * 399 * @og.rev 5.3.8.0 (2011/08/01) 新規追加 400 * 401 * @param url アイコンURL 402 * @see org.opengion.hayabusa.common.SystemData#DEFAULT_FAQ_ICON 403 */ 404 public void setFaqIconURL( final String url ) { 405 faqIconURL = nval( getRequestParameter( url ),faqIconURL ); 406 } 407 408 /** 409 * 【TAG】FAQ表示の機能を利用するかどうか[true/false]を指定します 410 * (初期値:USE_GUI_FAQ[={@og.value org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ}])。 411 * 412 * @og.tag 413 * trueを指定すると、FAQ画面へのリンクが表示されます。(GE80にデータが存在するかは無関係) 414 * リンク先はfaqGUIでセットした画面に対して画面IDを引数としてわたします。 415 * (初期値:システム定数のUSE_GUI_FAQ[={@og.value org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ}])。 416 * 417 * @og.rev 5.5.0.4 (2012/03/167) 新規追加 418 * 419 * @param flag FAQ表示の機能を利用するかどうか [true:利用する/false:利用しない] 420 * @see org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ 421 */ 422 public void setUseFaq( final String flag ) { 423 useFaq = nval( getRequestParameter( flag ),useFaq ); 424 } 425 426 427 /** 428 * 【TAG】FAQに関連画面機能を利用するかどうか[true/false]を指定します。 429 * (初期値:USE_GUI_FAQ_CTRL[={@og.value org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ_CTRL}])。 430 * 431 * @og.tag 432 * trueを指定すると、GE80にデータが関連画面IDとして存在する場合のみアイコンを 433 * リンク先はfaqGUIでセットした画面に対して画面IDを引数としてわたします。 434 * (初期値:システム定数のUSE_GUI_FAQ[={@og.value org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ}])。 435 * 436 * @og.rev 5.6.4.3 (2013/05/24) 新規追加 437 * 438 * @param flag FAQの存在チェック機能を利用するかどうか [true:利用する/false:利用しない] 439 * @see org.opengion.hayabusa.common.SystemData#USE_GUI_FAQ_CTRL 440 */ 441 public void setUseFaqCtrl( final String flag ) { 442 useFaqCtrl = nval( getRequestParameter( flag ),useFaqCtrl ); 443 } 444 445 /** 446 * このオブジェクトの文字列表現を返します。 447 * 基本的にデバッグ目的に使用します。 448 * 449 * @return このクラスの文字列表現 450 */ 451 @Override 452 public String toString() { 453 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 454 .println( "VERSION" ,VERSION ) 455 .println( "guiInfoKey" ,guiInfoKey ) 456 .println( "extension" ,extension ) 457 .println( "baseURL" ,baseURL ) 458 .println( "target" ,target ) 459 .println( "viewMsg" ,viewMsg ) 460 .println( "iconURL" ,iconURL ) 461 .println( "Other..." ,getAttributes().getAttribute() ) 462 .fixForm().toString() ; 463 } 464}