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 import org.opengion.hayabusa.common.HybsSystemException; 020 import org.opengion.hayabusa.resource.GUIInfo; 021 import org.opengion.hayabusa.resource.UserInfo; 022 import org.opengion.hayabusa.resource.CodeData; 023 import org.opengion.hayabusa.resource.FavoriteGUIData; 024 import org.opengion.hayabusa.resource.ResourceManager; 025 import org.opengion.fukurou.util.XHTMLTag; 026 import org.opengion.fukurou.util.FileMap; 027 import org.opengion.fukurou.util.TagBuffer; 028 029 import org.opengion.fukurou.util.StringUtil ; 030 import static org.opengion.fukurou.util.StringUtil.nval ; 031 032 import java.util.Set ; 033 import java.util.LinkedHashSet; 034 import java.util.Iterator; 035 import java.util.Map; 036 037 import java.io.ObjectOutputStream; 038 import java.io.ObjectInputStream; 039 import java.io.IOException; 040 041 /** 042 * 画面アクセスメニューを作?します? 043 * 044 * 画面リソースの階層番号(レベル)は? 045 * ?:グループ?類メニュー(class="GUI_GRP"のtdタグで囲われま? 046 * ?:トップ階層(【?類名称? 047 * ?:選択階層(通常の折りたたみメニュー) 048 * ?:選択非表示(通常は?してありま? 049 * です? 050 * お気に入りメニューを登録するキーワードに、HybsSystem.GUI_FAV_MENU_KEY を使用して?す? 051 * これは、エンジン?で使用して?キーワードです? 052 * 053 * @og.formSample 054 * ●形式?lt;og:topMenu /> 055 * ●body?な? 056 * 057 * ●Tag定義?? 058 * <og:topMenu 059 * menuType 【TAG】作?するメニューの種?NORMAL,GROUP,ONELEVEL,NEXTGUI,MATRIX,MATRIX2)を指定しま?初期値:NORMAL) 060 * expand 【TAG】折り返しメニューを構築するかど?を指定しま?初期値:true) 061 * groups 【TAG】表示対象となるグループをカンマ区???で?しま? 062 * classify 【TAG】表示対象となる??classify)を指定しま? 063 * href 【TAG】グループメニューの表示対象となるソース?href)を指定しま?初期値:menu.jsp) 064 * target 【TAG】グループメニューの表示対象となるフレー?(target)を指定しま?初期値:MENU) 065 * imageOnly 【TAG】グループメニューの表示に、画像?みかど?[true:画像?み/false:画像+ラベル]を指定しま?初期値:false) 066 * sideCount 【TAG】グループメニューの表示対象となるメニューを横並びさせる数を指定しま? 067 * minCellCount 【TAG】表形式メニュー(MATRIX)の?のセルに含まれる?行数を指定しま?初期値:8) 068 * maxCellCount 【TAG】表形式メニュー(MATRIX)の?のセルに含まれる?行数を指定しま?初期値:8) 069 * cache 【TAG】グループメニューのキャ?ュを使用するかど?[true/false]を指定しま?初期値:true) 070 * match 【TAG】正判?マッチする?合に、メニューに出?条件を設定しま? 071 * unmatch 【TAG】?判?マッチする?合に、メニューに出さな?条件を設定しま? 072 * useButton 【TAG】画面リンクにボタンを使用するかど?[true/false]を指定しま?初期値:false) 073 * buttonRequest 【TAG】?トリクスからの遷移先でボタンメニュー表示するかど?[true/false]を指定しま?初期値:false) 074 * inlineStyle 【TAG】標準画面を?期状態で表示するかど?[true/false]を指定しま?初期値:false) 075 * useDivOneLevel 【TAG】ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?[true/false]を指定しま?初期値:false) 076 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false) 077 * useButtonScript 【?】?タンリンクを使用した場合に、JavaScriptのイベントを発生させるかど?[true/false]を指定しま?初期値:false) 078 * > ... Body ... 079 * </og:topMenu> 080 * 081 * ●使用? 082 * <og:topMenu /> 083 * 084 * <og:topMenu 085 * menuType = "NORMAL" NORMAL:通常 / GROUP:グループメニュー / ONELEVEL:?レベル / NEXTGUI:次アクセス? 086 * / MATRIX:?表メニュー / MATRIX2:?表メニュー(大?なし版) 087 * expand = "true" true:折り返しメニュー / false:階層メニュー 088 * groups = "AA,BB,CC" 表示対象となるグループをカンマ区???で?します? 089 * classify = "ABC" 表示対象となる?類を?します? 090 * href = "menu.jsp" グループメニューの対象ソース?href)を指定します? 091 * target = "MENU" グループメニューの対象フレー?(target)を指定します? 092 * imageOnly = "false" グループメニューに?true:画像?み / false:画像+ラベル を指定します? 093 * sideCount = "6" グループメニューの表示対象となるメニューを横並びさせる数を指定します? 094 * minCellCount = "8" 表形式メニューの?セルの?行数を指定します? 095 * maxCellCount = "8" 表形式メニューの?セルの?行数を指定します? 096 * cache = "true" グループメニューのキャ?ュを使用するかど??します? 097 * match = "正規表現" 正判?マッチする?合に、メニューに出?条件を設定します? 098 * unmatch = "正規表現" ??マッチする?合に、メニューに出さな?条件を設定します? 099 * useButton = "false" ボタン形式?リンクを使用するかを?します? 100 * useButtonScript = "false" ボタンのイベントによるJavaScriptを起動するかを指定します? 101 * useDivOneLevel = "false" ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?を指定します? 102 * /> 103 * 104 * @og.rev 3.5.5.3 (2004/04/09) 新規作? 105 * @og.group メニュー制御 106 * 107 * @version 4.0 108 * @author Kohei Naruse 109 * @since JDK5.0, 110 */ 111 public class TopMenuTag extends CommonTagSupport { 112 //* こ?プログラ??VERSION??を設定します? {@value} */ 113 private static final String VERSION = "5.5.6.0 (2013/01/07)" ; 114 115 private static final long serialVersionUID = 556020130107L ; // 5.5.6.0 (2013/01/07) 116 117 private static final String FIELD_IN = "<fieldset style=\"display:inline;\">"; 118 private static final String FIELD_OUT = "</fieldset>" + HybsSystem.BR; 119 private static final String JSP = HybsSystem.sys( "JSP" ); 120 121 private static final String CNTX = HybsSystem.sys( "CONTEXT_NAME" ); // 5.5.4.2 (2012/07/13) META-INF/resources 対? 122 private static final String MENU_IMG = "/jsp/menuImage/" ; // 5.5.4.2 (2012/07/13) META-INF/resources 対? 123 124 private boolean multiSessionCheck = HybsSystem.sysBool( "USE_MULTI_SESSION_CHECK" ); 125 126 // private static final String[] MENU_TYPE = new String[] { "NORMAL","GROUP","ONELEVEL","MATRIX" } ; 127 // private static final String[] MENU_TYPE = new String[] { "NORMAL","GROUP","ONELEVEL","MATRIX","MATRIX2" } ; 128 private static final String[] MENU_TYPE = new String[] { "NORMAL","GROUP","ONELEVEL","NEXTGUI","MATRIX","MATRIX2" } ; // 5.2.3.0 (2010/12/01) 129 private String menuType = MENU_TYPE[0] ; // NORMAL:通常 / GROUP:グループメニュー / ONELEVEL:?レベル / MATRIX:?表メニュー / MATRIX2:?表メニュー(大?なし版) 130 private boolean expand = true; // true:折り返しメニュー / false:階層メニュー 131 private String[] groups = null; // 表示対象となるグループをカンマ区???で?します? 132 private String selClassify= null; // 表示対象となる?類を?します? 133 private String href = "menu.jsp"; // グループメニューの対象ソース?href)を指定します? 134 private String target = "MENU"; // グループメニューの対象フレー?(target)を指定します? 135 private boolean imageOnly = false; // グループメニューに?true:画像?み / false:画像+ラベル を指定しま? 136 // private int sideCount = 1; // 表示対象となるメニューを横並びさせる数を指定します? 137 private int sideCount = -1; // 5.2.3.0 (2010/12/01) 表示対象となるメニューを横並びさせる数を指定します? 138 private int minCellCount = 8; // 表形式メニューの?セルの?行数を指定します? 139 private int maxCellCount = 8; // 表形式メニューの?セルの?行数を指定します? 140 private boolean cache = true; // グループメニューのキャ?ュを使用するかど??します? 141 // 3.8.8.7 (2007/05/01) メニューの表示条件?追? 142 private String match = null; // 正判?マッチする?合に、メニューに出?条件を設? 143 private String unmatch = null; // ??マッチする?合に、メニューに出さな?条件を設? 144 145 // private transient FileMap fileMap = null; 146 private transient FileMap imgFileMap = null; // 5.5.2.5 (2012/05/21) 属?名変更 147 148 // MULTI_SESSION_CHECK 時?リンクに付加する?? 149 private String mscKey = null; 150 151 private boolean useButton = false; // ボタン形式?リンクを使用する?4.2.1.0 (2008/04/01) 152 // private boolean useButtonScript = false; // ボタンのイベントによるJavaScriptを起動するか 4.2.1.0 (2008/04/01) 153 private boolean buttonRequest = false; // マトリクス?から?遷移でボタン形式にするか?リクエスト変数 4.2.1.0 (2008/04/17) 154 private boolean excludeButton = false; // 4.3.3.0 (2008/10/01) ボタンメニューの場合でも強制?従来のプル?ンにします? 155 private boolean inlineStyle = false; // 4.3.3.0 (2008/10/01) trueでLv3の画面にstyle属?でinlineを付加 156 157 private String helpLinkFormat = null; // 5.3.9.0 (2011/09/01) ヘルプリンクフォーマッ? 158 private transient FileMap helpMap = null; // 5.3.9.0 (2011/09/01) ヘルプファイルが存在するかど?のキャ?ュ 159 // private String faqLinkFormat = null; // 5.5.0.4 (2012/03/16) FAQリンクフォーマッ?, 5.5.2.5 (2012/05/21) ? 160 161 private boolean useDivOneLevel = false; // 5.5.2.3 (2012/05/15) ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?を指定します? 162 163 // private CodeData classifyCode = null; 164 165 /** 166 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします? 167 * 168 * @og.rev 5.3.9.0 (2011/09/01) 新規作? 169 * @og.rev 5.6.7.1 (2013/08/09) 削除(標準?SKIP_BODYを返します?) 170 * 171 * @return 後続???? 172 */ 173 // @Override 174 // public int doStartTag() { 175 // return ( EVAL_BODY_BUFFERED ); // Body を評価する 176 // } 177 178 /** 179 * Taglibの終?グが見つかったときに処??doEndTag() ?オーバ?ライドします? 180 * 181 * @og.rev 4.0.0.0 (2007/10/31) 1レベルメニューの見直? 182 * @og.rev 4.2.1.0 (2008/04/01) マトリクスメニュー2追? 183 * @og.rev 5.2.3.0 (2010/12/01) NEXTGUI 追? 184 * @og.rev 5.3.0.0 (2010/11/22) NEXTGUI も?ルチセ?ョンチェ?をしな?? 185 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対? 186 * @og.rev 5.5.0.4 (2012/03/12) FAQ表示対? 187 * @og.rev 5.5.2.5 (2012/05/21) FAQ対?? 188 * @og.rev 5.5.4.2 (2012/07/13) META-INF/resources からの読み取り対? 189 * 190 * @return 後続???? 191 */ 192 @Override 193 public int doEndTag() { 194 debugPrint(); // 4.0.0 (2005/02/28) 195 196 // Ver 4.0.0 2007/09/04 197 // classifyCode = getResource().getCodeData( "CLASSIFY" ) ; 198 199 // ONELEVEL, NEXTGUI の場合?、multiSessionCheck を行いません? 200 if( multiSessionCheck && !"ONELEVEL".equals( menuType ) && !"NEXTGUI".equals( menuType ) ) { 201 String cnt = (String)getSessionAttribute( HybsSystem.MULTI_SESSION_CHECK ); 202 if( cnt == null ) { 203 String errMsg = "マルチセ?ョンチェ?のキーが存在しません? 204 + "topMenu タグを実行する前に、? jspInit タグ? 205 + "実行しておいてください? ; 206 jspPrint( errMsg ); 207 return(SKIP_PAGE); // ペ?ジの残りの処?行わな?? 208 } 209 mscKey = HybsSystem.MULTI_SESSION_CHECK + "=" + cnt ; 210 } 211 212 // 5.5.4.2 (2012/07/13) META-INF/resources からの読み取り対? 213 // String dir = sys( "REAL_PATH" ) + "jsp/menuImage/" ; 214 // fileMap = new FileMap( dir ); 215 // imgFileMap = new FileMap( dir ); // 5.5.2.5 (2012/05/21) 属?名変更 216 217 Set<?> set = pageContext.getServletContext().getResourcePaths( MENU_IMG ); 218 imgFileMap = new FileMap( MENU_IMG,set ); 219 220 // メニューでのヘルプアイコン対? 221 helpLinkFormat = get( "helpLinkFormat" ); 222 // faqLinkFormat = get( "faqLinkFormat" ); // 5.5.0.4 (2012/03/16), 5.5.2.5 (2012/05/21) ? 223 if( helpLinkFormat != null && helpLinkFormat.length() > 0 ) { 224 helpMap = new FileMap( get( "helpBaseDir" ) ); 225 } 226 227 if( "NORMAL".equals( menuType ) ) { 228 jspPrint( "<div class=\"forpos\" id=\"dummy\"></div>" + HybsSystem.CR ); 229 if( ! useButton ){ // 4.2.1.0 (2008/04/26) ボタン時にはお気に入りを出さな? 230 jspPrint( makeFavoriteMenu() ); 231 } 232 jspPrint( makeMenu() ); 233 } 234 else if( "GROUP".equals( menuType ) ) { 235 jspPrint( makeGroupMenu() ); 236 } 237 // else if( "CLASSIFY".equals( menuType ) ) { 238 // jspPrint( makeClassifyMenu() ); 239 // } 240 else if( "ONELEVEL".equals( menuType ) && selClassify != null ) { 241 jspPrint( makeOneLevelMenu() ); 242 } 243 // 5.2.3.0 (2010/12/01) NEXTGUI 追? 244 else if( "NEXTGUI".equals( menuType ) ) { 245 jspPrint( makeNextguiMenu() ); 246 } 247 else if( "MATRIX".equals( menuType ) ) { 248 jspPrint( makeMatrixMenu() ); 249 } 250 else if( "MATRIX2".equals( menuType ) ) { // 4.2.1.0 (2008/04/01) 大?なし版追? 251 jspPrint( makeMatrixMenu2() ); 252 } 253 // else { 254 // jspPrint( "menuType が想定外です?menuType=[" + menuType + "]" ); 255 // } 256 257 return(EVAL_PAGE); // ペ?ジの残りを評価する? 258 } 259 260 /** 261 * タグリブオブジェクトをリリースします? 262 * キャ?ュされて再利用される?で、フィールド?初期設定を行います? 263 * 264 * @og.rev 5.2.3.0 (2010/12/01) sideCountの初期値?-1(無制?に変更 265 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対? 266 * @og.rev 5.5.2.3 (2012/05/15) ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?を指定します? 267 */ 268 @Override 269 protected void release2() { 270 super.release2(); 271 expand = true; 272 menuType = MENU_TYPE[0]; 273 groups = null; 274 selClassify = null; 275 multiSessionCheck = HybsSystem.sysBool( "USE_MULTI_SESSION_CHECK" ); 276 href = "menu.jsp"; // グループメニューの対象ソース?href)を指定します? 277 imageOnly = false; // グループメニューに?true:画像?み / false:画像+ラベル を指定しま? 278 target = "MENU"; // グループメニューの対象フレー?(target)を指定します? 279 // sideCount = 1; // 表示対象となるメニューを横並びさせる数を指定します? 280 sideCount = -1; // 5.2.3.0 (2010/12/01) 表示対象となるメニューを横並びさせる数を指定します? 281 minCellCount = 8; // 表形式メニューの?セルの?行数を指定します? 282 maxCellCount = 8; // 表形式メニューの?セルの?行数を指定します? 283 mscKey = null; // MULTI_SESSION_CHECK 時?リンクに付加する?? 284 // fileMap = null; // イメージファイルのマッピングオブジェクトです? 285 imgFileMap = null; // 5.5.2.5 (2012/05/21) 属?名変更 286 cache = true; // グループメニューのキャ?ュを使用するかど??します? 287 match = null; // 正判?マッチする?合に、メニューに出?条件を設? 288 unmatch = null; // ??マッチする?合に、メニューに出さな?条件を設? 289 useButton = false; // ボタン形式?リンクを使用する? 290 // useButtonScript = false; // ボタンのイベントによるJavaScriptを起動するか 291 buttonRequest = false; // trueでボタンメニューの表示を行う 292 excludeButton = false; // trueでボタンメニュー時でも強制?従来のプル?ンにする? 293 inlineStyle = false; // trueの場合?標準画面(Lv3)にdisplay:inlineを付加 294 helpLinkFormat = null; // ヘルプリンクフォーマッ? 295 helpMap = null; // ヘルプファイルが存在するかど?のキャ?ュ 296 useDivOneLevel = false; // 5.5.2.3 (2012/05/15) ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?を指定します? 297 } 298 299 /** 300 * メニューを表示する為のHTMLを作?しま?折り返しJavaScript対応版)? 301 * 302 * @og.rev 3.5.6.5 (2004/08/09) GUIInfo の comments 属??title にセ?する? 303 * @og.rev 3.6.0.9 (2004/12/03) リアルアドレス設定時に、{@XXXX}処?追? 304 * @og.rev 3.8.0.0 (2005/06/07) 同??ョンでのマルチ起動対策を行います? 305 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを?慮する? 306 * @og.rev 4.0.0.0 (2007/10/31) ???に伴??全面見直? 307 * @og.rev 4.2.1.0 (2008/04/01) 小?類指定での表示対?↑?対応での再実?れ) 308 * @og.rev 4.2.1.0 (2008/04/11) 小?類をexpandしな??合にはspanタグで囲?? 309 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 310 * 311 * @return メニュー 312 */ 313 private String makeMenu() { 314 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 315 316 UserInfo userInfo = getUser(); 317 318 // 4.0.0 (2005/01/31) 319 320 // boolean useLvl3 = false; // レベル?が存在すると肯?true) 321 // boolean allLvl3 = true; // レベル?が存在すると否?false) つまり?true は全件レベル?? 322 // boolean useFldLvl2 = false; // fieldset が?期化されるまでに、レベル?が存在すると肯?true) 323 // boolean useClsEllipses = false; 324 // int fldInAdrs = -1; // fieldsetタグ(lebel=0)の挿入する位置 325 // String classify ; // ?コー? 326 // String bkClassify = null; // ?コー?旧) 327 // String fieldData = null; // fieldset を挿入する場合???? 328 329 GUIInfo[] guiInfos = userInfo.getGUIInfos(); 330 String gamenId ; // 画面ID 331 int menuNo = 11; 332 int kmokuNo = 0; 333 334 boolean isInFieldset = false; // 大??中か? 335 boolean isInClassify = false; // 小?類?中か? 336 boolean isExistHiddenMenu = false; // ?メニューが存在するか? 337 boolean isExistClassifyHidden = false; // ?隠しが存在するか? 338 int level ; 339 int preLevel = 0; 340 341 for( int i=0; i<guiInfos.length; i++ ) { 342 if( guiInfos[i].isRead() ) { // 4.0.0 (2005/01/31) 343 gamenId = guiInfos[i].getKey() ; 344 if( match != null && !gamenId.matches( match ) ) { continue; } 345 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 346 347 // 4.2.1.0 (2008/04/01) 348 if( selClassify != null ) { 349 if( !selClassify.equals( guiInfos[i].getKey() ) && !selClassify.equals( guiInfos[i].getClassify() ) ) { 350 continue; // ??classify) に含まれな? 351 } 352 } 353 354 // 処?べき画面か?チェ? 355 int guiFlg = guiCheck( guiInfos, i ); 356 if( guiFlg == 0 ) { continue; } 357 358 level = guiInfos[i].getLevel(); // 4.0.0 (2005/01/31) 359 360 // ?メニュー展開用 361 if( preLevel >= 3 && level < 3 ) { 362 if( isExistHiddenMenu ) { 363 rtn.append( makeEllipses( menuNo,kmokuNo,3 ) ); 364 kmokuNo++; 365 } 366 isExistHiddenMenu = false; 367 } 368 369 // 大??フィールドメニュー) 370 if( level == 1 ) { 371 if( isInFieldset ) { 372 rtn.append( FIELD_OUT ); 373 rtn.append( "</div>" ); 374 } 375 isInFieldset = true; 376 377 // ?メニュー用 378 if( expand ) { 379 rtn.append( "<div class=\"expand1 " ); 380 381 if( guiFlg == 1 ) { 382 rtn.append( "unpopular "); 383 } 384 385 rtn.append( "\">" ); 386 } 387 388 // rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),gamenId,level ) ); 389 rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),level ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 390 391 isInClassify = false; 392 } 393 // 小?類?直リンク 394 else if( level == 2 ) { 395 menuNo++; 396 kmokuNo = 0; 397 if( expand ) { 398 rtn.append( "<div class=\"expand1 " ); 399 400 // ?メニュー用 401 if( guiFlg == 1 ) { 402 rtn.append( "unpopular " ); 403 isExistClassifyHidden = true; 404 } 405 406 // rtn.append( "\" id=\"menu" + menuNo + "\">" ); 407 // 4.3.3.0 (2008/10/01) useButton=true時?表示しな? 408 rtn.append( "\" id=\"menu" + menuNo + "\" "); 409 if( useButton ){ 410 rtn.append( "style=\"display:none\""); 411 } 412 rtn.append( ">"); 413 414 } 415 else{ // 4.2.1.0 (2008/04/11)expandしな??合にはspan要?囲ってnon-expandクラスを指定? 416 rtn.append( "<span class=\"non-expand\">" ); 417 } 418 419 // rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),gamenId,level ) ); 420 rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),level ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 421 rtn.append( HybsSystem.BR ); 422 if( expand ) { 423 rtn.append( "</div>" ); 424 } 425 else{ // 4.2.1.0 (2008/04/11) 426 rtn.append( "</span>"); 427 } 428 429 isInClassify = true; 430 } 431 // 通常メニュー・?メニュー 432 else if( level >= 3 ) { 433 if( isInClassify ) { 434 if( expand ) { 435 rtn.append( "<div class=\"expand2 " ); 436 437 // ?メニュー用 438 if( level == 4 ) { 439 rtn.append( "unpopular " ); 440 isExistHiddenMenu = true; 441 } 442 443 // rtn.append( "\" id=\"menu" + menuNo + "_" + kmokuNo + "\">" ); 444 // 4.3.3.0 (2008/10/01) メニューを?期状態で開けるよ?する 445 rtn.append( "\" id=\"menu" + menuNo + "_" + kmokuNo + "\" " ); 446 if( inlineStyle && level == 3 ) { 447 rtn.append( " style=\"display:inline\"" ); 448 } 449 rtn.append( ">" ); 450 } 451 452 // 画面ID?HYBS_BR"の時?処?な? 453 if( !"HYBS_BR".equals( guiInfos[i].getKey() ) ) { 454 // rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),gamenId,level ) ); 455 rtn.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),level ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 456 } 457 rtn.append( HybsSystem.BR ); 458 if( expand ) { 459 rtn.append( "</div>" ); 460 } 461 kmokuNo++; 462 } 463 } 464 465 rtn.append( HybsSystem.CR ); 466 467 preLevel = level; 468 } 469 } 470 471 // 終??? 472 if( isExistHiddenMenu ) { 473 rtn.append( makeEllipses( menuNo,kmokuNo,3 ) ); 474 } 475 476 if( isInFieldset ) { 477 rtn.append( FIELD_OUT ); 478 rtn.append( "</div>" ); 479 } 480 481 if( isExistClassifyHidden ) { 482 rtn.append( makeEllipses( menuNo,0,2 ) ); 483 } 484 485 // classify = guiInfos[i].getClassify(); // ?キー 486 // if( selClassify != null && !selClassify.equals( classify ) ) { 487 // continue; // ??classify) に含まれな? 488 // } 489 490 // // CLASSIFY に HYBS_BR が設定されて?と1行空行を挿入します? 491 // if( "HYBS_BR".equals( classify ) ) { 492 // if( expand ) { 493 // rtn.append( "<div class=\"expand2\" id=\"menu" ); 494 // rtn.append( menuNo ).append( "_" ).append( kmokuNo ).append( "\">" ) ; 495 // } 496 // rtn.append( HybsSystem.BR ); 497 // if( expand ) { 498 // rtn.append( "</div>" ).append( HybsSystem.CR ); 499 // } 500 // kmokuNo++; 501 // continue; 502 // } 503 // 504 // // ??CLASSIFY) のブレイク時?? 505 // if( !classify.equals( bkClassify ) && level >= 2 ) { 506 // bkClassify = classify; 507 // // 先??中にレベル?が存在すれば?←・??? を?? 508 // if( expand && useLvl3 ) { 509 // rtn.append( makeEllipses( menuNo,kmokuNo,2 ) ); 510 // 511 // // すべて?レベル??場合?expand1 を見つけて、unpopular を挿入する? 512 // if( allLvl3 ) { 513 // int expInAdrs = rtn.lastIndexOf( "expand1" ); 514 // if( expInAdrs >= 0 ) { 515 // expInAdrs += "expand1".length(); 516 // rtn.insert( expInAdrs, " unpopular" ); 517 // useClsEllipses = true; // ?メニューに、unpopular を使用した場合? 518 // 519 // // レベル??fieldset)の挿入位置?unpopular 挿入?けずれる? 520 // if( fldInAdrs > expInAdrs ) { 521 // fldInAdrs += " unpopular".length(); 522 // } 523 // } 524 // } 525 // } 526 // useLvl3 = false; // 初期化:レベル?が存在すると肯?true) 527 // allLvl3 = true; // 初期化:レベル?が存在すると否?false) 528 // 529 // menuNo++; 530 // kmokuNo = 0; 531 // 532 //// String classifyLabel = getResource().getLabelData( classify ).getShortLabel() ; 533 // int cdAdrs = classifyCode.getAddress( classify ) ; 534 //// String classifyLabel = classifyCode.getShortLabel( cdAdrs ); 535 // String classifyLabel; 536 // if( cdAdrs != -1 ) { 537 // classifyLabel = classifyCode.getShortLabel( cdAdrs ); 538 // } 539 // else { 540 // classifyLabel = classify; 541 // } 542 // 543 // if( expand ) { 544 // rtn.append( "<div class=\"expand1" ); 545 // rtn.append( "\" id=\"menu" ); 546 // rtn.append( menuNo ).append( "\">" ); 547 // } 548 // rtn.append( makeTagMenuString( null,null,classifyLabel,classify,1 ) ); 549 // rtn.append( HybsSystem.BR ); 550 // if( expand ) { 551 // rtn.append( "</div>" ).append( HybsSystem.CR ); 552 // } 553 // } 554 // 555 // String linkLabel = guiInfos[i].getName(); 556 // if( level == 0 ) { 557 // // level=1 は、大?の出力なので、?期化が?になる? 558 // // 先??中にレベル?が存在すれば?←・??? を?? 559 // if( expand && useLvl3 ) { 560 // rtn.append( makeEllipses( menuNo,kmokuNo,2 ) ); 561 // } 562 // useLvl3 = false; // 初期化:レベル?が存在すると肯?true) 563 // allLvl3 = true; // 初期化:レベル?が存在すると否?false) 564 // 565 // if( useFldLvl2 && fieldData != null ) { 566 // rtn.insert( fldInAdrs, fieldData ); 567 // rtn.append( FIELD_OUT ); 568 // } 569 // fieldData = makeTagMenuString( null,null,linkLabel,gamenId,level ); 570 // fldInAdrs = rtn.length(); 571 // useFldLvl2 = false; // 初期化:レベル?が存在すると肯?true) 572 // } 573 // else if( level == 1 ) { 574 // useFldLvl2 = true; // レベル?が存在すると肯?true) 575 // 576 // // level=1 は、大?の出力なので、?期化が?になる? 577 // // 先??中にレベル?が存在すれば?←・??? を?? 578 // if( expand && useLvl3 ) { 579 // rtn.append( makeEllipses( menuNo,kmokuNo,2 ) ); 580 // } 581 // useLvl3 = false; // 初期化:レベル?が存在すると肯?true) 582 // allLvl3 = true; // 初期化:レベル?が存在すると否?false) 583 // 584 // rtn.append( makeTagMenu( guiInfos[i],linkLabel,gamenId,level ) ); 585 // rtn.append( HybsSystem.BR ); 586 // } 587 // else { 588 // if( expand ) { 589 // if( level == 3 ) { 590 // useLvl3 = true; 591 // rtn.append( "<div class=\"expand2 unpopular\" id=\"menu" ); 592 // } 593 // else { 594 // useFldLvl2 = true; // レベル?が存在すると肯?true) 595 // allLvl3 = false; 596 // rtn.append( "<div class=\"expand2\" id=\"menu" ); 597 // } 598 // rtn.append( menuNo ).append( "_" ).append( kmokuNo ).append( "\">" ) ; 599 // } 600 // rtn.append( makeTagMenu( guiInfos[i],linkLabel,gamenId,level ) ); 601 // rtn.append( HybsSystem.BR ); 602 // if( expand ) { 603 // rtn.append( "</div>" ).append( HybsSystem.CR ); 604 // } 605 // } 606 // kmokuNo++; 607 // } 608 // } 609 // 610 // // ループ終?の後??? 611 // // 先??中にレベル?が存在すれば?←・??? を?? 612 // if( expand && useLvl3 ) { 613 // rtn.append( makeEllipses( menuNo,kmokuNo,2 ) ); 614 // } 615 // 616 // // useFldLvl2 ?true で、fieldData が存在する場? 617 // if( useFldLvl2 && fieldData != null ) { 618 // rtn.insert( fldInAdrs, fieldData ); 619 // rtn.append( FIELD_OUT ); 620 // } 621 // 622 // // ?中のすべてがレベル??場合に、?類を?た?合??←・??? を?? 623 // if( expand && useClsEllipses ) { 624 // rtn.append( makeEllipses( ++menuNo,-1,1 ) ); 625 // } 626 627 return rtn.toString(); 628 } 629 630 /** 631 * メニューを表示する為のHTMLを作?しま?折り返しJavaScript対応版)? 632 * 633 * @og.rev 4.0.0.0 (2005/01/31) 個人別のお気に入りメニューを作?します? 634 * @og.rev 4.0.0.0 (2007/10/31) ??目の? 635 * @og.rev 4.1.1.0 (2008/02/05) お気に入り情報はGEA09から取得するよ?変更 636 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 637 * 638 * @return 個人別のお気に入りメニュー 639 */ 640 private String makeFavoriteMenu() { 641 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 642 643 UserInfo userInfo = getUser(); 644 Map<String,FavoriteGUIData> favoriteMap = userInfo.getFavoriteMap(); 645 646 // if( favoriteMap.size() == 0 ) { return ""; } 647 if( favoriteMap.isEmpty() ) { return ""; } 648 649 ResourceManager resource = getResource(); // リソース参? 650 String largeClassify = resource.getLabelData( "FAVORITE_MENU" ).getShortLabel(); // お気に入? 651 String lastClassify = ""; // 前方画面の?? 652 int menuNo = 99999; 653 int kmokuNo = 0; 654 655 // fieldSetタグ、お気に入り編?面リンクの出? 656 GUIInfo editFavorite = userInfo.getGUIInfo( "GE0014" ); 657 rtn.append( "<div class=\"expand1\"> " ); 658 rtn.append( makeTagMenuString( null,null,largeClassify,null,1 ) ); 659 // rtn.append( makeTagMenu( editFavorite,resource.getLabelData( "EDIT" ).getShortLabel(),"GE0014",2 ) ); 660 rtn.append( makeTagMenu( editFavorite,resource.getLabelData( "EDIT" ).getShortLabel(),2 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 661 rtn.append( HybsSystem.BR ); 662 663 String thisClassify = null; 664 String gamenId = null; 665 FavoriteGUIData favoriteGui = null; 666 // 4.3.4.4 (2009/01/01) findBugs警告対? 667 // for( String gamenId : favoriteMap.keySet() ) { 668 // favoriteGui = favoriteMap.get( gamenId ); 669 for( Map.Entry<String, FavoriteGUIData> entry : favoriteMap.entrySet() ) { 670 gamenId = entry.getKey(); 671 favoriteGui = entry.getValue(); 672 GUIInfo guiInfo = userInfo.getGUIInfo( gamenId ); 673 674 if( match != null && !gamenId.matches( match ) ) { continue; } 675 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 676 677 thisClassify = favoriteGui.getClassify(); 678 if( !lastClassify.equals( thisClassify ) ) { 679 menuNo++; 680 kmokuNo = 0; 681 if( expand ) { 682 rtn.append( "<div class=\"expand1\" id=\"menu" ); 683 rtn.append( menuNo ).append( "\">" ); 684 } 685 rtn.append( makeTagMenuString( null,null,thisClassify,thisClassify,2 ) ); 686 rtn.append( HybsSystem.BR ); 687 if( expand ) { 688 rtn.append( "</div>" ).append( HybsSystem.CR ); 689 } 690 lastClassify = thisClassify; 691 } 692 693 if( expand ) { 694 rtn.append( "<div class=\"expand2\" id=\"menu" ); 695 rtn.append( menuNo ).append( "_" ).append( kmokuNo ).append( "\">" ) ; 696 } 697 698 String linkLabel = favoriteGui.getName(); 699 // rtn.append( makeTagMenu( guiInfo,linkLabel,gamenId,3 ) ); 700 rtn.append( makeTagMenu( guiInfo,linkLabel,3 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 701 rtn.append( HybsSystem.BR ); 702 if( expand ) { 703 rtn.append( "</div>" ).append( HybsSystem.CR ); 704 } 705 kmokuNo++; 706 } 707 rtn.append( FIELD_OUT ); 708 rtn.append( "</div>" ); 709 710 return rtn.toString(); 711 } 712 713 /** 714 * 折りたたみメニューで?標準メニューの 表示に使??"←・??? を作?します? 715 * 716 * @param menuNo 階層番号 717 * @param kmokuNo 階層?番号 718 * @param type タイ?1,2限? 719 * 720 * @og.rev 4.0.0.0 (2005/01/31) 新規作? 721 * 722 * @return メニュー 723 */ 724 private String makeEllipses( final int menuNo,final int kmokuNo,final int type ) { 725 int tmpType = type-1; // ?定対?4.0.0.0 (2007/10/31) 726 String kmkNo = ( tmpType == 1 ) ? "" : "_" + kmokuNo ; 727 728 // 4.3.3.0 (2008/10/01) inlineStyleがtrueの場合?←・??→をinlineで表示する 729 // String rtn = "<div class=\"expand" + tmpType + " ellipses\" id=\"menu" + menuNo 730 // + kmkNo + "\">" 731 // + makeTagMenuString( null,null,"←・???,null,type ) 732 // + HybsSystem.BR + "</div>" + HybsSystem.CR ; 733 String rtn = "<div class=\"expand" + tmpType + " ellipses\" id=\"menu" + menuNo 734 + kmkNo + "\" "; 735 if( inlineStyle ){ 736 rtn += "style=\"display:inline\" "; 737 } 738 rtn += ">" + makeTagMenuString( null,null,"←・???,null,type ) 739 + HybsSystem.BR + "</div>" + HybsSystem.CR ; 740 741 return rtn ; 742 } 743 744 /** 745 * menuType="GROUP" 時に作?するグループメニュー 746 * 747 * @og.rev 4.0.0.0 (2005/01/31) 新規作? 748 * @og.rev 4.0.0.0 (2007/10/05) グループ?コードリソースが存在しな??? 749 * @og.rev 4.2.2.0 (2008/05/14) buttonRequestがtrueの場合?TOPへのリンクを表示しな? 750 * @og.rev 4.2.2.0 (2008/05/15) グループ絞込解除(GUI_ALL)の表示?にラベルリソースを使?? 751 * @og.rev 5.0.0.3 (2009/09/22) グループが1件の場合に表示されな?グを修正 752 * @og.rev 5.1.8.0 (2010/07/01) コードリソースのキーが存在しな??合にエラーとなるバグを修正 753 * 754 * @return メニュー 755 */ 756 private String makeGroupMenu() { 757 758 // 画面のグループメニューのキャ?ュを取得します? 759 String groupMenu ; 760 String cacheKey = HybsSystem.GUI_GR_MENU_CACHE_KEY + href + target ; 761 if( cache ) { 762 groupMenu = (String)getSessionAttribute( cacheKey ); 763 if( groupMenu != null ) { return groupMenu; } // キャ?ュを返します? 764 } 765 else { 766 removeSessionAttribute( cacheKey ); 767 } 768 769 UserInfo userInfo = getUser(); 770 771 Set<String> groupSet = new LinkedHashSet<String>(); 772 773 // そ?ユーザーで使用できる画面をすべてピックア??します? 774 // そ?上で、読取可能なメニューを含?ループを?に Set にセ?して?ます? 775 GUIInfo[] guiInfos = userInfo.getGUIInfos(); 776 String gamenId ; // 画面ID 777 for( int i=0; i<guiInfos.length; i++ ) { 778 if( guiInfos[i].isRead() ) { 779 gamenId = guiInfos[i].getKey() ; 780 if( match != null && !gamenId.matches( match ) ) { continue; } 781 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 782 String[] groups = StringUtil.csv2Array( guiInfos[i].getGroups() ); 783 for( int j=0; j<groups.length; j++ ) { 784 groupSet.add( groups[j] ); 785 } 786 } 787 } 788 789 // 5.0.0.3 (2009/09/22) 790 // if( groupSet.size() > 1 ) { 791 if( groupSet.size() > 0 ) { 792 int sideTmpCnt = 1; 793 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 794 rtn.append( "<tr>" ); 795 796 // rtn.append( makeTagMenuString( href,target,"ALL","GUI_ALL",-1 ) ); 797 String allMenu = getLabel( "ALL_MENU" ); // 4.2.2.0 (2008/05/15) ALLはラベルリソース使??変更 798 rtn.append( makeTagMenuString( href,target,allMenu,"GUI_ALL",-1 ) ); 799 if( sideCount > 0 && sideTmpCnt % sideCount == 0 ) { rtn.append("</tr><tr>"); } 800 sideTmpCnt++ ; 801 802 Iterator<String> ite = groupSet.iterator() ; 803 CodeData groupCode = getResource().getCodeData( "GROUPS" ) ; 804 if( groupCode != null ) { 805 while( ite.hasNext() ) { 806 String group = ite.next(); 807 // String groupLabel = getLabel( group ); // グループラベル 808 int cdAdrs = groupCode.getAddress( group ) ; 809 // 4.0.0.0 (2007/10/05) グループ?コードリソースが存在しな??? 810 // String groupLabel = groupCode.getLongLabel( cdAdrs ); 811 String groupLabel = ""; 812 if( cdAdrs >= 0 ) { groupLabel = groupCode.getLongLabel( cdAdrs ); } 813 814 // 5.1.8.0 (2010/07/01) コードリソースのキーが存在しな??合にエラーとなるバグを修正 815 if( groupLabel.length() == 0 && group != null && group.length() > 0 ) { 816 groupLabel = group; 817 } 818 819 String src = XHTMLTag.addUrlEncode( href,"group=" + group ); 820 rtn.append( makeTagMenuString( src,target,groupLabel,group,-1 ) ); 821 if( sideCount > 0 && sideTmpCnt % sideCount == 0 ) { rtn.append("</tr><tr>"); } 822 sideTmpCnt++ ; 823 } 824 } 825 826 // if( ! imageOnly ) { 827 if( ! imageOnly && ! buttonRequest ) { // 4.2.2.0 (2008/05/14) ボタンメニュー時?トップメニュー 828 rtn.append( makeTagMenuString( JSP + "/index.jsp",target,"Top","GUI_TOP",-1 ) ); 829 } 830 rtn.append( "</tr>" ); 831 832 // 画面のグループメニューのキャ?ュをセ?します? 833 groupMenu = rtn.toString() ; 834 } 835 else { 836 groupMenu = ""; 837 } 838 839 if( cache ) { 840 setSessionAttribute( cacheKey,groupMenu ); 841 } 842 843 return groupMenu; 844 } 845 846 /** 847 * メニューを表示する為のHTMLを作?しま?折り返しJavaScript対応版)? 848 * 849 * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータを?慮する? 850 * @og.rev 4.0.0.0 (2007/10/31) ?? 851 * @og.rev 5.5.2.3 (2012/05/15) useDivOneLevel 対? 852 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 853 * @og.rev 5.5.6.0 (2013/01/07) useDivOneLevelの折り返し方法変更 854 * 855 * @return メニュー 856 */ 857 private String makeOneLevelMenu() { 858 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 859 860 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 861 if( useDivOneLevel ) { rtn.append("<div id=\"design-onelevel\">"); } 862 863 UserInfo userInfo = getUser(); 864 865 // 4.0.0 (2005/01/31) 866 GUIInfo[] guiInfos = userInfo.getGUIInfos(); 867 String gamenId ; // 画面ID 868 // String classify ; 869 int sideTmpCnt = 1; 870 871 boolean isInClassify = false; 872 873 for( int i=0; i<guiInfos.length; i++ ) { 874 // classify = guiInfos[i].getClassify(); // ?キー 875 int level = guiInfos[i].getLevel(); 876 877 if( level == 2 ) { 878 if( selClassify.equals( guiInfos[i].getKey() ) ) { 879 isInClassify = true; 880 } 881 else { 882 isInClassify = false; 883 } 884 } 885 886 // if( guiInfos[i].isRead() && selClassify.equals( classify ) ) { // 4.0.0 (2005/01/31) 887 if( guiInfos[i].isRead() && level == 3 && isInClassify ) { // 4.0.0 (2005/01/31) 888 gamenId = guiInfos[i].getKey() ; 889 if( match != null && !gamenId.matches( match ) ) { continue; } 890 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 891 892 // int level = guiInfos[i].getLevel(); // 4.0.0 (2005/01/31) 893 // if( level == 2 ) { 894 // if( level == 4 ) { 895 String guiLabel = guiInfos[i].getName(); // 画面ラベル 896 897 String thisGamenId = getGUIInfoAttri( "KEY" ); 898 if( gamenId.equals( thisGamenId ) ) { 899 // rtn.append( "[" ).append( guiLabel ).append( "] " ); 900 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 901 if( useDivOneLevel ) { 902 rtn.append("<span class=\"design-onelevel\">").append( guiLabel ).append( "</span>" ); 903 } 904 else { 905 rtn.append( "[" ).append( guiLabel ).append( "] " ); 906 } 907 } 908 else { 909 // rtn.append( makeTagMenu( guiInfos[i],guiLabel,gamenId,-2 ) ); 910 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 911 if( useDivOneLevel ) { 912 // 5.5.2.5 (2012/05/21) イメージアイコン対? 913 // rtn.append("<span class=\"design-onelevel\">").append( makeTagMenu( guiInfos[i],guiLabel,gamenId,-3 ) ).append( "</span>" ); 914 rtn.append("<span class=\"design-onelevel\">").append( makeTagMenu( guiInfos[i],guiLabel,-3 ) ).append( "</span>" ); 915 } 916 else { 917 // rtn.append( makeTagMenu( guiInfos[i],guiLabel,gamenId,-2 ) ); 918 rtn.append( makeTagMenu( guiInfos[i],guiLabel,-2 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 919 } 920 } 921 922 if( sideCount > 0 ) { 923 // 全件数をサイドカウント数で割った?が最大行数の場合?、終?る? 924 if( sideTmpCnt / sideCount >= maxCellCount ) { 925 // rtn.append("???"); 926 break; 927 } 928 // 全件数をサイドカウント数で割った余りがゼロの場合?、行ブレイクする? 929 // if( sideTmpCnt % sideCount == 0 ) { rtn.append( HybsSystem.BR ); } 930 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 931 if( sideTmpCnt % sideCount == 0 ) { 932 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 933 if( useDivOneLevel ) { 934 rtn.append( HybsSystem.BR ); // 5.6.0.0 (2013/01/07) BRにする(条件??残しておく) 935 // rtn.append("<span style=\"clear: both;\" />"); 936 } 937 else { 938 rtn.append( HybsSystem.BR ); 939 } 940 } 941 sideTmpCnt++ ; 942 } 943 // } 944 } 945 } 946 947 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 948 if( useDivOneLevel ) { 949 rtn.append("<span style=\"clear: both;\" />"); 950 rtn.append("</div>"); 951 } 952 953 return rtn.toString(); 954 } 955 956 /** 957 * 既存?ペ?ジの次にアクセスされる画面郡のリンクを作?します? 958 * 959 * これは、現時点の画面に対して、次にアクセスされる画面の候補を 960 * ピックア??しておく機?です? 961 * 実際には?去にアクセスされた結果より取得して?す? 962 * これは、ONELEVEL と置き換えることになる機?です? 963 * 964 * @og.rev 5.2.3.0 (2010/12/01) NEXTGUI 追? 965 * @og.rev 5.5.2.3 (2012/05/15) useDivOneLevel 対? 966 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 967 * 968 * @return メニュー 969 */ 970 private String makeNextguiMenu() { 971 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 972 973 // 今?アクセスして?画面 974 GUIInfo thisGamen = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY ); 975 String[] nextGuis = thisGamen.getNextGuiArray(); 976 977 UserInfo userInfo = getUser(); 978 int sideTmpCnt = 1; 979 980 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 981 if( useDivOneLevel ) { rtn.append("<div id=\"design-onelevel\">"); } 982 983 GUIInfo guiInfo = null; 984 for( int i=0; i<nextGuis.length; i++ ) { 985 guiInfo = userInfo.getGUIInfo( nextGuis[i] ); 986 if( guiInfo == null ) { continue; } // 存在しな??また?アクセス拒否の場合?、無視する? 987 988 if( guiInfo.isRead() ) { 989 String gamenId = nextGuis[i] ; 990 String guiLabel = guiInfo.getName(); // 画面ラベル 991 992 // rtn.append( makeTagMenu( guiInfo,guiLabel,gamenId,-2 ) ); 993 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 994 if( useDivOneLevel ) { 995 // 5.5.2.5 (2012/05/21) イメージアイコン対? 996 // rtn.append("<span class=\"design-onelevel\">").append( makeTagMenu( guiInfo,guiLabel,gamenId,-3 ) ).append( "</span>" ); 997 rtn.append("<span class=\"design-onelevel\">").append( makeTagMenu( guiInfo,guiLabel,-3 ) ).append( "</span>" ); 998 } 999 else { 1000 // rtn.append( makeTagMenu( guiInfo,guiLabel,gamenId,-2 ) ); 1001 rtn.append( makeTagMenu( guiInfo,guiLabel,-2 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 1002 } 1003 1004 if( sideCount > 0 ) { 1005 // 全件数をサイドカウント数で割った?が最大行数の場合?、終?る? 1006 if( sideTmpCnt / sideCount >= maxCellCount ) { 1007 break; 1008 } 1009 // 全件数をサイドカウント数で割った余りがゼロの場合?、行ブレイクする? 1010 // if( sideTmpCnt % sideCount == 0 ) { rtn.append( HybsSystem.BR ); } 1011 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 1012 if( sideTmpCnt % sideCount == 0 ) { 1013 if( useDivOneLevel ) { 1014 rtn.append("<span style=\"clear: both;\" />"); 1015 } 1016 else { 1017 rtn.append( HybsSystem.BR ); 1018 } 1019 } 1020 sideTmpCnt++ ; 1021 } 1022 } 1023 } 1024 1025 // 5.5.2.3 (2012/05/15) useDivOneLevel 対? 1026 if( useDivOneLevel ) { rtn.append("</div>"); } 1027 1028 return rtn.toString(); 1029 } 1030 1031 /** 1032 * メニューを表示する為のHTMLを作?しま?マトリクスメニュー)? 1033 * 1034 * ?まとめ?クラス色???行数設定??行数設定?機?があります? 1035 * 《?類まとめ? ?行数設?maxCellCount)に達したセルは、?右に新たにセルを作? 1036 * します?こ?とき?ヘッ??の CLASSIFY を同じにして、colspan でまとめます? 1037 * 《クラス色??ヘッ??毎に ? CLR0,CLR1,???? と?クラス属?を付与します? 1038 * ヘッ??には、MENU_H も?力されて?す?CLR0 は、大?ごとに?されて?ます?で? 1039 * 繰り返して同じ色を指定する?合?、CSSファイルでまとめて?してください? 1040 * 《最小行数設定?minCellCount 属?を指定することで?セルに含まれる?行数を指定できます? 1041 * これは、セルに入れる <br /> の個数を指定することと同じです? 1042 * 《最大行数設定?maxCellCount 属?を指定することで?セルに含まれる?行数を指定できます? 1043 * ?まとめでも説明しましたように、最大値をオーバ?すると次のセルから書き始めます? 1044 * 1045 * @og.rev 4.0.0.0 (2005/11/30) 新規追? 1046 * @og.rev 4.0.0.0 (2007/10/05) ??コードリソースが存在しな??? 1047 * @og.rev 5.2.3.0 (2010/12/01) sideCount対? 1048 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 1049 * @og.rev 5.5.5.3 (2012/08/17) th,tdにヘッ??画面IDをクラスとして出? 1050 * 1051 * @return マトリクスメニュー 1052 */ 1053 private String makeMatrixMenu() { 1054 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1055 1056 UserInfo userInfo = getUser(); 1057 1058 // 4.0.0 (2005/01/31) 1059 // String classify ; // ?コー? 1060 // int colspanAdrs = 0; // maxCellCount でのキーブレイクで、colspan を挿入する位置 1061 // int colspan = 0; // maxCellCount でのキーブレイクで、colspan を挿入する値 1062 1063 GUIInfo[] guiInfos = userInfo.getGUIInfos(); 1064 String gamenId ; // 画面ID 1065 String bkClassifyKey = null; // ?コー?旧) 1066 String bkClassifyName = null; // ?名称(旧) 1067 int cellColorCnt = 0; // MENU_H に 追??CLR クラス属?の連番 1068 1069 String headGuikey = ""; // 5.5.5.3 (2012/08/17) ヘッ??gamenId 1070 1071 StringBuilder rtnH = null; // ?部??出力用 1072 StringBuilder rtnB = null; // 実画面のリンク部??出力用 1073 1074 int level ; 1075 int preLevel = 0; 1076 1077 int lineTmpCnt = 0; // セル中の行カウン? 1078 int cellTmpCnt = 0; // 1つの?中のセルカウン? 1079 int cellTmpAllCnt = 0; // 5.2.3.0 (2010/12/01) 該当行?セルカウン? 1080 1081 boolean isInClassify = false; // ??中か? 1082 boolean isChangeLevel = false; // 直リンク用(無?り?常画面の階層として扱??で) 1083 boolean isDummyMENU_S = false; // 5.2.3.0 (2010/12/01) sideCountブレーク時?大??域?出力可否 1084 1085 for( int i=0; i<guiInfos.length; i++ ) { 1086 if( guiInfos[i].isRead() ) { // 4.0.0 (2005/01/31) 1087 gamenId = guiInfos[i].getKey() ; 1088 if( match != null && !gamenId.matches( match ) ) { continue; } 1089 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 1090 1091 // 処?べき画面か?チェ? 1092 int guiFlg = guiCheck( guiInfos, i ); 1093 if( guiFlg == 0 ) { continue; } 1094 1095 level = guiInfos[i].getLevel(); // 4.0.0 (2005/01/31) 1096 1097 // 大?が来るまでは処?な? 1098 if( level > 1 && rtnH == null ) { continue; } 1099 1100 // 直リンクの場合?無?り?常画面に変換 1101 if( level == 2 && guiInfos[i].getAddress() != null && guiInfos[i].getAddress().length() != 0 ) { 1102 level = 3; 1103 if( !isChangeLevel ) { 1104 isChangeLevel = true; 1105 isInClassify = false; 1106 } 1107 } 1108 else { 1109 isChangeLevel = false; 1110 } 1111 1112 // ??ブレイク処? 1113 if( ( preLevel >= 3 && level < 3 ) || !isInClassify ) { 1114 if( lineTmpCnt != 0 ) { 1115 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1116 rtnB.append( "</td>" ).append( HybsSystem.CR ); 1117 } 1118 1119 1120 if( bkClassifyKey != null ) { 1121 // rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + "\">" ); 1122 rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + " " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1123 if( "_SPACE".equals( bkClassifyKey ) ) { 1124 rtnH.append( "? ); 1125 } 1126 else { 1127 rtnH.append( makeTagMenuString( null,null,bkClassifyName,bkClassifyKey,-3 ) ); 1128 } 1129 rtnH.append( "</th>" ); 1130 1131 // 5.2.3.0 (2010/12/01) sideCount によるセルの改? 1132 cellTmpAllCnt += cellTmpCnt; 1133 if( sideCount > 0 && cellTmpAllCnt >= sideCount ) { 1134 rtn.append( rtnH ).append( "</tr><tr>" ).append( rtnB ).append( "</tr>" ); 1135 1136 rtnH = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1137 rtnB = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1138 cellTmpAllCnt = 0; 1139 isDummyMENU_S = true; // 出力予? 1140 } 1141 } 1142 1143 bkClassifyKey = null; 1144 isInClassify = false; 1145 lineTmpCnt = 0; 1146 cellTmpCnt = 0; 1147 } 1148 1149 // 大??フィールドメニュー) 1150 if( level == 1 ) { 1151 headGuikey = gamenId; // 5.5.5.3 (2012/08/17) 1152 if( preLevel > 0 ) { 1153 cellColorCnt++ ; 1154 rtn.append( rtnH ).append( "</tr><tr>" ).append( rtnB ).append( "</tr>" ); 1155 } 1156 1157 // rtn.append( "<tr><td rowspan=\"2\" class=\"MENU_S\">" ); 1158 rtn.append( "<tr><td rowspan=\"2\" class=\"MENU_S "+ headGuikey +"\">" ); // 5.5.5.3 (2012/08/17) 1159 rtn.append( makeTagMenuString( null,null,guiInfos[i].getName(),gamenId,-3 ) ); 1160 rtn.append( "</td>" ).append( HybsSystem.CR ); 1161 1162 rtnH = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1163 rtnB = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1164 cellTmpAllCnt = 0; // 5.2.3.0 (2010/12/01) 1165 isDummyMENU_S = false; // 5.2.3.0 (2010/12/01) 出力予?除 1166 } 1167 // ??直リンクの場合?、level=3で処? 1168 else if( level == 2 ) { 1169 isInClassify = true; 1170 bkClassifyKey = guiInfos[i].getKey(); 1171 bkClassifyName = guiInfos[i].getName(); 1172 } 1173 // 通常メニュー・?メニュー 1174 else if( level >= 3 ) { 1175 1176 // ??MENU_Sに戻り?rowspan を書き換える・・・のが邪魔くさいので、td のみ出力しておく? 1177 // 5.2.3.0 (2010/12/01) sideCount によるセルの改? 1178 if( isDummyMENU_S ) { 1179 // rtn.append( "<tr><td rowspan=\"2\" class=\"MENU_S\">" ); 1180 rtn.append( "<tr><td rowspan=\"2\" class=\"MENU_S " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1181 rtn.append( "</td>" ).append( HybsSystem.CR ); 1182 isDummyMENU_S = false; // 出力予?除 1183 } 1184 1185 // 画面ID="HYBS_BR"の場合?、セルを変える? 1186 if( "HYBS_BR".equals( guiInfos[i].getKey() ) ) { 1187 if( lineTmpCnt != 0 ) { 1188 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1189 lineTmpCnt = 0; 1190 } 1191 } 1192 // 通常画面 1193 else { 1194 if( lineTmpCnt == 0 ) { 1195 // rtnB.append( "<td class=\"MENU_B\">" ); 1196 rtnB.append( "<td class=\"MENU_B " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1197 cellTmpCnt++; 1198 } 1199 1200 // rtnB.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),gamenId,-3 ) ); 1201 rtnB.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),-3 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 1202 lineTmpCnt++; 1203 1204 if( lineTmpCnt >= maxCellCount ) { 1205 rtnB.append( "</td>" ); 1206 lineTmpCnt = 0; 1207 } 1208 else { 1209 rtnB.append( HybsSystem.BR ); 1210 } 1211 1212 // ??中に入って???常画面 1213 if( !isInClassify ) { 1214 bkClassifyKey = "_SPACE"; 1215 isInClassify = true; 1216 } 1217 } 1218 } 1219 1220 preLevel = level; 1221 } 1222 1223 } 1224 1225 // 終??? 1226 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1227 rtnB.append( "</td>" ).append( HybsSystem.CR ); 1228 1229 if( bkClassifyKey != null ) { 1230 // rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + "\">" ); 1231 rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + " " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1232 rtnH.append( makeTagMenuString( null,null,bkClassifyName,bkClassifyKey,-3 ) ); 1233 rtnH.append( "</th>" ); 1234 } 1235 1236 rtn.append( rtnH ).append( "</tr><tr>" ).append( rtnB ).append( "</tr>" ); 1237 1238 return rtn.toString(); 1239 } 1240 1241 /** 1242 * メニューを表示する為のHTMLを作?しま?マトリクスメニュー2)? 1243 * 1244 * マトリクスメニューを?ースとした特別バ?ジョンです? 1245 * 通常のマトリクスメニューからの変更点は以下?通りです? 1246 * ??が表示されな? 1247 * ?変わりに?行に表示されて?セル数がsideCountで?した数を?た?合に 1248 * 自動的に改行されます? 1249 * ②画面リンクのターゲ? 1250 * ?自??身のフレー?対してリンク先を表示します? 1251 * リンク先???常メニュー構?ですが左メニューには該当する小?類?画面しか表示されません? 1252 * ③小?類でのリンク 1253 * ?小?類をクリ?した際に??常のメニュー構?画面にリンクします? 1254 * ?、②と同様に左メニューには該当する小?類?画面しか表示されません? 1255 * 1256 * @og.rev 4.2.1.0 (2008/04/01) 新規追? 1257 * @og.rev 4.2.1.1 (2008/05/02) カ?リーリンクで?上?画面のモードが-wとなって?場合に? 1258 * そ?画面が立ち上がってしま?グを修正 1259 * @og.rev 4.2.2.0 (2008/05/14) buttonRequestの付加をmakeTagMenuString()に変更 1260 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?makeTagMenuのパラメータ変更) 1261 * @og.rev 5.5.5.3 (2012/08/17) ヘッ?のgamenIdをth,tdのクラスに追? 1262 * 1263 * @return マトリクスメニュー 1264 */ 1265 private String makeMatrixMenu2() { 1266 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1267 1268 UserInfo userInfo = getUser(); 1269 1270 GUIInfo[] guiInfos = userInfo.getGUIInfos(); 1271 String gamenId ; // 画面ID 1272 String bkClassifyKey = null; // ?コー?旧) 1273 String nextKey = null; // ??タンを押した時に??の画面が開くよ?する 1274 String bkClassifyName = null; // ?名称(旧) 1275 int cellColorCnt = 0; // MENU_H に 追??CLR クラス属?の連番 1276 1277 StringBuilder rtnH = new StringBuilder( HybsSystem.BUFFER_LARGE ); // ?部??出力用 1278 StringBuilder rtnB = new StringBuilder( HybsSystem.BUFFER_LARGE ); // 実画面のリンク部??出力用 1279 1280 int level ; 1281 int preLevel = 0; 1282 1283 int lineTmpCnt = 0; // セル中の行カウン? 1284 int cellTmpCnt = 0; // 1つの?中のセルカウン? 1285 int cellTmpAllCnt = 0; // 該当行?セルカウン? 1286 1287 boolean isInClassify = false; // ??中か? 1288 boolean isChangeLevel = false; // 直リンク用(無?り?常画面の階層として扱??で) 1289 1290 String classifyHref = null; // 小?類?リンク 1291 1292 String headGuikey = "" ; // 5.5.5.3 (2012/08/17) 1293 1294 rtn.append( "<tr>" ).append( HybsSystem.CR ); 1295 1296 for( int i=0; i<guiInfos.length; i++ ) { 1297 if( guiInfos[i].isRead() ) { // 4.0.0 (2005/01/31) 1298 gamenId = guiInfos[i].getKey() ; 1299 if( match != null && !gamenId.matches( match ) ) { continue; } 1300 if( unmatch != null && gamenId.matches( unmatch ) ) { continue; } 1301 1302 // 処?べき画面か?チェ? 1303 int guiFlg = guiCheck( guiInfos, i ); 1304 if( guiFlg == 0 ) { continue; } 1305 1306 level = guiInfos[i].getLevel(); // 4.0.0 (2005/01/31) 1307 1308 // 直リンクの場合?無?り?常画面に変換 1309 if( level == 2 && guiInfos[i].getAddress() != null && guiInfos[i].getAddress().length() != 0 ) { 1310 level = 3; 1311 if( !isChangeLevel ) { 1312 isChangeLevel = true; 1313 isInClassify = false; 1314 } 1315 } 1316 else { 1317 isChangeLevel = false; 1318 } 1319 1320 // ??ブレイク処? 1321 if( ( preLevel >= 3 && level < 3 ) || !isInClassify ) { 1322 if( lineTmpCnt != 0 ) { 1323 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1324 //rtnB.append( "</td>" ).append( HybsSystem.CR ); // 4.2.1.0 (2008/04/03) リス? 1325 rtnB.append( "</ul></div></td>" ).append( HybsSystem.CR ); 1326 } 1327 1328 if( bkClassifyKey != null ) { 1329 // rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + "\">" ); 1330 rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + " " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1331 if( "_SPACE".equals( bkClassifyKey ) ) { 1332 rtnH.append( "? ); 1333 } 1334 else { 1335 classifyHref = JSP + "/index.jsp?classify=" + bkClassifyKey; 1336 // 4.1.2.0(2008/05/14) リクエスト変数を付ける位置変更 1337 // if( buttonRequest ){ // 4.2.1.0 (2008/04/17) マトリクス?から?遷移でボタン式にするかど? 1338 // classifyHref += "&buttonRequest=true"; 1339 // } 1340 classifyHref += "&GAMENID="+nextKey; // ボタンを押した場合に??の画面が現れる 1341 rtnH.append( makeTagMenuString( classifyHref,"_self",bkClassifyName,bkClassifyKey,-3 ) ); 1342 } 1343 rtnH.append( "</th>" ); 1344 1345 cellTmpAllCnt += cellTmpCnt; 1346 1347 if( sideCount > 0 && cellTmpAllCnt >= sideCount ) { 1348 rtn.append( rtnH ).append( "</tr><tr>" ).append( rtnB ).append( "</tr>" ); 1349 1350 rtnH = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1351 rtnB = new StringBuilder( HybsSystem.BUFFER_LARGE ); 1352 cellTmpAllCnt = 0; 1353 } 1354 } 1355 1356 bkClassifyKey = null; 1357 nextKey = null; 1358 isInClassify = false; 1359 lineTmpCnt = 0; 1360 cellTmpCnt = 0; 1361 } 1362 1363 // 5.5.5.3 (2012/08/17) 大??フィールドメニュー) 1364 if( level == 1 ) { 1365 headGuikey = gamenId; 1366 } 1367 // ??直リンクの場合?、level=3で処? 1368 else if( level == 2 ) { 1369 isInClassify = true; 1370 if( guiInfos[i].isPulldown() ){ // 4.3.3.0 (2008/10/01) プル?ン化チェ? 1371 excludeButton = true; 1372 } 1373 else{ 1374 excludeButton = false; 1375 } 1376 bkClassifyKey = guiInfos[i].getKey(); 1377 bkClassifyName = guiInfos[i].getName(); 1378 // if( guiInfos.length > i && guiInfos[i+1] != null ){ 1379 // nextKey = guiInfos[i+1].getKey(); 1380 // } 1381 for( int j=i+1; j<guiInfos.length; j++ ) { 1382 if( guiInfos[j] != null && guiInfos[j].isRead() ) { 1383 nextKey = guiInfos[j].getKey(); 1384 break; 1385 } 1386 } 1387 } 1388 // 通常メニュー・?メニュー 1389 else if( level >= 3 ) { 1390 1391 // 画面ID="HYBS_BR"の場合?、セルを変える? 1392 if( "HYBS_BR".equals( guiInfos[i].getKey() ) ) { 1393 if( lineTmpCnt != 0 ) { 1394 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1395 lineTmpCnt = 0; 1396 } 1397 } 1398 // 通常画面 1399 else { 1400 if( lineTmpCnt == 0 ) { 1401 // rtnB.append( "<td class=\"MENU_B\">" ); 1402 // 4.2.1.0 (2008/04/03) リンクをリスト形式で出す? 1403 // rtnB.append( "<td class=\"MENU_B\"> <div class=\"gamen-menu-wrap\"><ul class=\"gamen-menu\">" ); 1404 rtnB.append( "<td class=\"MENU_B "+ headGuikey +"\"> <div class=\"gamen-menu-wrap\"><ul class=\"gamen-menu\">" ); // 5.5.5.3 (2012/08/17) 1405 cellTmpCnt++; 1406 } 1407 1408 // 5.5.2.5 (2012/05/21) リスト?、イメージを設定する?で、メソ?側で付与します? 1409 // rtnB.append( "<li>" ); // 4.2.1.0 (2008/04/03) リス? 1410 // rtnB.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),gamenId,-4 ) ); 1411 rtnB.append( makeTagMenu( guiInfos[i],guiInfos[i].getName(),-4 ) ); // 5.5.2.5 (2012/05/21) イメージアイコン対? 1412 // rtnB.append( "</li>" ); // 4.2.1.0 (2008/04/03) リス? 1413 lineTmpCnt++; 1414 1415 if( lineTmpCnt >= maxCellCount ) { 1416 // rtnB.append( "</td>" ); 1417 rtnB.append( " </ul> </div></td>" ); // 4.2.1.0 (008/04/03) リス? 1418 lineTmpCnt = 0; 1419 } 1420 // else { 1421 // rtnB.append( HybsSystem.BR ); // 4.2.1.0 (2008/04/03) リスト?改行不要? 1422 // } 1423 1424 // ??中に入って???常画面 1425 if( !isInClassify ) { 1426 bkClassifyKey = "_SPACE"; 1427 isInClassify = true; 1428 } 1429 } 1430 } 1431 1432 preLevel = level; 1433 } 1434 1435 } 1436 1437 // 終??? 1438 // 4.3.3.0 (2008/10/01) 終????0の時行?な? 1439 if( lineTmpCnt != 0){ 1440 for( int j=lineTmpCnt; j<minCellCount-1; j++ ) { rtnB.append( HybsSystem.BR ); } 1441 rtnB.append( "</td>" ).append( HybsSystem.CR ); 1442 } 1443 1444 if( bkClassifyKey != null ) { 1445 // rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + "\">" ); 1446 rtnH.append( "<th colspan=\"" + cellTmpCnt + "\" class=\"MENU_H CLR" + cellColorCnt + " " + headGuikey + "\">" ); // 5.5.5.3 (2012/08/17) 1447 1448 classifyHref = JSP + "/index.jsp?classify=" + bkClassifyKey; 1449 // 4.1.2.0(2008/05/14) リクエスト変数を付ける位置変更 1450 // if( buttonRequest ){ // 4.2.1.0 (2008/04/17) マトリクス?から?遷移でボタン式にするかど? 1451 // classifyHref += "&buttonRequest=true"; 1452 // } 1453 classifyHref += "&GAMENID="+nextKey; 1454 rtnH.append( makeTagMenuString( classifyHref,"_self",bkClassifyName,bkClassifyKey,-3 ) ); 1455 rtnH.append( "</th>" ); 1456 } 1457 1458 rtn.append( rtnH ).append( "</tr><tr>" ).append( rtnB ).append( "</tr>" ); 1459 1460 return rtn.toString(); 1461 } 1462 1463 /** 1464 * タイプに応じたメニューを表示する為の??を作?します? 1465 * 引数の GUIInfo より、アクセスすべきメニューのhrefと、targetを求めます? 1466 * type = -3 (マトリクスメニュー) の場合だけ?タグ属?の target を使用します? 1467 * 1468 * ?:フィールドセ?メニュー 1469 * ?:トップ階層(【?類名称? 1470 * ?:選択階層(通常の折りたたみメニュー) 1471 * ?:選択非表示(通常は?してありま? 1472 * ?1:グループ?類メニュー(class="GUI_GRP"のtdタグで囲われま? 1473 * ?2:ラインメニュー([画面名称]? 1474 * ?3:マトリクスメニュー(?) 1475 * ?4:マトリクスメニュー???) 1476 * 1477 * @og.rev 4.0.0.0 (2005/01/31) 新規登録(makeTopMenu、makeSecondMenuの置き換? 1478 * @og.rev 4.1.0.1 (2008/01/22) アドレスが[..]から始まる画面はマルチセ?ョンチェ?を行わな?? 1479 * @og.rev 4.2.1.0 (2008/04/01) マトリクスメニュー2用のタグ作?処?? 1480 * @og.rev 4.2.1.0 (2008/04/17) マトリクス?から?遷移先でボタンメニューにする処? 1481 * @og.rev 4.2.2.0 (2008/05/14) buttonRequestの付加をmakeTagMenuString()に変更 1482 * @og.rev 4.3.3.7 (2008/11/22) https対? 1483 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?画面ID単位ではなく?IMAGE_KEYパラメータで?可能にする? 1484 * 1485 * @param guiInfo GUIInfoリンク 1486 * @param bodyIn BODY部(表示) 1487 * @param type タイ? 1488 * 1489 * @return 階層別メニュー?? 1490 */ 1491 // private String makeTagMenu( final GUIInfo guiInfo, final String bodyIn, final String imgKey,final int type ) { 1492 private String makeTagMenu( final GUIInfo guiInfo, final String bodyIn, final int type ) { 1493 1494 String href = null; 1495 String tmpTarget = null; 1496 String gamenId = guiInfo.getKey(); // 5.5.2.5 (2012/05/21) イメージアイコン対? 1497 1498 if( ( guiInfo.getAddress() != null ) && ( guiInfo.getAddress().length() > 0 ) ) { 1499 String readAdrs = guiInfo.getRealAddress( "index.jsp" ); 1500 String reqParam = getRequestParameter( guiInfo.getParam() ); 1501 href = XHTMLTag.addUrlEncode( readAdrs,reqParam ); 1502 tmpTarget = guiInfo.getTarget(); 1503 1504 // 4.3.3.7 (2008/11/22) https対? 1505 // if( ! "http".equals( guiInfo.getKblink() ) ) { 1506 // if( ! readAdrs.startsWith( "http://" ) ) { 1507 if( ! readAdrs.startsWith( "http://" ) && ! readAdrs.startsWith( "https://" )) { 1508 if( type == -3 ) { 1509 tmpTarget = target; 1510 String param = getRequestParameter( guiInfo.getParam() ); 1511 href = XHTMLTag.addUrlEncode( JSP + "/result.jsp",param ); 1512 // 4.1.2.0(2008/05/14) リクエスト変数を付ける位置変更 1513 // if( buttonRequest ){ // 4.2.1.0 (2008/04/17) マトリクスからの遷移でボタン式にするかど? 1514 // href = XHTMLTag.addUrlEncode( href,"buttonRequest=" + buttonRequest ); 1515 // } 1516 } 1517 else if( type == -4 ) { // 4.2.1.0 (2008/04/01) 1518 tmpTarget = "_self"; 1519 String param = getRequestParameter( guiInfo.getParam() ); 1520 href = XHTMLTag.addUrlEncode( JSP + "/index.jsp",param ); 1521 href = XHTMLTag.addUrlEncode( href,"classify=" + guiInfo.getClassify() ); 1522 // 4.1.2.0(2008/05/14) リクエスト変数を付ける位置変更 1523 // if( buttonRequest ){ // 4.2.1.0 (2008/04/17) マトリクス?から?遷移でボタン式にするかど? 1524 // href = XHTMLTag.addUrlEncode( href,"buttonRequest=" + buttonRequest ); 1525 // } 1526 } 1527 // href = XHTMLTag.addUrlEncode( href,"GAMENID=" + guiInfo.getKey() ); 1528 href = XHTMLTag.addUrlEncode( href,"GAMENID=" + gamenId ); // 5.5.2.5 (2012/05/21) せっかくなので、利用する? 1529 1530 // 3.8.0.0 (2005/06/07) 同??ョンでのマルチ起動対策を行います? 1531 // 4.1.0.1 (2008/01/22) アドレスが[..]から始まる画面はマルチセ?ョンチェ?を行いません? 1532 // 4.1.0.1 (2008/04/01) マトリクスメニュー2はマルチセ?ョンチェ?を行いません? 1533 if( ( multiSessionCheck ) && ( !guiInfo.getAddress().startsWith( ".." ) ) && type != -4 ) { 1534 href = XHTMLTag.addUrlEncode( href,mscKey ); 1535 } 1536 } 1537 } 1538 // 5.5.2.5 (2012/05/21) イメージアイコン対?画面ID単位ではなく?IMAGE_KEYパラメータで?可能にする? 1539 // return makeTagMenuString( href,tmpTarget,bodyIn,imgKey,type ) ; 1540 String imgKey = guiInfo.getImageKey() ; 1541 return makeTagMenuString( href,tmpTarget,bodyIn,gamenId,imgKey,type ) ; 1542 } 1543 1544 /** 1545 * タイプに応じたメニューを表示する為の??を作?します? 1546 * 従来からのメソ?の引数のままで、新しい gamenId は、imgKey をそのままセ?します? 1547 * 1548 * ?:フィールドセ?メニュー 1549 * ?:トップ階層(【?類名称? 1550 * ?:選択階層(通常の折りたたみメニュー) 1551 * ?:選択非表示(通常は?してありま? 1552 * ?1:グループ?類メニュー(class="GUI_GRP"のtdタグで囲われま? 1553 * ?2:ラインメニュー([画面名称]? 1554 * ?3:マトリクスメニュー(?) 1555 * ?4:マトリクスメニュー2(?) 1556 * 1557 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?画面ID単位ではなく?IMAGE_KEYパラメータで?可能にする? 1558 * 1559 * @param href リンク 1560 * @param target ターゲ? 1561 * @param bodyIn BODY部(表示) 1562 * @param imgKey imageファイルの検索キー 1563 * @param type タイ? 1564 * 1565 * @return 階層別メニュー?? 1566 */ 1567 private String makeTagMenuString( final String href,final String target, final String bodyIn, 1568 final String imgKey,final int type ) { 1569 return makeTagMenuString( href,target,bodyIn,imgKey,imgKey,type ); // gamenId の代わりに、imgKey をセ?する? 1570 } 1571 1572 /** 1573 * タイプに応じたメニューを表示する為の??を作?します? 1574 * 1575 * ?:フィールドセ?メニュー 1576 * ?:トップ階層(【?類名称? 1577 * ?:選択階層(通常の折りたたみメニュー) 1578 * ?:選択非表示(通常は?してありま? 1579 * ?1:グループ?類メニュー(class="GUI_GRP"のtdタグで囲われま? 1580 * ?2:ラインメニュー([画面名称]? 1581 * ?3:マトリクスメニュー(?) 1582 * ?4:マトリクスメニュー2(?) 1583 * 1584 * @og.rev 4.0.0.0 (2005/01/31) 新規登録(makeTopMenu、makeSecondMenuの置き換? 1585 * @og.rev 4.0.0.0 (2007/11/28) switch??中の二重コードを統?ます? 1586 * @og.rev 4.2.1.0 (2008/04/01) ボタン形式?リンク対応?マトリクスメニュー2対? 1587 * @og.rev 4.2.2.0 (2008/05/14) buttonRequestの付加をここで行うようにする 1588 * @og.rev 4.3.5.0 (2009/02/01) switch の case で重??目をまとめます? 1589 * @og.rev 5.1.4.0 (2010/03/01) onClick,onMouseOver,onMouseOutの処??、外部のJavaScriptファイルで記述します? 1590 * @og.rev 5.1.8.0 (2010/07/01) コードリソースのキーが存在しな??合にエラーとなるバグを修正 1591 * @og.rev 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対? 1592 * @og.rev 5.4.4.4 (2012/02/15) ヘルプアイコンはimgKeyがnullでな??合?みとする 1593 * @og.rev 5.5.0.4 (2012/03/14) FAQ対? 1594 * @og.rev 5.5.2.5 (2012/05/21) イメージアイコン対?画面ID単位ではなく?IMAGE_KEYパラメータで?可能にする? 1595 * @og.rev 5.5.4.2 (2012/07/13) JSP(/gf/jsp/) ではなく?CNTX(gf)?MENU_IMG(/jsp/menuImage/) で処?るよ?変更 1596 * 1597 * @param href リンク 1598 * @param target ターゲ? 1599 * @param bodyIn BODY部(表示) 1600 * @param gamenId 画面ID/グループIDなど 1601 * @param imgKey imageファイルの検索キー 1602 * @param type タイ? 1603 * 1604 * @return 階層別メニュー?? 1605 */ 1606 private String makeTagMenuString( final String href,final String target, final String bodyIn, 1607 // final String imgKey,final int type ) { 1608 final String gamenId,final String imgKey,final int type ) { 1609 1610 final String body ; 1611 String listStyle = "<li>"; 1612 // String imgFile = fileMap.getFilename( imgKey ); 1613 String imgFile = imgFileMap.getFilename( imgKey ); // 5.5.2.5 (2012/05/21) 属?名変更 1614 // if( imgFile != null ) { 1615 if( imgFile != null ) { 1616 if( imageOnly ) { 1617 // body = "<img src=\"" + JSP + "/menuImage/" + imgFile + "\" title=\"" + bodyIn + "\" />" ; 1618 body = "<img src=\"/" + CNTX + MENU_IMG + imgFile + "\" title=\"" + bodyIn + "\" />" ; 1619 } 1620 // 5.5.2.5 (2012/05/21) -4(MATRIX Menu2)の場合??li style="list-style:url(画像URL);"> で処?る? 1621 else if( type == -4 ) { 1622 // listStyle = "<li style=\"list-style:url(" + JSP + "/menuImage/" + imgFile + ");\">" ; 1623 listStyle = "<li style=\"list-style:url(/" + CNTX + MENU_IMG + imgFile + ");\">" ; 1624 body = bodyIn ; 1625 } 1626 else { 1627 // body = "<img src=\"" + JSP + "/menuImage/" + imgFile + "\"/>" + bodyIn ; 1628 body = "<img src=\"/" + CNTX + MENU_IMG + imgFile + "\"/>" + bodyIn ; 1629 } 1630 } 1631 else { 1632 // if( imageOnly && bodyIn != null ) { 1633 if( imageOnly && bodyIn != null && bodyIn.length() > 0 ) { 1634 body = "<span title=\"" + bodyIn + "\" >" + bodyIn.charAt(0) + "</span>" ; 1635 } 1636 else { 1637 body = bodyIn ; 1638 } 1639 } 1640 1641 final String in ; 1642 if( href != null ) { 1643 TagBuffer tag = null; 1644 if( useButton ) { // 4.2.1.0 (2008/04/01) 1645 tag = new TagBuffer( "button" ); 1646 String onClick = "top."+target+".location.href=\'"+ href + "\';"; 1647 // 5.1.4.0 (2010/03/01) 1648 // if( useButtonScript ) { 1649 // onClick = onClick + "buttonClick(this);"; 1650 // tag.add( "onmouseover" , "buttonOver(this);" ); 1651 // tag.add( "onmouseout" , "buttonOut(this);" ); 1652 // } 1653 tag.add( "onclick" , onClick ); 1654 tag.add( "class" , "buttonMenu" ); // 4.2.1.0 (2008/04/03) classを追? 1655 // tag.add( "id" , imgKey ); // 4.2.1.0 (2008/04/11) idをimgKey(実質画面ID)で追? 1656 tag.add( "id" , gamenId ); // 5.5.2.5 (2012/05/21) idを本当?画面IDで設? 1657 tag.setBody( body ); 1658 } 1659 else { 1660 tag = new TagBuffer( "a" ); 1661 1662 String href2 = href; 1663 if( buttonRequest ){ // 4.2.2.0 (2008/05/14) ボタン式にする場合?リクエスト変数付加 1664 if ( excludeButton ){ //4.3.3.0 (2008/10/01) 強制プル?ン化?場合?falseで渡? 1665 href2 = XHTMLTag.addUrlEncode( href2,"buttonRequest=false"); 1666 } 1667 else{ 1668 href2 = XHTMLTag.addUrlEncode( href2,"buttonRequest=true"); 1669 } 1670 tag.add( "class" , "buttonClassify" ); 1671 } 1672 1673 tag.add( "href" , href2 ); 1674 tag.add( "target" , target ); 1675 tag.setBody( body ); 1676 } 1677 in = tag.makeTag(); 1678 } 1679 else { 1680 in = body; 1681 } 1682 1683 // final String rtn ; 1684 String rtn = null; 1685 switch( type ) { 1686 case 1: rtn = FIELD_IN + "<legend>" + in + "</legend>" ; break; // 大?? 1687 case 2: rtn = "? + in + "? ; break; // 小?類?直リンク 1688 // case 3: rtn = "? + in ; break; // 通常メニュー 1689 case 3: // 通常メニュー 1690 case 4: rtn = "? + in ; break; // ?メニュー 1691 // case -1: rtn = "<td class=\"MENU_G " + imgKey + "\">" + in + "</td>" ; break; // グループメニュー 1692 case -1: rtn = "<td class=\"MENU_G " + gamenId + "\">" + in + "</td>" ; break; // 5.5.2.5 (2012/05/21) グループメニュー 1693 case -2: rtn = "[" + in + "] "; break; // ラインメニュー 1694 // 4.3.5.0 (2009/02/01) switch の case で重??目をまとめます? 1695 // case -3: rtn = in ; break; // マトリクスメニュー 1696 //case -4: rtn = "?" + in ; break; 1697 // case -3: // マトリクスメニュー 1698 // case -4: rtn = in ; break; // 4.2.1.0 (2008/04/03) リスト?リスト?ため???な? 1699 // 5.5.2.5 (2012/05/21) listStyle の適用。type == -4 のみで適用するので?3 は、そのままセ?する? 1700 case -3: rtn = in ; break; // マトリクスメニュー 1701 case -4: rtn = listStyle + in + "</li>" ; break; // 4.2.1.0 (2008/04/03) リスト?リスト?ため???な? 1702 default : 1703 rtn = "X_" + in ; 1704 } 1705 1706 // 5.3.9.0 (2011/09/01) メニューでのヘルプアイコン対? 1707 // 5.4.4.4 (2012/02/15) imgKeyがnullの場合?処?な?existsでエラーにな? 1708 // if( imgKey != null ){ 1709 // if( type == 2 ) { 1710 //// if( helpMap != null && helpMap.exists( imgKey ) ) { 1711 // if( helpMap != null && helpMap.exists( imgKey ) ) { 1712 // rtn = rtn + makeHelpLink( imgKey ); 1713 // } 1714 // } 1715 // else if( type == -3 ) { 1716 // // boolean useHelp = ( helpMap != null && helpMap.exists( imgKey ) ); 1717 // boolean useHelp = ( (helpMap != null && helpMap.exists( imgKey )) 1718 // || (faqLinkFormat != null && faqLinkFormat.length() > 0 )); // 5.5.0.4 (2012/03/16) 1719 // if( useHelp ) { 1720 // rtn = "<table><tr><td rowspan=\"2\">" + rtn + "</td><td>" 1721 // + ( useHelp ? makeHelpLink( imgKey ) : "" ) + "</td></tr><tr><td>" 1722 // + "" + "</td></tr></table>"; 1723 // } 1724 // } 1725 // } 1726 1727 // 5.5.2.5 (2012/05/21) imgKeyではなく?gamenIdがnullの場合?処?な?変更、faqLinkFormat ?? 1728 if( gamenId != null && helpMap != null && helpMap.exists( gamenId ) ) { 1729 if( type == 2 ) { 1730 rtn = rtn + makeHelpLink( gamenId ); 1731 } 1732 else if( type == -3 ) { 1733 rtn = "<table><tr><td rowspan=\"2\">" + rtn + "</td><td>" 1734 + makeHelpLink( gamenId ) + "</td></tr><tr><td></td></tr></table>"; 1735 } 1736 } 1737 1738 return rtn ; 1739 } 1740 1741 /** 1742 * 【TAG】作?するメニューの種?NORMAL,GROUP,ONELEVEL,NEXTGUI,MATRIX,MATRIX2)を指定しま?初期値:NORMAL)? 1743 * 1744 * @og.tag 1745 * 作?するメニューには、?の種類があります? 1746 * <table border="1" frame="box" rules="all" > 1747 * <tr><th>種? </th><th>説? </th></tr> 1748 * <tr><td>NORMAL </td><td>通常の階層メニュー</td></tr> 1749 * <tr><td>GROUP </td><td>GROUPのみを取り?してリンクを作?します?(topMenuに利用)</td></tr> 1750 * <tr><td>ONELEVEL</td><td>??classify のメニューのみを取り?してリンクを作?します?(lineMenuに利用)</td></tr> 1751 * <tr><td>NEXTGUI </td><td>既存?ペ?ジの次にアクセスされる画面郡のリンクを作?します?</td></tr> 1752 * <tr><td>MATRIX </td><td>?表形式?メニューを作?します?(大?付きマルチメニュー)</td></tr> 1753 * <tr><td>MATRIX2 </td><td>?表形式?メニューを作?します?(大?なし?タンメニュー)</td></tr> 1754 * </table> 1755 * 1756 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1757 * @og.rev 5.2.3.0 (2010/12/01) NEXTGUI 追? 1758 * 1759 * @param type メニューの種?NORMAL,GROUP,ONELEVEL,NEXTGUI,MATRIX,MATRIX2) 1760 */ 1761 public void setMenuType( final String type ) { 1762 menuType = nval( getRequestParameter( type ),MENU_TYPE[0] ); 1763 if( ! check( menuType, MENU_TYPE ) ) { 1764 String errMsg = "menuType に、指定できな?類??が?されました。menuType=[" 1765 + menuType + "]" + HybsSystem.CR 1766 + "以下?中から?択してください?" 1767 + StringUtil.array2csv( MENU_TYPE ) + "]" + HybsSystem.CR; 1768 throw new HybsSystemException( errMsg ); 1769 } 1770 } 1771 1772 /** 1773 * 【TAG】折り返しメニューを構築するかど?を指定しま?初期値:true)? 1774 * 1775 * @og.tag 1776 * trueを設定すると、JavaScriptによる折り返しメニューを構築します? 1777 * false の場合???常のHTMLのみで?層メニューを構築します? 1778 * 初期値は、true(折り返しメニュー)です? 1779 * 1780 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1781 * 1782 * @param flag 折り返しメニューかど? 1783 */ 1784 public void setExpand( final String flag ) { 1785 expand = nval( getRequestParameter( flag ),expand ); 1786 } 1787 1788 /** 1789 * 【TAG】表示対象となるグループをカンマ区???で?します? 1790 * 1791 * @og.tag 1792 * メニューの表示対象グループをカンマ区???で??できます? 1793 * ??グループ?メニュー?が?表示対象になります? 1794 * メニューにも??のグループを?できるため?グループ??で? 1795 * ?のくくりを表示することも可能です? 1796 * グループを?しな??合?、?グループが対象になります? 1797 * また?メニュー側にグループ指定がな??合?、グループ指定に 1798 * 関係なく?対象になります? 1799 * 初期値は、未??全メニューが対象)です? 1800 * ?方法???常のパラメータ取得後に、CSV?します? 1801 * 1802 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1803 * 1804 * @param menuGroups 表示対象となるグルー?カンマ区???) 1805 */ 1806 public void setGroups( final String menuGroups ) { 1807 groups = StringUtil.csv2Array( getRequestParameter( menuGroups ) ); 1808 if( groups.length == 0 ) { groups = null; } 1809 } 1810 1811 /** 1812 * 【TAG】表示対象となる??classify)を指定します? 1813 * 1814 * @og.tag 1815 * メニューの表示対象となる??classify)を指定することで、?とまり? 1816 * メニューを作?します?これは?段階メニューの?メニューを求める?合に 1817 * ?します? 1818 * ?メニューは、画面上部に設ける予定?メニューで、上下フレー??割での 1819 * 運用時に使用します? 1820 * ???がな??合?、すべてが表示対象になります? 1821 * 初期値は、未??全メニューが対象)です? 1822 * 1823 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1824 * 1825 * @param classify 表示対象となる??classify) 1826 */ 1827 public void setClassify( final String classify ) { 1828 selClassify = nval( getRequestParameter( classify ),selClassify ); 1829 } 1830 1831 /** 1832 * 【TAG】グループメニューの表示対象となるソース?href)を指定しま?初期値:menu.jsp)? 1833 * 1834 * @og.tag 1835 * GROUPメニューの表示対象となるソース?href)を指定することで? 1836 * サブメニューを???身のフレー?対して割り当てる?か?フレー??て 1837 * 管?る?かを自由に設定できます? 1838 * 初期値は、menu.jspです? 1839 * 1840 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1841 * 1842 * @param inHref 表示対象となるソース?href) 1843 */ 1844 public void setHref( final String inHref ) { 1845 href = nval( getRequestParameter( inHref ),href ); 1846 } 1847 1848 /** 1849 * 【TAG】グループメニューの表示対象となるフレー?(target)を指定しま?初期値:MENU)? 1850 * 1851 * @og.tag 1852 * GROUPメニューの表示対象となるフレー?(target)を指定することで? 1853 * サブメニューを???身のフレー?対して割り当てる?か?フレー??て 1854 * 管?る?かを自由に設定できます? 1855 * フレー??割を行うと、変更?は、サブメニューのみになる為、動きに無? 1856 * なくなりますが、グループメニューの大きさが固定されてしま?す? 1857 * 自??身にすると、グループメニューとサブメニューを?のフレー? 1858 * 入れることで、更新時?画面のちらつき?発生しますが、無?スペ?スは 1859 * 省くことが可能になります? 1860 * 初期値は、MENU(通常のメニューフレー?です? 1861 * 1862 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1863 * 1864 * @param inTarget 表示対象となるフレー?(target) 1865 */ 1866 public void setTarget( final String inTarget ) { 1867 target = nval( getRequestParameter( inTarget ),target ); 1868 } 1869 1870 /** 1871 * 【TAG】グループメニューの表示に、画像?みかど?[true:画像?み/false:画像+ラベル]を指定しま?初期値:false)? 1872 * 1873 * @og.tag 1874 * GROUPメニューの表示対象として、jsp/menuImage 以下に グループ名と同?? 1875 * 画像ファイルが存在する場合?、画像を使用します? 1876 * こ?フラグを?true に設定すると、画像?みを使用します? 1877 * false の場合?、画像+グループ名のラベルを使用します? 1878 * 画像?みの場合でも?title 属?にグループ名のラベルをセ?します?で? 1879 * マウスカーソルをオーバ?すれば、名称がTips表示されます? 1880 * 画像が存在しな??合に、true(画像?み)に設定した?合?、ラベルの??の?文? 1881 * のみを?力します? 1882 * 初期値は、false(画像+ラベル)です? 1883 * 1884 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1885 * 1886 * @param flag [true:画像?み/false:画像+ラベル] 1887 */ 1888 public void setImageOnly( final String flag ) { 1889 imageOnly = nval( getRequestParameter( flag ),imageOnly ); 1890 } 1891 1892 /** 1893 * 【TAG】グループメニューの表示対象となるメニューを横並びさせる数を指定します? 1894 * 1895 * @og.tag 1896 * GROUPメニューなどの表示を行う場合に、横方向に何?のメニューを表示させるか? 1897 * ?します?例えば、画像?みのリンクと?合わせれば、より?多くのグループを 1898 * 横方向に並べることで、小?域に多くの??を詰めることが可能になります? 1899 * 0 を設定すると、横方向にのみ並べ?折り返さな?メニューを作ること? 1900 * 可能になります? 1901 * 初期値は、無制限です? 1902 * 1903 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1904 * 1905 * @param count メニューを横並びさせる数 1906 */ 1907 public void setSideCount( final String count ) { 1908 sideCount = nval( getRequestParameter( count ),sideCount ); 1909 } 1910 1911 /** 1912 * 【TAG】表形式メニュー(MATRIX)の?のセルに含まれる?行数を指定しま?初期値:8)? 1913 * 1914 * @og.tag 1915 * 表形式メニュー(MATRIX)では、?のセルの高さを同?する為?lt;br />タグを挿入します? 1916 * こ?タグの挿入する個数を指定します? 1917 * こ?個数?、メニューの数があろうとなかろ?行を確保します? 1918 * ??値が?実際の行数より少な??合?、実際の行数?け拡張されます? 1919 * 初期値は? です? 1920 * 1921 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1922 * 1923 * @param count セルに含まれる?行数 1924 * @see #setMaxCellCount( String ) 1925 */ 1926 public void setMinCellCount( final String count ) { 1927 minCellCount = nval( getRequestParameter( count ),minCellCount ); 1928 } 1929 1930 /** 1931 * 【TAG】表形式メニュー(MATRIX)の?のセルに含まれる?行数を指定しま?初期値:8)? 1932 * 1933 * @og.tag 1934 * 表形式メニュー(MATRIX)では、?のセルの高さを同?する為、指定?行数で 1935 * 新たな セルを作?して、セルを横方向に連結します? 1936 * 初期値は? です? 1937 * 1938 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1939 * 1940 * @param count セルに含まれる?行数 1941 * @see #setMinCellCount( String ) 1942 */ 1943 public void setMaxCellCount( final String count ) { 1944 maxCellCount = nval( getRequestParameter( count ),maxCellCount ); 1945 } 1946 1947 /** 1948 * 【TAG】グループメニューのキャ?ュを使用するかど?[true/false]を指定しま?初期値:true)? 1949 * 1950 * @og.tag 1951 * GROUPメニューの表示は、?作?すると、ほとんど書き換えることがありません? 1952 * 作?は、使用できる全メニューをスキャンして、その中からグループ属?をピ?ア?? 1953 * すると?処?行って?為、?らかに無?処?す? 1954 * そこで、jsp/index.jsp が実行された場合?みキャ?ュをクリアして、?部では 1955 * キャ?ュがなければ作?し?あればキャ?ュを使?ジ?になって?す? 1956 * ここでは、キャ?ュを使用するのか?毎回作?しなおすのかを?します? 1957 * 対象として、jsp/menuImage 以下に グループ名と同?? 1958 * 画像ファイルが存在する場合?、画像を使用します? 1959 * こ?フラグを?true に設定すると、画像?みを使用します? 1960 * false の場合?、画像+グループ名のラベルを使用します? 1961 * 画像?みの場合でも?title 属?にグループ名のラベルをセ?します?で? 1962 * マウスカーソルをオーバ?すれば、名称がTips表示されます? 1963 * 画像が存在しな??合?、たとえ?true(画像?み)に設定しても?ラベルを?力します? 1964 * 初期値は、true(キャ?ュする)です? 1965 * 1966 * @og.rev 4.0.0.0 (2005/01/31) 新規登録 1967 * 1968 * @param flag [true:キャ?ュする/false:キャ?ュしない] 1969 */ 1970 public void setCache( final String flag ) { 1971 cache = nval( getRequestParameter( flag ),cache ); 1972 } 1973 1974 /** 1975 * 【TAG】正判?マッチする?合に、メニューに出?条件を設定します? 1976 * 1977 * @og.tag 1978 * メニューを表示する/しな??判定を、画面IDのマッチングで判断します? 1979 * これは、正規表現で表される引数と、画面IDが??する場合に? 1980 * メニューを表示させます? 1981 * マッチしな??合?、表示されません? 1982 * 何も?しな??合?、ロールの判定みの行われます? 1983 * 1984 * @param mt 正判?マッチする?合に、メニューに出?条件 1985 */ 1986 public void setMatch( final String mt ) { 1987 match = nval( getRequestParameter( mt ),match ); 1988 } 1989 1990 /** 1991 * 【TAG】?判?マッチする?合に、メニューに出さな?条件を設定します? 1992 * 1993 * @og.tag 1994 * メニューを表示する/しな??判定を、画面IDのマッチングで判断します? 1995 * これは、正規表現で表される引数と、画面IDが??する場合に? 1996 * メニューを表示させません? 1997 * マッチしな??合?、表示されます? 1998 * 何も?しな??合?、ロールの判定みの行われます? 1999 * 2000 * @param umt ??マッチする?合に、メニューに出さな?条件 2001 */ 2002 public void setUnmatch( final String umt ) { 2003 unmatch = nval( getRequestParameter( umt ),unmatch ); 2004 } 2005 2006 /** 2007 * 【TAG】画面リンクにボタンを使用するかど?[true/false]を指定しま?初期値:false)? 2008 * 2009 * @og.tag 2010 * 画面リンクを?タンリンク形式で表示するかを?します? 2011 * falseの場合???常のリンクになります? 2012 * 初期値は、false(通常リンク)です? 2013 * 2014 * @og.rev 4.2.1.0 (2008/04/01) 新規登録 2015 * 2016 * @param flag [true:ボタン形式リンク/false:通常リンク] 2017 */ 2018 public void setUseButton( final String flag ) { 2019 useButton = nval( getRequestParameter( flag ),useButton ); 2020 } 2021 2022 /** 2023 * 【?】?タンリンクを使用した場合に、JavaScriptのイベントを発生させるかど?[true/false]を指定しま?初期値:false)? 2024 * 2025 * @og.tag 2026 * (こ?属?は、?されて?? 2027 * ボタンリンクを使用した場合に、JavaScriptのイベントを発生させるかを?します? 2028 * 発生するイベント及び呼ばれる関数は以下?3つです? 2029 * ?リ??-> buttonClick(this) 2030 * ②マウスオーバ??-> buttonOver(this) 2031 * ③カーソルアウト時 -> buttonOut(this) 2032 * 初期値は、false(JavaScriptイベントを発生しな?です? 2033 * 2034 * @og.rev 4.2.1.0 (2008/04/01) 新規登録 2035 * @og.rev 5.1.4.0 (2010/03/01) ? 2036 * 2037 * @param flag [true:ボタン形式リンク/false:通常リンク] 2038 */ 2039 public void setUseButtonScript( final String flag ) { 2040 // useButtonScript = nval( getRequestParameter( flag ),useButtonScript ); 2041 } 2042 2043 /** 2044 * 【TAG】?トリクスからの遷移先でボタンメニュー表示するかど?[true/false]を指定しま?初期値:false)? 2045 * 2046 * @og.tag 2047 * マトリクスメニューからの遷移先でボタンメニューを表示させるために 2048 * アドレスに付加するリクエスト変数を指定します? 2049 * trueにするとbuttonRequest=trueのリクエスト変数を付けます? 2050 * falseの場合?リクエスト変数を付けません? 2051 * 初期値は、false(プル?ン形式で表示)です? 2052 * 2053 * @og.rev 4.2.1.0 (2008/04/17) 新規登録 2054 * 2055 * @param flag [true:ボタン形?false:通常形式] 2056 */ 2057 public void setButtonRequest( final String flag ) { 2058 buttonRequest = nval( getRequestParameter( flag ),buttonRequest ); 2059 } 2060 2061 /** 2062 * 【TAG】標準画面を?期状態で表示するかど?[true/false]を指定しま?初期値:false)? 2063 * 2064 * @og.tag 2065 * 通常expand=trueの状態では、メニューが折りたたまれて?す? 2066 * こ?inlineStyle属?をtrueにすると標準画面のスタイルにdisplay:inline? 2067 * 付加する事で、?期状態でメニューが開?状態になります? 2068 * expand=falseとの違いは?しメニュー及???折りたたみ機?が利用できる事です? 2069 * 初期値は、false(折りたたまれた状?です? 2070 * 2071 * @og.rev 4.3.3.0 (2008/10/01) 新? 2072 * 2073 * @param flag [true:ボタン形?false:通常形式] 2074 */ 2075 public void setInlineStyle( final String flag ) { 2076 inlineStyle = nval( getRequestParameter( flag ),inlineStyle ); 2077 } 2078 2079 /** 2080 * 【TAG】ONELEVEL,NEXTGUI で、DIVタグ?design-onelevel 処?するかど?[true/false]を指定しま?初期値:false)? 2081 * 2082 * @og.tag 2083 * ONELEVEL,NEXTGUI は、QUERY 画面の上部に表示される簡易メニューです? 2084 * こ?表記?、[画面リンク] 形式??スト表示されて?すが、画面名称を固定長にするなどの処?入れるため? 2085 * DIVでフォーマットします? 2086 * 作りは、?力される HTML を確認いただきた?思います? 2087 * 全体を?lt;div id="design-onelevel" > で、囲??画面名称は?lt;span clas="design-onelevel" > で、囲?す? 2088 * これを?標準CSSで、固定?背景色、リンクの?色など書き換えて、体裁を整えます? 2089 * 初期値は、false(従来と同じ)です? 2090 * 2091 * @og.rev 5.5.2.3 (2012/05/15) 新規追? 2092 * 2093 * @param flag [true:DIVタグ処?する/false:しない] 2094 */ 2095 public void setUseDivOneLevel( final String flag ) { 2096 useDivOneLevel = nval( getRequestParameter( flag ),useDivOneLevel ); 2097 } 2098 2099 /** 2100 * シリアライズ用のカスタ?リアライズ書き込みメソ? 2101 * 2102 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 2103 * @serialData 2104 * 2105 * @param strm ObjectOutputStreamオブジェク? 2106 */ 2107 private void writeObject( final ObjectOutputStream strm ) throws IOException { 2108 strm.defaultWriteObject(); 2109 } 2110 2111 /** 2112 * シリアライズ用のカスタ?リアライズ読み込みメソ? 2113 * 2114 * ここでは、transient 宣?れた?変数の??初期化が?なフィールド?み設定します? 2115 * 2116 * @og.rev 4.0.0.0 (2006/09/31) 新規追? 2117 * @serialData 2118 * 2119 * @param strm ObjectInputStreamオブジェク? 2120 * @see #release2() 2121 */ 2122 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 2123 strm.defaultReadObject(); 2124 } 2125 2126 /** 2127 * 画面オブジェクト?より、指定されたイン?クスより後に実体となる画面ID 2128 * (直リンク??常メニュー?しメニュー※改行メニューは除?が存在するかを判定します? 2129 * グループスが指定されて?場合?、グループで絞り込まれた結果に対して判定を行います? 2130 * 2131 * @og.rev 4.0.0.0 (2007/10/30) 新規追? 2132 * 2133 * @param guiInfos 画面オブジェクト? 2134 * @param idx 検索を開始するイン?クス番号 2135 * 2136 * @return 0:実体画面が存在せず 1:全て?の??2:実体画面 or 通常画面を含??? 2137 */ 2138 private int guiCheck( final GUIInfo[] guiInfos, final int idx ) { 2139 int flg = 0; 2140 2141 // 実?探? 2142 if( levelCheck( guiInfos[idx] ) > 0 ) { 2143 // グループメニューリンク時?処? 2144 if( groups == null ) { flg = 2; } 2145 else { flg = groupCheck( guiInfos[idx] ) ? 2 : 0; } 2146 } 2147 else { 2148 for( int j=idx+1; j<guiInfos.length; j++ ) { 2149 if( !guiInfos[j].isRead() ) { continue; } 2150 if( flg > 1 || ( guiInfos[j].getLevel() <= guiInfos[idx].getLevel() ) ) { break; } 2151 2152 if( groups == null || groupCheck( guiInfos[j] ) ) { 2153 if( levelCheck( guiInfos[j] ) > 0 ) { 2154 flg = levelCheck( guiInfos[j] ); 2155 } 2156 } 2157 } 2158 } 2159 2160 return flg; 2161 } 2162 2163 /** 2164 * ?された画面IDが実体である?直リンク??常メニュー?しメニュー※改行メニューは除?を判定します? 2165 * 2166 * @og.rev 4.0.0.0 (2007/10/30) 新規追? 2167 * @og.rev 4.0.0.0 (2007/11/30) switch に default 追? 2168 * 2169 * @param guiInfo 画面オブジェク? 2170 * 2171 * @return 0:??1:実体画面(?) 2:実体画面(通常) or 直リンク 2172 */ 2173 private int levelCheck( final GUIInfo guiInfo ) { 2174 int flg = 0; 2175 2176 switch ( guiInfo.getLevel() ) { 2177 case 2: 2178 // if( guiInfo.getAddress() != null && guiInfo.getAddress().length() > 0 ) { 2179 String adrs = guiInfo.getAddress(); 2180 if( adrs != null && adrs.length() > 0 ) { 2181 flg = 2; 2182 } 2183 break; 2184 case 3: 2185 // flg = !"HYBS_BR".equals( guiInfo.getKey() ) ? 2 : flg; break; 2186 flg = "HYBS_BR".equals( guiInfo.getKey() ) ? flg : 2; break; 2187 case 4: 2188 // flg = !"HYBS_BR".equals( guiInfo.getKey() ) ? 1 : flg; break; 2189 flg = "HYBS_BR".equals( guiInfo.getKey() ) ? flg : 1; break; 2190 default : 2191 flg = 0; break; 2192 } 2193 2194 return flg; 2195 } 2196 2197 /** 2198 * ?された画面IDが設定されたグループスに含まれるかを判定します? 2199 * 2200 * @og.rev 4.0.0.0 (2007/10/30) 新規追? 2201 * 2202 * @param guiInfo 画面オブジェク? 2203 * 2204 * @return グループスに含まれるかど? 2205 */ 2206 private boolean groupCheck( final GUIInfo guiInfo ) { 2207 boolean flg = false; 2208 2209 for( int k=0; k<groups.length; k++ ) { 2210 if( guiInfo.isGroupIn( groups[k] ) ) { 2211 flg = true; 2212 break; 2213 } 2214 } 2215 2216 return flg; 2217 } 2218 2219 /** 2220 * ヘルプリンク??を生成します? 2221 * 2222 * @og.rev 5.3.9.0 (2011/09/01) 新規作? 2223 * @og.rev 5.0.0.4 (2012/03/16) FAQ対? 2224 * @og.rev 5.5.2.5 (2012/05/21) FAQ対?? 2225 * 2226 * @param key 画面ID 2227 * 2228 * @return ヘルプリンク?? 2229 */ 2230 private String makeHelpLink( final String key ) { 2231 String rtn = ""; 2232 String filename = helpMap.getFilename( key ); 2233 if( filename != null ) { 2234 rtn = helpLinkFormat.replace( "{FILENAME}", filename ); 2235 } 2236 // if(true){ 2237 // 5.5.2.5 (2012/05/21) ? 2238 // if( faqLinkFormat != null && key != null ){ 2239 // rtn += faqLinkFormat.replace( "{GUIKEY}", key ); 2240 // } 2241 return rtn; 2242 } 2243 2244 /** 2245 * こ?オブジェクト???表現を返します? 2246 * 基本???目?使用します? 2247 * 2248 * @return こ?クラスの??表現 2249 */ 2250 @Override 2251 public String toString() { 2252 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 2253 .println( "VERSION" ,VERSION ) 2254 .println( "menuType" ,menuType ) 2255 .println( "expand" ,expand ) 2256 .println( "groups" ,groups ) 2257 .println( "selClassify" ,selClassify ) 2258 .println( "href" ,href ) 2259 .println( "target" ,target ) 2260 .println( "imageOnly" ,imageOnly ) 2261 .println( "sideCount" ,sideCount ) 2262 .println( "minCellCount" ,minCellCount ) 2263 .println( "maxCellCount" ,maxCellCount ) 2264 .println( "cache" ,cache ) 2265 .println( "mscKey" ,mscKey ) 2266 .println( "multiSessionCheck" ,multiSessionCheck ) 2267 .println( "useButton" ,useButton ) 2268 // .println( "useButtonScript" ,useButtonScript ) 2269 .println( "buttonRequest" ,buttonRequest ) 2270 .println( "MENU_TYPE" ,MENU_TYPE ) 2271 .println( "Other..." ,getAttributes().getAttribute() ) 2272 .fixForm().toString() ; 2273 } 2274 }