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 static org.opengion.fukurou.util.StringUtil.nval;
019    
020    import java.io.IOException;
021    import java.io.ObjectInputStream;
022    import java.io.ObjectOutputStream;
023    import java.util.ArrayList;
024    import java.util.List;
025    import java.util.Locale;
026    
027    import org.opengion.fukurou.util.StringUtil;
028    import org.opengion.fukurou.util.TagBuffer;
029    import org.opengion.fukurou.util.XHTMLTag;
030    import org.opengion.hayabusa.common.HybsSystem;
031    import org.opengion.hayabusa.common.HybsSystemException;
032    import org.opengion.hayabusa.db.DBTableModel;
033    import org.opengion.hayabusa.db.DBTableModelUtil;
034    
035    /** タブ形å¼ã?リンクを表示ã™ã‚‹ã‚¿ã‚°ã§ã™ã?
036     *
037     * ã“ã?ã‚¿ã‚°å½¢å¼ã?実æ?ã¯ã€ãƒªãƒ³ã‚¯ã®ãƒªã‚¹ãƒˆã§ã‚ã‚‹ãŸã‚ã€å®Ÿã?ç”»é¢ã®è¡¨ç¤ºã¯ã‚¿ãƒ¼ã‚²ãƒ?ƒˆã‚’指定ã—ã¦
038     * 別フレーãƒ?§è¡Œã†å¿?¦ãŒã‚りã¾ã™ã?
039     *
040     * タブã?æŒ?®šæ–¹æ³•ã«ã¤ã?¦ã¯ã€listType属æ?ã®æŒ?®šã«ã‚ˆã‚Šã€ã‚¯ã‚¨ãƒªç™ºè¡?DB)ã«ã‚ˆã‚Šå‹•çš„ã«ç”Ÿæ?ã™ã‚‹
041     * パターンã¨ã€ã‚¿ã‚°æŒ?®?TAG)ã«ã‚ˆã‚Šã€?™çš?«ç”Ÿæ?ã™ã‚‹ãƒ‘ターンãŒã‚りã¾ã™ã?
042     * listType属æ?ã«ä½•ã‚‚æŒ?®šã•れã¦ã?ªã??åˆã?ã€Body部åˆ?«è¨˜è¿°ã•れãŸå?容ã«ã‚ˆã‚Šã€è?動判定ã•れã¾ã™ã?
043     * ("SELECT"ã§å§‹ã¾ã£ã¦ã?‚‹å ´åˆã?DBã€ãれ以外ã?TAGã¨ã—ã¦å‡¦ç?
044     *
045     * â‘?istType属æ?ã?DB"ã®å ´å?
046     *  検索ã•れãŸå„カラãƒ??ã€ãã®é ?•ªã«ã‚ˆã‚Šæ¬¡ã®æ„味をæŒã¡ã¾ã™ã?
047     *  [第1カラãƒ? タブã?åå‰        : リンク時ã?キーæƒ??ã€å¾Œè¿°ã®openTabName属æ?ã®ã‚­ãƒ¼ã¨ã—ã¦ã‚‚使用 ※å¿??
048     *  [第2カラãƒ? タブã?表示åç§°    : タブã?表示åç§° æŒ?®šãŒãªã??åˆã?ã€ç¬¬1カラãƒ?Œè¡¨ç¤ºåç§°ã¨ãªã‚Šã¾ã™ã?
049     *  [第3カラãƒ? タブã?リンクå…?RL : タブã?リンクå…?RL æŒ?®šãŒãªã??åˆã?ã€href属æ?ã®å€¤ãŒé©ç”¨ã•れã¾ã™ã?
050     *  [第4カラãƒ? タブã?クラス属æ?  : 個別ã®ã‚¿ãƒ–ã«ä»˜åŠ ã•れるクラス属æ? æŒ?®šãŒãªã??åˆã?ã€unselClass属æ?ã®å€¤ãŒé©ç”¨ã•れã¾ã™ã?
051     *  [第5カラãƒ? タブã?ロールズ    : タブã?ロールズを指定ã—ã¾ã™ã?ユーザーロールズã¨ä¸??ã—ãªã?Œ‡å®šã—ãŸå?åˆã?ã€ã‚¿ãƒ–ãŒè¡¨ç¤ºã•れãªããªã‚Šã¾ã™ã?
052     *  [第6カラãƒ? タブã?é¸æŠžå¯å¦    : タブã?é¸æŠžå¯å¦ã‚?true'or'false'ã§æŒ?®šã—ã¾ã™ã?falseを指定ã—ãŸå?åˆã?ã€ã‚¿ãƒ–ãŒè¡¨ç¤ºã•れãªããªã‚Šã¾ã™ã?
053     *                                  (ロールズã§é¸æŠžä¸å¯ã«ãªã£ã¦ã?‚‹å ´åˆã?ã€ã“ã®å€¤ã¯ç„¡è¦–ã•れã¾ã?
054     *  å?‚«ãƒ©ãƒ??値ã¯[カラãƒ?]=[値]ã®å½¢ã§ã€ãƒªãƒ³ã‚¯å…ˆã?JSPã«å¼•æ•°ã¨ã—ã¦æ¸¡ã•れã¾ã™ã?
055     *  ã¾ãŸã?リンク先ã?JSPã«ã¤ã?¦ã¯ã€href属æ?ã§æŒ?®šã—ã¾ã™ã?
056     *
057     * â‘¡listType属æ?ã?TAG"ã®å ´å?
058     *  tabListタグを記述ã—ã?個別ã«ã‚¿ãƒ–を定義ã—ã¾ã™ã?
059     *  制御å¯èƒ½ãªé ?›®ã¯ã€â‘ DBã®å ´åˆã¨åŒç­‰ã§ã™ã?
060     *  タブã?åå‰ã‚’定義ã™ã‚‹name属æ?ã¯ã€tabListã‚¿ã‚°ã§å¿?šå®šç¾©ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
061     *  lbl属æ?ãŒæŒ‡å®šã•れã¦ã?ªã??åˆã?ã€name属æ?ã®ãƒ©ãƒ™ãƒ«åç§°ã‚’å–å¾—ã—ã¾ã™ã?
062     *  タブã?リンクå…?SPåŠã?ã€ã‚¯ãƒ©ã‚¹å±žæ?ã«ã¤ã?¦ã¯ã€tabListã‚¿ã‚°ã§æŒ?®šãŒãªã??åˆã?tabListã‚¿ã‚°ã®å€¤ãŒé©ç”¨ã•れã¾ã™ã?
063     *
064     * [共通設定]
065     * åˆæœŸè¨­å®šã§ã¯ã€ç¬¬1番目ã®"有効ãª"タブãŒè‡ªå‹•çš„ã«é–‹ã‹ã‚Œã¾ã™ã?(="true")
066     * å?‚¿ãƒ–ã?表示方法ã§ã€?¸æŠžä¸å¯èƒ½ãªã‚¿ãƒ–ãŒå­˜åœ¨ã—ã¦ã?‚‹å ´åˆã?ã€ãれらを読ã¿é£›ã?ã—ãŸä¸Šã§ã€?有効ãª"タブを
067     * 検索ã—ã¾ã™ã?
068     * ã¾ãŸã?自動ã§é–‹ãタブã?ã€openTabName属æ?ã§æŒ?®šå¯èƒ½ã§ã‚りã€ã“れã«å¤‰æ•°ã‚’定義ã™ã‚‹ã“ã¨ã§ã€?
069     * ç”»é¢ãƒªãƒ­ãƒ¼ãƒ‰æ™‚ã‚‚ã?é–‹ã„ã¦ã?Ÿã‚¿ãƒ–ã‚’å†åº¦é¸æŠžã•れãŸçŠ¶æ…‹ã§è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
070     *
071     * é¸æŠžã—ãŸã‚¿ãƒ–åŠã³éžé¸æŠžã?タブã?æž?·šã‚„ã€èƒŒæ™¯è‰²ç­‰ã‚’変更ã™ã‚‹å ´åˆã?ã€custom.cssã§ã‚¯ãƒ©ã‚¹ã‚’定義ã—ã?
072     * 変更ã—ã¦ä¸‹ã•ã??
073     *
074     * タブã?表示方å?水平方å?or 垂直方å?ã«ã¤ã?¦ã¯ã€orientation属æ?ã§å¤‰æ›´ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
075     * (åˆæœŸå€¤ã¯ã€æ°´å¹³æ–¹å?
076     * 水平方å‘ã«ã—ãŸå ´åˆã?ã€listCount属æ?ã«ã‚ˆã‚Šå¼·åˆ¶çš?«ä¸?®šæ•°ã®ã‚¿ãƒ–を表示ã™ã‚‹æ¯Žã«ã€æ”¹è¡Œã‚’挿入ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
077     *
078     * ã“ã?タグを使用ã™ã‚‹å ´åˆã?ã€headã‚¿ã‚°ã§å¿?šuseTabLink="true"を指定ã—ã¦JavaScriptをロードã—ã¦ä¸‹ã•ã??
079     *
080     * å?±žæ?ã¯ã€{@XXXX} 変数ãŒä½¿ç”¨ã§ãã¾ã™ã?
081     * ã“れã¯ã€ServletRequest ã‹ã‚‰ã€XXXX をキーã«å€¤ã‚’å–りå?ã?ã“ã?変数ã«å‰²ã‚Šå½“ã¦ã¾ã™ã?
082     * ã¤ã¾ã‚Šã?ã“ã?XXXXをキーã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã™ã‚Œã?ã€ã“ã®å¤‰æ•°ã«å€¤ã‚’ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
083     *
084     * @og.formSample
085     * â—å½¢å¼ï¼?lt;og:tabLink href="…" … />
086     * â—body?šã‚ã‚?
087     *
088     * â—Tag定義??
089     *   <og:tabLink
090     *       listType           ã€TAG】タブã?ä¸?¦§ã‚’ã©ã“ã‹ã‚‰å–å¾—ã™ã‚‹ã‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:AUTO)
091     *       href               ã€TAG】リンク先ã?JSPを指定ã—ã¾ã?åˆæœŸå€¤:result.jsp)
092     *       target             ã€TAG】リンクã®ã‚¿ãƒ¼ã‚²ãƒ?ƒˆã‚’指定ã—ã¾ã?åˆæœŸå€¤:RESULT)
093     *       openTab            ã€TAG】リンク表示ã«ã‚¿ãƒ–リンクをè?å‹•ã§é–‹ãã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true[=é–‹ã])
094     *       openTabName        ã€TAG】最åˆã«é–‹ãタブリンクã®åå‰ã‚’指定ã—ã¾ã?
095     *       constKeys          ã€TAG】次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®ã‚­ãƒ¼ã‚’指定ã—ã¾ã?
096     *       constVals          ã€TAG】次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®å€¤ã‚’指定ã—ã¾ã?
097     *       listCount          ã€TAGã€?行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?数を指定ã—ã¾ã?åˆæœŸå€¤:10)
098     *       selClass           ã€TAGã€‘é¸æŠžã‚¿ãƒ–ã?クラスを指定ã—ã¾ã?åˆæœŸå€¤:selTab)
099     *       unselClass         ã€TAG】éžé¸æŠžã‚¿ãƒ–ã?クラスを指定ã—ã¾ã?åˆæœŸå€¤:unselTab)
100     *       orientation        ã€TAG】タブã?æ–¹å‘ã?横åž?Horizontal)ã‹ç¸¦åž?Vertical)を指定ã—ã¾ã?åˆæœŸå€¤:横åž?
101     *       width              ã€TAG】タブリンクã®å¹?‚’ % ã€px ã€ã¾ãŸã? "auto" ã§æŒ?®šã—ã¾ã?
102     *       height             ã€TAG】タブã?高ã•ã‚’ã?% ã€px ã€ã¾ãŸã? "auto" ã§æŒ?®šã—ã¾ã?
103     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
104     *   >   ... Body ...
105     *   </og:tabLink>
106     *
107     * â—使用ä¾?
108     *   â‘?Bã‹ã‚‰ã‚¿ãƒ–リストをå–å¾—ã™ã‚‹å?å?
109     *
110     *    Body部åˆ?«è¨˜è¿°ã•れãŸã‚¯ã‚¨ãƒªã‚ˆã‚Šã‚¿ãƒ–ä¸?¦§ã‚’生æˆã—ã¾ã™ã?
111     *
112     *      <og:tabLink
113     *          listType        = "DB"                      タブã?ä¸?¦§ã‚’ã©ã“ã‹ã‚‰å–å¾—ã™ã‚‹ã‹
114     *          href            = "result.jsp"              リンク先ã?JSP
115     *          target          = "RESULT"                  リンクターゲãƒ?ƒˆ
116     *          openTab         = "[true/false]"            タブ表示後ã«ã‚¿ãƒ–を自動ã§é–‹ã
117     *          openTabName     = "{@PN}               自動ã§é–‹ãタブã?åå‰
118     *          constKeys       = "KEY1"                    次画é¢ã«å›ºå®šã§æ¸¡ã™ã‚­ãƒ¼ä¸?¦§
119     *          constVals       = "{@VAL1}"            次画é¢ã«å›ºå®šã§æ¸¡ã™å?ä¸?¦§
120     *          listCount       = "10"                      1行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?æ•°
121     *          selClass        = "selTab"                  é¸æŠžã‚¿ãƒ–ã?クラス
122     *          unselClass      = "unselTab"                éžé¸æŠžã‚¿ãƒ–ã?クラス
123     *          width           = "100px"                   タブリンクã®å¹?
124     *          height          = "50px"                    タブリンクã®é«˜ã•
125     *       >
126     *               select PN,HINM,'tabClass','query.jsp','ADMIN','false' from XX01 where PN = '{@PN}' order by PN
127     *      </og:tabLink>
128     *
129     *   â‘¡tabListã‚¿ã‚°ã‹ã‚‰ã‚¿ãƒ–リストを生æ?ã™ã‚‹å ´å?
130     *
131     *    tabListタグよりタブä¸?¦§ã‚’生æˆã—ã¾ã™ã?
132     *
133     *      <og:tabLink
134     *          listType        = "DB"                      タブã?ä¸?¦§ã‚’ã©ã“ã‹ã‚‰å–å¾—ã™ã‚‹ã‹
135     *          href            = "result.jsp"              リンク先ã?JSP
136     *          target          = "RESULT"                  リンクターゲãƒ?ƒˆ
137     *          openTab         = "[true/false]"            タブ表示後ã«ã‚¿ãƒ–を自動ã§é–‹ã
138     *          openTabName     = "{@PN}               自動ã§é–‹ãタブã?åå‰
139     *          constKeys       = "KEY1"                    次画é¢ã«å›ºå®šã§æ¸¡ã™ã‚­ãƒ¼ä¸?¦§
140     *          constVals       = "{@VAL1}"            次画é¢ã«å›ºå®šã§æ¸¡ã™å?ä¸?¦§
141     *          listCount       = "10"                      1行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?æ•°
142     *          selClass        = "selTab"                  é¸æŠžã‚¿ãƒ–ã?クラス
143     *          unselClass      = "unselTab"                éžé¸æŠžã‚¿ãƒ–ã?クラス
144     *          width           = "100px"                   タブリンクã®å¹?
145     *          height          = "50px"                    タブリンクã®é«˜ã•
146     *       >
147     *          <og:tabList name="TAB1" href="result1.jsp" keys="PN,CDK" vals="ABC,V" />
148     *          <og:tabList name="TAB2" href="result2.jsp" keys="PN,CDK" vals="BCD,W" />
149     *          <og:tabList name="TAB3" href="result3.jsp" keys="PN,CDK" vals="CDE,X" />
150     *      </og:tabLink>
151     *
152     * @og.group ç”»é¢è¡¨ç¤º
153     *
154     * @version  0.9.0      2008/09/26
155     * @author       Nakamura
156     * @since        JDK1.4,
157     */
158    public class TabLinkTag extends CommonTagSupport {
159            private static final String             VERSION                         = "5.1.8.0 (2010/07/01)";
160            private static final long               serialVersionUID        = 518020100701L;
161    
162            /** リストã?ulã‚¿ã‚°ã®class属æ? */
163            private static final String             UL_TAG_START            = "<ul class=\"tabList\">";
164            private static final String             UL_TAG_END                      = "</ul>";
165    
166            /** タブ表示をå?れ替ãˆã‚‹ãŸã‚ã®JavaScript関数 */
167            private static final String             CHANGE_TAB_SCRIPT       = "changeTab";
168            private static final String             INITIAL_TAB_SCRIPT      = "initialTabSelect";
169    //              "<script type=\"text/javascript\">addEvent(window,\"load\", initialTabSelect);</script>";
170    
171            /** 自動ã§é–‹ãタブã«ä»˜åŠ ã•れるID */
172            private static final String             FIRST_TAB_ID            = "firstTab";
173    
174            /** リストå–得タイプã?Enum */
175            private static enum LIST_TYPE { AUTO, DB, TAG };
176    
177            /** å†?ƒ¨å¤‰æ•° */
178            private String          query                   = null;
179            private transient List<TabData>           tabData         = new ArrayList<TabData>();
180    
181            /** ã‚¿ã‚°ã§è¨­å®šã™ã‚‹å±žæ? */
182            private LIST_TYPE       type                    = LIST_TYPE.AUTO;
183            private String          href                    = "result.jsp";
184            private String          target                  = "RESULT";
185            private boolean         openTab                 = true;
186            private String          openTabName             = null;
187            private String[]        constKeys               = null;
188            private String[]        constVals               = null;
189            private int                     listCount               = 10;
190            private String          selClass                = "selTab";
191            private String          unselClass              = "unselTab";
192            private boolean         isHorizontal    = true;
193            private String          width                   = "auto";
194            private String          height                  = "auto";
195    
196            /**
197             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
198             *
199             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
200             */
201            @Override
202            public int doStartTag() {
203                    return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹
204            }
205    
206            /**
207             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
208             *
209             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
210             */
211            @Override
212            public int doAfterBody() {
213                    query = getBodyString().trim();
214                    return ( SKIP_BODY );
215            }
216    
217            /**
218             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
219             *
220             * @og.rev 4.3.5.0 (2008/02/01) 処ç?Šã³å†?ƒ¨æ§‹é?を大å¹?«è¦‹ç›´ã?
221             *
222             * @return      後続å?ç??æŒ?¤º
223             */
224            @Override
225            public int doEndTag() {
226                    debugPrint();
227                    int rtnCode = EVAL_PAGE;
228    
229                    // 種別ã®è‡ªå‹•判定å?ç?
230                    if( type == LIST_TYPE.AUTO ) {
231                            if( query == null || query.length() == 0 ) {
232                                    type = LIST_TYPE.TAG;
233                            }
234                            else {
235                                    if( query.toUpperCase( Locale.JAPAN ).indexOf( "SELECT" ) >= 0 ) {
236                                            type = LIST_TYPE.DB;
237                                    }
238                                    else {
239                                            type = LIST_TYPE.TAG;
240                                    }
241                            }
242                    }
243    
244                    if( type == LIST_TYPE.DB ) {
245                            makeTabsFromQuery();
246                    }
247                    else if( type == LIST_TYPE.TAG ) {
248                            makeTabsFromTag();
249                    }
250    
251                    // リンクä¸?¦§ãŒä½•も設定ã•れã¦ã?ªã??åˆã?ã€å?ç?—ãªã?
252    //              if( tabData.size() > 0 ) {
253                    if( ! tabData.isEmpty() ) {
254                            makeTag();
255                    }
256    
257                    return( rtnCode );
258            }
259    
260            /**
261             * タグリブオブジェクトをリリースã—ã¾ã™ã?
262             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
263             */
264            @Override
265            protected void release2() {
266                    super.release2();
267                    query                   = null;
268                    tabData                 = new ArrayList<TabData>();
269                    type                    = LIST_TYPE.AUTO;
270                    href                    = "result.jsp";
271                    target                  = "RESULT";
272                    openTab                 = true;
273                    openTabName             = null;
274                    constKeys               = null;
275                    constVals               = null;
276                    listCount               = 10;
277                    selClass                = "selTab";
278                    unselClass              = "unselTab";
279                    isHorizontal    = true;
280                    width                   = "auto";
281                    height                  = "auto";
282            }
283    
284            /**
285             * DBã‹ã‚‰ã‚¿ãƒ–リンクã®ä¸?¦§ã‚’作æ?ã—ã¾ã™ã?
286             * DBTableModelãŒä½œæ?ã•れãªã?行数ã?ã®å ´å?ã¯ã€ãƒªãƒ³ã‚¯ä¸?¦§ã¯ç”Ÿæ?ã•れã¾ã›ã‚“ã€?
287             */
288            private void makeTabsFromQuery() {
289                    DBTableModel table = DBTableModelUtil.makeDBTable( query, new String[0], getResource(), getApplicationInfo() );
290                    if( table == null || table.getRowCount() == 0 ) {
291                            return;
292                    }
293    
294                    boolean isSetLabel = false;
295                    boolean isSetHref = false;
296                    boolean isSetClazz = false;
297                    boolean isSetRoles = false;
298                    boolean isSetVisible = false;
299                    if( table.getColumnCount() > 1 ) { isSetLabel = true; }
300                    if( table.getColumnCount() > 2 ) { isSetHref = true; }
301                    if( table.getColumnCount() > 3 ) { isSetClazz = true; }
302                    if( table.getColumnCount() > 4 ) { isSetRoles = true; }
303                    if( table.getColumnCount() > 5 ) { isSetVisible = true; }
304    
305                    int rowCount = table.getRowCount();
306                    String key = table.getColumnName( 0 );
307                    for( int row=0; row<rowCount; row++ ) {
308                            String value    = table.getValue( row, 0 );
309                            String label    = ( isSetLabel ? StringUtil.nval( table.getValue( row, 1 ), value ) : value );
310                            String newHref  = ( isSetHref ? StringUtil.nval( table.getValue( row, 2 ), href ) : href );
311                            String clazz    = ( isSetClazz ? StringUtil.nval( table.getValue( row, 3 ), unselClass ) : unselClass );
312                            boolean visible = ( isSetRoles ? getUser().isAccess( table.getValue( row, 4 ) ) : true );
313                            if( visible ) {
314                                    visible         = ( isSetVisible ? Boolean.valueOf( table.getValue( row, 5 ) ) : true );
315                            }
316    
317                            // 第1カラãƒ??カラãƒ?ã¨ãã?値ã¯ãƒªãƒ³ã‚¯ã®å¼•æ•°ã«å«ã‚ã‚‹
318                            newHref = XHTMLTag.addUrlEncode( newHref, XHTMLTag.urlEncode( key, value ) );
319    
320                            if( visible ) { // visible=falseã®å ´åˆã?表示ã—ãªã?
321                                    tabData.add( new TabData( newHref, value, label, clazz, visible ) );
322                            }
323                    }
324            }
325    
326            /**
327             * タブリストã‹ã‚‰ã‚¿ãƒ–リンクã®ä¸?¦§ã‚’作æ?ã—ã¾ã™ã?
328             * (予ã‚addTagメソãƒ?ƒ‰ã«ã‚ˆã‚Šã€ãƒªãƒ³ã‚¯ä¸?¦§ãŒç™»éŒ²ã•れã¦ã?‚‹ãŸã‚ã€ã“ã“ã§ã¯ä½•も処ç?—ã¾ã›ã‚“)
329             *
330             * @see #addTag( String, String, String, String, boolean, String[], String[] )
331             */
332            private void makeTabsFromTag() {
333                    // 何もã‚りã¾ã›ã‚“ã€?PMD エラー回é¿)
334            }
335    
336            /**
337             * å­ã‚¿ã‚°ã§ã‚るタブリストタグã‹ã‚‰ã‚¿ãƒ–情報をセãƒ?ƒˆã—ã¾ã™ã?
338             *
339             * @param hr ç”»é¢URL
340             * @param name タブã?åå‰
341             * @param label タブã?表示åç§°
342             * @param clz éžé¸æŠžçŠ¶æ…‹ã?タブã«ä»˜åŠ ã™ã‚‹classå?
343             * @param visible タブãŒé¸æŠžå¯èƒ½(中身を表示ã§ãã‚‹ã‹ã©ã?‹)
344             * @param keys リンク先ã?JSPã«æ¸¡ã™ã‚­ãƒ¼ä¸?¦§
345             * @param vals リンク先ã?JSPã«æ¸¡ã™å?ä¸?¦§
346             */
347            protected void addTag( final String hr, final String name, final String label, final String clz
348                                                            ,final boolean visible, final String[] keys, final String[] vals ) {
349                    String newHref = StringUtil.nval( hr, href );
350                    if( keys != null && keys.length > 0 ) {
351                            newHref = XHTMLTag.addUrlEncode( newHref, XHTMLTag.urlEncode( keys, vals ) );
352                    }
353    
354                    if( visible ) { // visible=falseã®å ´åˆã?表示ã—ãªã?
355                            tabData.add( new TabData( newHref, name, StringUtil.nval( label, getLabel( name ) ), StringUtil.nval( clz, unselClass ), visible ) );
356                    }
357            }
358    
359            /**
360             * リンクä¸?¦§ã‹ã‚‰HTMLタグを作æ?ã—ã¾ã™ã?
361             *
362             * @og.rev 5.0.2.0 (2009/11/01) openTab属æ?ãŒfalseã®å ´åˆã§ã‚‚ã?openTabNameã«æŒ?®šã•れãŸã‚¿ãƒ–ã«è‰²ä»˜ã‘ã™ã‚‹ã€?
363             * @og.rev 5.1.4.0 (2010/03/01) FF対å¿?FirstTabã®ID付加ã«é–¢ã™ã‚‹ãƒã‚°ã‚’修正
364             */
365            private void makeTag() {
366                    StringBuilder buf = new StringBuilder();
367                    buf.append( HybsSystem.CR );
368    
369                    boolean isExistFirst = false;
370                    for( int idx=0; idx<tabData.size(); idx++ ) {
371                            TabData tab = tabData.get( idx );
372    
373                            if( idx % listCount == 0 ) {
374                                    if( idx > 0 ) {
375                                            buf.append( UL_TAG_END ).append( HybsSystem.CR );
376                                    }
377                                    buf.append( UL_TAG_START ).append( HybsSystem.CR );
378                            }
379    
380                            // openTabNameãŒå®šç¾©ã•れã¦ã?ªã??åˆã?ã€?ç•ªç›®ã®æœ‰åйãªã‚¿ãƒ–ã‚’é–‹ã
381                            // 5.1.4.0 (2010/03/01) ãƒã‚°ä¿®æ­£
382                            if( !isExistFirst && tab.visible
383                                    && ( openTabName == null || openTabName.length() == 0 || openTabName.equals( tab.name ) ) ) {
384                                    buf.append( tab.makeLiTag( idx, true ) );
385                                    isExistFirst = true;
386                            }
387                            else {
388                                    buf.append( tab.makeLiTag( idx, false ) );
389                            }
390                    }
391                    buf.append( UL_TAG_END ).append( HybsSystem.CR );
392    
393                    // タブを自動ã§é–‹ããŸã‚ã®JavaScriptタグを発è¡?
394                    // 5.1.4.0 (2010/03/01) FF対�
395                    if( openTab || ( openTabName != null && openTabName.length() > 0 ) ) {
396                            buf.append( "<script type=\"text/javascript\">addEvent(window,\"load\", function() { " + INITIAL_TAB_SCRIPT + "(" );
397                            buf.append( openTab );
398                            buf.append( "); } );</script>" );
399                    }
400    
401                    jspPrint( buf.toString() );
402            }
403    
404            /**
405             * Tabãƒ??ã‚¿ を管ç?—ã¦ã?‚‹ å†?ƒ¨ã‚¯ãƒ©ã‚¹
406             *
407             * タブã?æƒ??を管ç?™ã‚‹ãŸã‚ã?簡易的ãªã€å?部クラスã§ã™ã?
408             */
409            private final class TabData {
410                    // 引数ã¨ã—ã¦åˆæœŸè¨­å®šã•れる変数
411                    private final String href;
412                    private final String name;
413                    private final String label;
414                    private final String clazz;
415                    // ç¾çжã®å®Ÿè£?§ã¯ã€visible=falseã¯æ¸¡ã£ã¦ãã¾ã›ã‚“ãŒã?å°?¥çš?«disableã®çŠ¶æ…‹ã§
416                    // 表示ã—ãŸã??åˆç­‰ã«å¯¾å¿œã™ã‚‹ãŸã‚残ã—ã¦ãŠãã¾ã™ã?
417                    private final boolean visible;
418    
419                    /**
420                     * コンストラクタ
421                     *
422                     * @param hr ç”»é¢URL
423                     * @param nm タブã?åå‰
424                     * @param lbl タブã?表示åç§°
425                     * @param clz éžé¸æŠžçŠ¶æ…‹ã?タブã«ä»˜åŠ ã™ã‚‹classå?
426                     * @param vsb タブãŒé¸æŠžå¯èƒ½(中身を表示ã§ãã‚‹ã‹ã©ã?‹)
427                     */
428                    public TabData( final String hr, final String nm, final String lbl, final String clz, final boolean vsb ) {
429                            href    = hr;
430                            name    = nm;
431                            label   = lbl;
432                            clazz   = clz;
433                            visible = vsb;
434                    }
435    
436                    /**
437                     * liã‚¿ã‚°ã®éƒ¨åˆ??æ–?­—å?を生æˆã—ã¾ã™ã?
438                     *
439                     * @param idx 生æ?ã—ãŸã‚¿ãƒ–ã?インãƒ?ƒƒã‚¯ã‚¹ç•ªå·
440                     * @param isFirst å§‹ã‚ã®æœ‰åйãªã‚¿ãƒ–ã‹ã©ã?‹
441                     * @return liã‚¿ã‚°æ–?­—å?
442                     */
443                    private String makeLiTag( final int idx, final boolean isFirst ) {
444                            StringBuilder buf = new StringBuilder();
445                            buf.append( "<li class=\"" ).append( clazz ).append( "\"" );
446                            buf.append( " style=\"" );
447                            buf.append( " width: " ).append( width ).append( ";" );
448                            buf.append( " height: " ).append( height ).append( ";" );
449                            // 水平方å‘ã?å ´åˆã?ã¿float:leftを付加ã—ã?回り込ã¿(+解除)を行ã†ã€?
450                            if( isHorizontal ) {
451                                    buf.append( " float: left;" );
452                                    if( idx % listCount == 0 ) {
453                                            // 行ãŒå¤‰ã‚ã£ãŸã‚¿ã‚¤ãƒŸãƒ³ã‚°ã§ã€ãƒ†ã‚­ã‚¹ãƒˆã?折り返ã—をクリア??·¦ãƒžã?ジン(+10px)を空ã‘ã‚‹
454                                            buf.append( " clear: left; margin-left: " );
455    //                                      buf.append( Math.round( idx/listCount ) * 10 ).append( "px;" );
456                                            // 4.3.4.4 (2009/01/01) Math.roundを呼ã³å‡ºã™æ„味ãŒãªã?Ÿã‚削除
457                                            buf.append( (idx/listCount) * 10 ).append( "px;" );
458                                    }
459                            }
460                            buf.append( " \"" );
461                            buf.append( ">" );
462                            buf.append( makeLinkTag( isFirst ) );
463                            buf.append( "</li>" ).append( HybsSystem.CR );
464    
465                            return buf.toString();
466                    }
467    
468                    /**
469                     * aã‚¿ã‚°ã®éƒ¨åˆ??æ–?­—å?を生æˆã—ã¾ã™ã?
470                     * タブãŒé¸æŠžä¸å¯èƒ½ãªçŠ¶æ…‹ã?å ´åˆã?ã€ã‚¿ãƒ–ã?表示æ–?­—å?ã‚’ãã®ã¾ã¾è¿”ã—ã¾ã™ã?
471                     *
472                     * @og.rev 4.3.6.4 戻るã?タンãŒã§ãªã?•題ã¸ã®å¯¾å¿?
473                     *
474                     * @param isFirst å§‹ã‚ã®æœ‰åйãªã‚¿ãƒ–ã‹ã©ã?‹
475                     * @return liã‚¿ã‚°æ–?­—å?
476                     */
477                    private String makeLinkTag( final boolean isFirst ) {
478    //                      if( !visible ) { return label; }
479    
480                            String newHref = XHTMLTag.addUrlEncode( href, XHTMLTag.urlEncode( constKeys, constVals ) );
481                            // 4.3.6.4 (2009/05/01)
482                            // タブ画é¢ã‹ã‚‰é·ç§»ã—ãŸæ™‚ã«ã€ã‚¿ãƒ–ã?読込ã«ã‚ˆã‚Šã€ç”»é¢IDãŒæ¶ˆãˆã¦ã—ã¾ã?
483                            // 戻るã?タンãŒã§ãªã?¸å?åˆã¸ã®å¯¾å¿?
484                            newHref = XHTMLTag.addUrlEncode( newHref, "GAMENID=" + getGUIInfoAttri( "KEY" ) );
485                            TagBuffer tag = new TagBuffer( "a" );
486                            tag.add( "href", newHref );
487                            tag.add( "name", name );
488                            tag.add( "target", target );
489                            tag.add( "onClick", CHANGE_TAB_SCRIPT + "( this, \"" + selClass + "\" );" );
490                            if ( isFirst ) {
491                                    tag.add( "id", FIRST_TAB_ID );
492                            }
493                            tag.setBody( label );
494    
495                            return tag.makeTag();
496                    }
497            }
498    
499            /**
500             * ã€TAG】タブã?ä¸?¦§ã‚’ã©ã“ã‹ã‚‰å–å¾—ã™ã‚‹ã‹ã‚’指定ã—ã¾ã?åˆæœŸå€¤:AUTO)ã€?
501             *
502             * @og.tag
503             * タブã?ä¸?¦§ã‚’ã©ã“ã‹ã‚‰å–å¾—ã™ã‚‹ã‹ã‚’指定ã—ã¾ã™ã?
504             * ç¾çжã®å®Ÿè£?§ã¯ã€ã‚¯ã‚¨ãƒªã‚’発行ã—ã¦ä¸?¦§ã‚’生æˆã™ã‚‹ã?DBã€ã¨ã€å­ã‚¿ã‚°ã§ã‚ã‚‹
505             * tabListã‚¿ã‚°ã‚’å?挙ã—ã¦ã‚¿ãƒ–を定義ã™ã‚‹ã€ŒTAGã€ãŒå®Ÿè£?•れã¦ã?¾ã™ã?
506             *
507             * ã¾ãŸã?「AUTOã€ã¨æŒ?®šã—ãŸå?åˆã?ã€Body部åˆ??å†?®¹ã«å¿œã˜ã¦è‡ªå‹•çš„ã«åˆ¤å®šã•れã¾ã™ã?
508             * åˆæœŸå€¤ã¯ã€?½¢AUTOã€ã§ã™ã?
509             *
510             * @param       tp タブä¸?¦§å–å¾—æ–¹æ³?「AUTOã€?
511             */
512            public void setListType( final String tp ) {
513                    String typeStr = nval( getRequestParameter( tp ), null );
514                    try {
515                            type = LIST_TYPE.valueOf( typeStr );
516                    }
517                    catch ( IllegalArgumentException ex ) {
518                            StringBuilder errBuf = new StringBuilder( 100 );
519                            errBuf.append( "listType ã¯" );
520                            for ( LIST_TYPE obj : LIST_TYPE.values() ) {
521                                    errBuf.append( ',' );
522                                    errBuf.append( obj.name() );
523                            }
524                            errBuf.append( "ã‹ã‚‰é¸ã‚“ã§ãã ã•ã„ã€? );
525                            throw new HybsSystemException( errBuf.toString(), ex );
526                    }
527            }
528    
529            /**
530             * ã€TAG】リンク先ã?JSPを指定ã—ã¾ã?åˆæœŸå€¤:result.jsp)ã€?
531             *
532             * @og.tag
533             * リンク先ã?JSPを指定ã—ã¾ã™ã?
534             * ã“ã?タブリンクã¯ã€ã‚ãã¾ã§ã€Œã‚¿ãƒ–ã?形をã—ãŸãƒªãƒ³ã‚¯ã€ãªã®ã§ã€?
535             * target属æ?ã¨åˆã‚ã›ã¦ã‚»ãƒ?ƒˆã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
536             * åˆæœŸå€¤ã¯ã€?½¢result.jspã€ã§ã™ã?
537             *
538             * @param       hr リンク先ã?JSP
539             */
540            public void setHref( final String hr ) {
541                    href = nval( getRequestParameter( hr ), href );
542            }
543    
544            /**
545             * ã€TAG】リンクã®ã‚¿ãƒ¼ã‚²ãƒ?ƒˆã‚’指定ã—ã¾ã?åˆæœŸå€¤:RESULT)ã€?
546             *
547             * @og.tag
548             * リンクã®ã‚¿ãƒ¼ã‚²ãƒ?ƒˆã‚’指定ã—ã¾ã™ã?
549             * ã“ã?タブリンクã¯ã€ã‚ãã¾ã§ã€Œã‚¿ãƒ–ã?形をã—ãŸãƒªãƒ³ã‚¯ã€ãªã®ã§ã€?
550             * target属æ?を設定ã—ã€åˆ¥ã®ãƒ•レーãƒ?«å®Ÿç”»é¢ã‚’表示ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã?
551             * åˆæœŸå€¤ã¯ã€?½¢RESULTã€ã§ã™ã?
552             *
553             * @param       tgt リンクターゲãƒ?ƒˆ
554             */
555            public void setTarget( final String tgt ) {
556                    target = nval( getRequestParameter( tgt ), target );
557            }
558    
559            /**
560             * ã€TAG】リンク表示ã«ã‚¿ãƒ–リンクをè?å‹•ã§é–‹ãã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true[=é–‹ã])ã€?
561             *
562             * @og.tag
563             * リンク表示ã«ã‚¿ãƒ–リンクをè?å‹•ã§é–‹ãã‹ã‚’æŒ?®šã—ã¾ã™ã?
564             * openTabName属æ?ãŒæŒ‡å®šã•れã¦ã?ªã??åˆã?自動ã§é–‹ãタブã?
565             * ã€?番目ã«è¡¨ç¤ºã•れãŸã‚¿ãƒ–リンクã€ã§ã™ã?
566             * æŒ?®šã•れã¦ã?‚‹å ´åˆã?ã€ãã®åå‰ã‚’æŒã¤ã€?番目ã€ã?タブãŒè‡ªå‹•ã§é–‹ã‹ã‚Œã¾ã™ã?
567             * タブãŒé¸æŠžä¸å¯èƒ½ãªçŠ¶æ…‹ã?å ´åˆã?ã€ã?1番目ã€ã?æ¡ä»¶ã‹ã‚‰é™¤å¤–ã•れã¾ã™ã?
568             * åˆæœŸå€¤ã¯ã€ã?true(é–‹ã)ã€ã§ã™ã?
569             *
570             * @param       flag タブ表示後ã«è‡ªå‹•ã§ã‚¿ãƒ–ã‚’é–‹ãã‹[true:自動ã§é–‹ã/false:é–‹ã‹ãªã„]
571             */
572            public void setOpenTab( final String flag ) {
573                    openTab = nval( getRequestParameter( flag ), openTab );
574            }
575    
576            /**
577             * ã€TAG】最åˆã«é–‹ãタブリンクã®åå‰ã‚’指定ã—ã¾ã™ã?
578             *
579             * @og.tag
580             * æœ??ã«é–‹ãタブリンクã®ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
581             *
582             * @param       name æœ??ã«é–‹ãタブリンクã®åå‰
583             */
584            public void setOpenTabName( final String name ) {
585                    openTabName = nval( getRequestParameter( name ), openTabName );
586            }
587    
588            /**
589             * ã€TAG】次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
590             *
591             * @og.tag
592             * 次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®ã‚­ãƒ¼ã‚’指定ã—ã¾ã™ã?
593             * キーã¯ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã§è¤?•°æŒ?®šãŒå¯èƒ½ã§ã™ã?
594             * パラメーターã®å€¤ã¯ã€constVals属æ?ã®æ•°ã¨ä¸??ã—ã¦ã?‚‹å¿?¦ãŒã‚りã¾ã™ã?
595             *
596             * @param       keys 定数パラメーターã®ã‚­ãƒ¼
597             * @see         #setConstVals( String )
598             */
599            public void setConstKeys( final String keys ) {
600                    constKeys = getCSVParameter( keys );
601            }
602    
603            /**
604             * ã€TAG】次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®å€¤ã‚’指定ã—ã¾ã™ã?
605             *
606             * @og.tag
607             * 次画é¢ã«æ¸¡ã™å®šæ•°ãƒ‘ラメーターã®å€¤ã‚’指定ã—ã¾ã™ã?
608             * 値ã¯ã‚«ãƒ³ãƒžåŒºåˆ?‚Šã§è¤?•°æŒ?®šãŒå¯èƒ½ã§ã™ã?
609             * パラメーターã®å€¤ã¯ã€constKeys属æ?ã®æ•°ã¨ä¸??ã—ã¦ã?‚‹å¿?¦ãŒã‚りã¾ã™ã?
610             *
611             * @param       vals 定数パラメーターã®ã‚­ãƒ¼
612             * @see         #setConstKeys( String )
613             */
614            public void setConstVals( final String vals ) {
615                    constVals = getCSVParameter( vals );
616            }
617    
618            /**
619             * ã€TAGã€?行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?数を指定ã—ã¾ã?åˆæœŸå€¤:10)ã€?
620             *
621             * @og.tag
622             * 1行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?数を指定ã—ã¾ã™ã?
623             * 1行辺りã?タブã?æ•°ãŒã“ã®è¨­å®šã‚’è¶?ˆã‚‹ã¨ã€è?å‹•çš„ã«æŠ˜ã‚Šè¿”ã—ã¾ã™ã?
624             * ã¾ãŸã?æŠ˜ã‚Šè¿”ã—æ¯Žã«ã€å·¦ã«10pxã®ãƒžã?ジンを設ã‘ã¾ã™ã?
625             * åˆæœŸå€¤ã¯ã€?0ã§ã™ã?
626             * ã“ã?属æ?ã¯ã€orientationãŒHorizontal(水平方å?ã®å ´åˆã?ã¿æœ‰åйã§ã™ã?
627             *
628             * @param       cnt 1行辺りã«è¡¨ç¤ºã™ã‚‹ã‚¿ãƒ–ã?æ•°
629             */
630            public void setListCount( final String cnt ) {
631                    listCount = nval( getRequestParameter( cnt ), listCount );
632            }
633    
634            /**
635             * ã€TAGã€‘é¸æŠžã‚¿ãƒ–ã?クラスを指定ã—ã¾ã?åˆæœŸå€¤:selTab)ã€?
636             *
637             * @og.tag
638             * タブãŒé¸æŠžã•れã¦ã?‚‹çŠ¶æ…‹ã«ã‚ã‚‹å ´åˆã?ã€ã‚¿ãƒ–部åˆ??クラスåã‚’æŒ?®šã—ã¾ã™ã?
639             * ã“ã?クラスåを変更ã™ã‚‹å ´åˆã?ã€ãã®ã‚¯ãƒ©ã‚¹ã‚’custom/custom.cssç­‰ã§å†å®šç¾©ã—ã¦ä¸‹ã•ã??
640             * åˆæœŸå€¤ã¯ã€selTabã§ã™ã?
641             *
642             * @param       cls é¸æŠžã‚¿ãƒ–ã?クラスå?
643             */
644            public void setSelClass( final String cls ) {
645                    selClass = nval( getRequestParameter( cls ), selClass );
646            }
647    
648            /**
649             * ã€TAG】éžé¸æŠžã‚¿ãƒ–ã?クラスを指定ã—ã¾ã?åˆæœŸå€¤:unselTab)ã€?
650             *
651             * @og.tag
652             * タブãŒé¸æŠžã•れã¦ã?ªã?Š¶æ…‹ã«ã‚ã‚‹å ´åˆã?ã€ã‚¿ãƒ–部åˆ??クラスåã‚’æŒ?®šã—ã¾ã™ã?
653             * ã“ã?クラスåを変更ã™ã‚‹å ´åˆã?ã€ãã®ã‚¯ãƒ©ã‚¹ã‚’custom/custom.cssç­‰ã§å†å®šç¾©ã—ã¦ä¸‹ã•ã??
654             * åˆæœŸå€¤ã¯ã€unselTabã§ã™ã?
655             *
656             * @param       cls é¸æŠžã‚¿ãƒ–ã?クラスå?
657             */
658            public void setUnselClass( final String cls ) {
659                    unselClass = nval( getRequestParameter( cls ), unselClass );
660            }
661    
662            /**
663             * ã€TAG】タブã?æ–¹å‘ã?横åž?Horizontal)ã‹ç¸¦åž?Vertical)を指定ã—ã¾ã?åˆæœŸå€¤:横åž?ã€?
664             *
665             * @og.tag
666             * タブã?ã€ä¸Šã«ã‚¿ãƒ–ãŒä¸¦ã¶æ¨ªåž‹ã¨å·¦ã«ã‚¿ãƒ–ãŒä¸¦ã¶ç¸¦åž‹ãŒã‚りã¾ã™ã?
667             * ã“ã?属æ?ã§ã¯ã€æ¨ªåž‹ã?ã€Horizontal ã€ç¸¦åž‹ã?ã€Vertical を指定ã—ã¾ã™ã?
668             * æŒ?®šã?ã€æ–‡å­—å?ã®æœ??ã®ä¸?–‡å­—を見ã¦ã?‚‹ã?‘ã§ã™ã?ã§ã€Hã‹Vã§ã‚‚æ§‹ã„ã¾ã›ã‚“ã€?
669             *
670             * 縦åž?Vertical)ã«ã—ãŸå ´åˆã?å?‚¿ãƒ–è¦ç´??ã€ãƒ•レーãƒ?‚µã‚¤ã‚ºã®å¹?«åˆã‚ã›ã¦
671             * æœ?¤§ã§è¡¨ç¤ºã•れã¾ã™ã?å¹?‚’固定ã™ã‚‹å?åˆã?ã€width属æ?を指定ã—ã¦ä¸‹ã•ã??
672             *
673             * åˆæœŸå€¤ã¯ã€æ¨ªåž?Horizontal) ã§ã™ã?
674             *
675             * @param       ori タブã?æ–¹å‘ã?横åž?Horizontal)ã‹ç¸¦åž?Vertical)を指å®?
676             */
677            public void setOrientation( final String ori ) {
678                    String ori2 = nval( getRequestParameter( ori ),null );
679                    if( ori2 != null && ori2.length() > 0 ) {
680                            char ch = ori2.toUpperCase(Locale.JAPAN).charAt( 0 );
681                            if( ch == 'H' ) { isHorizontal = true; }
682                            else if( ch == 'V' ) { isHorizontal = false; }
683                            else {
684                                    String errMsg = "orientation ã®æŒ?®šã?ã€H(orizontal) ã¾ãŸã?ã€V(ertical) ã§ã™ã?"
685                                                            + " orientation=" + ori2 ;                      // 5.1.8.0 (2010/07/01) errMsg 修正
686                                    throw new HybsSystemException( errMsg );
687                            }
688                    }
689            }
690    
691            /**
692             * ã€TAG】タブリンクã®å¹?‚’ % ã€px ã€ã¾ãŸã? "auto" ã§æŒ?®šã—ã¾ã™ã?
693             *
694             * @og.tag
695             * åˆæœŸå€¤ã¯ã€?auto"(自動設å®? ã§ã™ã?
696             * autoã®å ´åˆã?横型表示ã§ã¯ã€æ–‡å­—ã?å¹?«åˆã‚ã›ã¦è‡ªå‹•çš„ã«èª¿æ•´ã•れã€?
697             * 縦型表示ã®å ´åˆã?ã€ãƒ•レーãƒ?‚µã‚¤ã‚ºã«åˆã‚ã›ã¦æ‹¡å¤§ã—ã¦è¡¨ç¤ºã•れã¾ã™ã?
698             *
699             * @param       wh      å¹?(% ã€px ã€ã¾ãŸã? "auto" )
700             */
701            public void setWidth( final String wh ) {
702                    width = nval( getRequestParameter( wh ),width );
703            }
704    
705            /**
706             * ã€TAG】タブã?高ã•ã‚’ã?% ã€px ã€ã¾ãŸã? "auto" ã§æŒ?®šã—ã¾ã™ã?
707             *
708             * @og.tag
709             * タブã?高ã•ã‚’ã?% ã€px ã€ã¾ãŸã? "auto" ã§æŒ?®šã—ã¾ã?
710             * åˆæœŸå€¤ã¯ã€?auto"(自動設å®? ã§ã™ã?
711             *
712             * @param       ht      高㕠(% ã€px ã€ã¾ãŸã? "auto" )
713             */
714            public void setHeight( final String ht ) {
715                    height = nval( getRequestParameter( ht ),height );
716            }
717    
718            /**
719             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºæ›¸ãè¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
720             *
721             * @serialData
722             *
723             * @param       strm    ObjectOutputStreamオブジェク�
724             */
725            private void writeObject( final ObjectOutputStream strm ) throws IOException {
726                    strm.defaultWriteObject();
727            }
728    
729            /**
730             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºèª­ã¿è¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
731             *
732             * ã“ã“ã§ã¯ã€transient 宣è¨?•れãŸå†?ƒ¨å¤‰æ•°ã®å†??åˆæœŸåŒ–ãŒå¿?¦ãªãƒ•ィールドã?ã¿è¨­å®šã—ã¾ã™ã?
733             *
734             * @og.rev 5.1.8.0 (2010/07/01) tabData ã®åˆæœŸåŒ–å?ç?追åŠ?
735             * @serialData
736             *
737             * @param       strm    ObjectInputStreamオブジェク�
738             * @see #release2()
739             */
740            private void readObject( final ObjectInputStream strm ) throws IOException, ClassNotFoundException {
741                    strm.defaultReadObject();
742                    tabData         = new ArrayList<TabData>();
743            }
744    
745            /**
746             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
747             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
748             *
749             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
750             */
751            @Override
752            public String toString() {
753                    return org.opengion.fukurou.util.ToString.title(this.getClass().getName() )
754                    .println( "VERSION"       , VERSION )
755                    .println( "listType"      , type.toString() )
756                    .println( "href"          , href )
757                    .println( "target"        , target )
758                    .println( "openTab"       , openTab )
759                    .println( "openTabName"   , openTabName )
760                    .println( "constKeys"     , constKeys )
761                    .println( "constVals"     , constVals )
762                    .println( "listCount"     , listCount )
763                    .println( "selClass"      , selClass )
764                    .println( "unselClass"    , unselClass )
765                    .println( "isHorizontal"  , isHorizontal )
766                    .println( "width"         , width )
767                    .println( "height"        , height )
768                    .println( "Other...", getAttributes().getAttribute() ).fixForm().toString();
769            }
770    }