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) リアルアドレス設定時に、{&#064;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             * これは、セルに入れる &lt;br /&gt; の個数を指定することと同じです?
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 += "&amp;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 += "&amp;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 /&gt;タグを挿入します?
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" &gt; で、囲??画面名称は?lt;span clas="design-onelevel" &gt; で、囲?す?
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    }