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