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