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.File;
021    import java.util.ArrayList;
022    import java.util.Calendar;
023    import java.util.GregorianCalendar;
024    import java.util.HashMap;
025    import java.util.Map;
026    
027    import javax.servlet.http.HttpServletRequest;
028    
029    import org.opengion.fukurou.util.StringUtil;
030    import org.opengion.fukurou.util.XHTMLTag;
031    import org.opengion.hayabusa.common.HybsSystem;
032    import org.opengion.hayabusa.common.HybsSystemException;
033    import org.opengion.hayabusa.html.CreateToken;
034    import org.opengion.hayabusa.html.ViewForm;
035    import org.opengion.hayabusa.resource.GUIInfo;
036    import org.opengion.hayabusa.resource.URLXfer;
037    
038    /**
039     * HTML のaタグと同等ã?リンクを作æ?するHTML拡張タグですã?
040     *
041     * @og.formSample
042     * ●形式ï¼?lt;og:link href="…" >  ...  </og:link >
043     * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
044     *
045     * ●Tag定義??
046     *   <og:link
047     *       type               【HTML】リンク先ã?MIMEタイプをæŒ?®šしまã�?
048     *       name               【HTML】この要ç´?‚’リンクの対象とするための名前を指定しまã�?HTML5よりå»?­¢)
049     *       gamenId            【TAG】画面ID属æ?を登録しまã�?
050     *       useGamenId         【TAG】GAMENID,BACK_GAMENID 属æ?を付加するかどã�?�‹[true/false]を設定しまã�?初期値:true)
051     *       column             【TAG】リンクをつけたã�?‚«ラãƒ?‚’æŒ?®šしまã�?ViewLink タグと併用)
052     *       keys               【TAG】リンク先に渡すキーをCSV形式でè¤?•°æŒ?®šしまã�?
053     *       vals               【TAG】リンク先に渡すå?をCSV形式でè¤?•°æŒ?®šしまã�?
054     *       onLink             【TAG】リンクを張ã‚?true or 1)/張らなã�?false or 0)の設定をæŒ?®šしまã�?初期値:true)
055     *       markList           【TAG】å?ç�?�™るã?ークをã?"|"区åˆ?‚Šのæ–?­—å?でæŒ?®šしまã�?
056     *       href               【HTML】リンク先ã?URLを指定しまã�?
057     *       target             【HTML】リンク先ã?表示ターゲãƒ?ƒˆを指定しまã�?
058     *       caseKey            【TAG】このタグ自体を利用するかどã�?�‹の条件キーを指定しまã�?初期値:null)
059     *       caseVal            【TAG】このタグ自体を利用するかどã�?�‹の条件値を指定しまã�?初期値:null)
060     *       caseNN             【TAG】指定ã?値がã?null/ゼロæ–?­—å? でなã�??å�?Not Null=NN)は、このタグは使用されまã�?初期値:true)
061     *       caseNull           【TAG】指定ã?値がã?null/ゼロæ–?­—å? の場合ã?、このタグは使用されまã�?初期値:true)
062     *       lbl                【TAG】ラベルリソースのラベルIDを指定しまã�?
063     *       xlink              【TAG】href ではなくã?xlink:href を使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)
064     *       fileCheck          【TAG】ファイルの存在チェãƒ?‚¯を行うかどã�?�‹[true/false]を指定しまã�?初期値:false)
065     *       filePath           【TAG】アドレスにファイルのãƒ?‚£レクトリ直接のアドレスを指定するかどã�?�‹[true/false]設定しまã�?初期値:false)
066     *       hreflang           【HTML】リンク先ã?基本となるè¨?ªžコードをæŒ?®šしまã�?
067     *       rel                【HTML】このæ–?›¸から見た、href属æ?でæŒ?®šされるリンク先との関係をæŒ?®šしまã�?
068     *       rev                【HTML】href属æ?でæŒ?®šされるリンク先から見た、このæ–?›¸との関係をしてしまã�?
069     *       charset            【HTML】リンク先ã?æ–?­—コードセãƒ?ƒˆを指定しまã�?
070     *       shape              【HTML】リンクボタンの形状(イメージマッãƒ?rect/circle/poly/default)を指定しまã�?
071     *       coords             【HTML】リンクボタンの座標をæŒ?®šしまã�?
072     *       id                 【HTML】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
073     *       lang               【HTML】要ç´??å†?®¹と他ã?属æ?値のè¨?ª?lang,xml:lang)を指定しまã�?
074     *       dir                【HTML】文字表記ã?方å�?dir)を指定しまã�?
075     *       title              【HTML】要ç´?�«対する補足çš?ƒ…報(title)を設定しまã�?
076     *       style              【HTML】この要ç´?�«対して適用させるスタイルシーãƒ?style)を設定しまã�?
077     *       tabindex           【HTML】タブã?移動é?(tabindex)を指定しまã�?0 ??32767)
078     *       accesskey          【HTML】アクセスキー(alt+キーで直接æŒ?®?を割り当てまã�?
079     *       clazz              【HTML】要ç´?�«対して class 属æ?を設定しまã�?
080     *       language           【TAG】タグå†?ƒ¨で使用するè¨?ªžコード[ja/en/zh/…]を指定しまã�?
081     *       useDirectJump      【TAG】ダイレクトジャンプを使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)
082     *       useRequestCache    【TAG】リクエストキャãƒ?‚·ュæƒ??を使用するかどã�?�‹[true/false]を指定しまã�?初期値:true)
083     *       hrefOnly           【TAG】リンク(アンカータグ)ではなくã?href 属æ?をそのまま返すかどã�?�‹[true/false]を指定しまã�?初期値:false)
084     *       hrefTarget         【TAG】リンク(アンカータグ)ではなくã?href 属æ?と、target属æ?ã‚?キーも含めて返すかどã�?�‹[true/false]を指定しまã�?初期値:false)
085     *       delKeys            【TAG】リクエストキャãƒ?‚·ュæƒ??使用時に使用しなã�?削除する)キーをCSV形式でè¤?•°æŒ?®šしまã�?
086     *       onClick            【HTML】JavaScriptのイベンãƒ?onClick を設定しまã�?ä¾?onClick="renew('query.jsp','QUERY');")
087     *       onBlur             【HTML】JavaScriptのイベンãƒ?onBlur を設定しまã�?ä¾?onBlur="this.value=value.toUpperCase();")
088     *       onFocus            【HTML】JavaScriptのイベンãƒ?onFocus を設定しまã�?
089     *       ondblClick         【HTML】JavaScriptのイベンãƒ?ondblClick を設定しまã�?
090     *       onMouseDown        【HTML】JavaScriptのイベンãƒ?onMouseDown を設定しまã�?
091     *       onMouseUp          【HTML】JavaScriptのイベンãƒ?onMouseUp を設定しまã�?
092     *       onMouseMove        【HTML】JavaScriptのイベンãƒ?onMouseMove を設定しまã�?
093     *       onMouseOut         【HTML】JavaScriptのイベンãƒ?onMouseOut を設定しまã�?
094     *       onMouseOver        【HTML】JavaScriptのイベンãƒ?onMouseOver を設定しまã�?
095     *       roles              【TAG】ロールをセãƒ?ƒˆしまã�?
096     *       useURLCheck        【TAG】リンクアドレスにURLチェãƒ?‚¯用の確認キーを付加するかどã�?�‹[true/false]を指定しまã�?初期値:false)
097     *       urlCheckUser       【TAG】URLチェãƒ?‚¯用の確認キーに対して、リンクを開くことのできるユーザーIDを指定しまã�?初期値:ログインユーザー)
098     *       urlCheckTime       【TAG】URLチェãƒ?‚¯用の確認キーに対して、リンクの有効期限を指定しまã�?初期値:60åˆ?
099     *       extTocken          【TAG】利用するCreateTokenプラグイン名を設定しまã�?
100     *       debug              【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
101     *   >   ... Body ...
102     *   </og:link>
103     *
104     * ●使用ä¾?
105     *    ・普通ã?リンク
106     *        <og:link gamenId="32ExcelIn" href="direct.jsp" keys="location,filename,modifyType" value="{@GUI.ADDRESS},{@GUI.ADDRESS}.xls,A"  target="RESULT" >
107     *            <img src="{@SYS.JSP}/image/insert.gif" alt="Excel Insert" /><og:message lbl="MSG0057" />
108     *        </og:link>
109     *
110     *    ・検索結果ãƒ??ブルå†?�§のリンク
111     *        <og:viewLink command="{@command}">
112     *            <og:link column="KMZ" gamenId="RK0251" href="index.jsp" target="CONTENTS"
113     *                keys="KMZ,ORDER_BY,command" vals="[KMZ],'LKIS',NEW" />
114     *        </og:viewLink>
115     *
116     *    ・ãƒ?‚¤レクトジャンãƒ?æŒ?®šã?画面へ直接飛ã?ã�?URL
117     *      gamenId を指定しなければこã?画面へのURLを作æ?しますã?
118     *      こã?URLは、その画面の index.jsp に直接ジャンプするためã?URLですã?
119     *      こã?場合ã?useRequestCache="true" がå?期å?なので、å¿?¦�なければ、false に設定願いますã?
120     *        <og:link useDirectJump="true" delKeys="pageSize"
121     *                     keys="location,filename,modifyType" value="{@GUI.ADDRESS},{@GUI.ADDRESS}.xls,A" />
122     * @og.group 画面表示
123     *
124     * @version  4.0
125     * @author       Kazuhiko Hasegawa
126     * @since    JDK5.0,
127     */
128    public class LinkTag extends HTMLTagSupport {
129            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
130            private static final String VERSION = "5.7.1.2 (2013/12/20)" ;
131    
132            private static final long serialVersionUID = 571220131220L ;
133    
134            private String          column          = null;
135            private String          onLink          = "true";       // true またã? 1
136            private boolean         fileCheck       = false;
137            private boolean         filePath        = false;
138            private String          baseURL         = HybsSystem.sys( "FILE_URL" );
139            private String          fileURL         = baseURL;
140            private String          gamenId         = null;
141            private boolean         useGamenId      = true;
142            // 3.5.2.0 (2003/10/20)
143            private String          markList                = "true|TRUE|1";        // true またã? 1
144            private boolean         xlink                   = false;                        // 3.5.5.0 (2004/03/12)
145            private boolean         useDirectJump   = false;                        // 3.7.1.0 (2005/04/26)
146            private boolean         useRequestCache = true;                         // 3.7.1.0 (2005/04/26)
147            private int                     validDuration   = -1;
148            private boolean         hrefOnly                = false;                        // 4.0.0 (2005/11/30)
149            private boolean         hrefTarget              = false;                        // 5.5.5.6 (2012/08/31)
150    
151            private String[]        keys            = null;         // 3.5.6.2 (2004/07/05)
152            private String[]        vals            = null;         // 3.5.6.2 (2004/07/05)
153            private String[]        delKeys         = null;         // 3.7.1.0 (2005/04/26)
154            private boolean         useURLCheck     = false;                // 4.3.7.0 (2009/06/01)
155            private String          urlCheckUser= null;                     // 4.3.7.0 (2009/06/01)
156            private long            urlCheckTime= 1000*60*60*24;// 4.3.7.0 (2009/06/01)
157            
158            private String          extToken        = null;         // 5.8.2.1 (2014/12/13)
159            private ArrayList<CreateToken> ctArray = null;
160    
161            /**
162             * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
163             *
164             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?ボディが存在する場合ã?みボディが呼ばれる対応ã?
165             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
166             * @og.rev 5.7.1.2 (2013/12/20) msg â‡?msglbl 変更
167             *
168             * @return      後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
169             */
170            @Override
171            public int doStartTag() {
172                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
173                    if( useTag() ) {
174    //                      String msg = getMsglbl();
175    //                      if( msg == null && column != null ) { msg = "[" + column + "]"; }
176    //                      set( "body",msg );
177                            String msglbl = getMsglbl();    // 5.7.1.2 (2013/12/20) msg â‡?msglbl 変更
178                            if( msglbl == null && column != null ) { msglbl = "[" + column + "]"; }
179                            set( "body",msglbl );
180                            return( EVAL_BODY_BUFFERED );   // Body を評価するã€? extends BodyTagSupport æ™?
181                    }
182                    return ( SKIP_BODY );                           // Body を評価しなã�?
183            }
184    
185            /**
186             * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
187             *
188             * @og.rev 3.1.1.0 (2003/03/28) ボディのå†?®¹を取得するå?ç�?‚’、CommonTagSupport で行うã€?
189             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?ボディが存在する場合ã?みボディが呼ばれる対応ã?
190             *
191             * @return      後続å?ç�??æŒ?¤º(SKIP_BODY)
192             */
193            @Override
194            public int doAfterBody() {
195                    String label = getBodyString();
196    
197                    if( label != null && label.length() > 0 ) {
198                            set( "body",label );
199                    }
200    
201                    return(SKIP_BODY);
202            }
203    
204            /**
205             * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
206             *
207             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
208             * @og.rev 3.1.2.0 (2003/04/07) リンクæŒ?®š時に、画面IDを渡して、実アドレスを求める事ができる様にするã€?
209             * @og.rev 3.1.7.0 (2003/05/02) 戻るã?タン用のBACK_GAMENID をã?引数に追åŠ?�—ますã?
210             * @og.rev 3.1.8.0 (2003/05/16) GAMENID属æ?の?µ?²?¬への自動セãƒ?ƒˆを行うかどã�?�‹を決める属æ?( useGamenId )を追åŠ??
211             * @og.rev 3.1.8.0 (2003/05/16) 画面?©?¤が指定されたときã?リンクæƒ??作æ?方法を通常のリンク時にも適用するã€?
212             * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張ã‚?張らなã�?‚’自動判断するã€?
213             * @og.rev 3.5.2.0 (2003/10/20) markList属æ?を追åŠ?
214             * @og.rev 3.5.5.0 (2004/03/12) xlink属æ?をAttributeオブジェクトに追åŠ?
215             * @og.rev 3.5.6.2 (2004/07/05) makeTag() の処ç�?¯?›²変更、viewlink へのパラメータ変更ã€?
216             * @og.rev 3.7.1.0 (2005/04/26) ãƒ?‚¤レクトジャンプリンク機è?を追åŠ?
217             * @og.rev 4.0.0.0 (2005/11/30) roles 属æ?の追åŠ?
218             * @og.rev 4.0.0.0 (2005/08/31) 同ä¸?‚«ラãƒ??è¤?•°登録を許可しますã?
219             * @og.rev 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
220             * @og.rev 4.3.7.1 (2009/06/08) URLチェãƒ?‚¯機è?対å¿?
221             * @og.rev 4.3.7.4 (2009/07/01) 循環参ç?を解æ¶?
222             * @og.rev 4.3.8.0 (2009/08/01) ユーザーIDの外部設定に対å¿?
223             * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
224             * @og.rev 5.8.2.1 (2014/12/14) トã?クンプラグイン対å¿?
225             *
226             * @return      後続å?ç�??æŒ?¤º
227             */
228            @Override
229            public int doEndTag() {
230                    debugPrint();           // 4.0.0 (2005/02/28)
231                    // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
232                    if( !useTag() ) { return(EVAL_PAGE); }
233    
234                    // 3.1.8.0 (2003/05/16) GAMENID属æ?の?µ?²?¬への自動セãƒ?ƒˆを行うかどã�?�‹を決める属æ?( useGamenId )を追åŠ??
235                    // 4.0.0 (2005/11/30) æŒ?®šã?ロールがã?アクセス許可の場合ã?、å?力しますã?
236                    String roles = get( "roles" );
237    //              if( roles != null && ! getUser().isAccess( roles ) ) {
238    //                      return(EVAL_PAGE);
239    //              }
240                    // 4.3.0.0 (2008/07/04) ロールモードã?ルチ対å¿?
241                    if( ! getUser().isAccess( roles ) ) {
242                            return(EVAL_PAGE);
243                    }
244    
245                    //  4.3.7.1 (2009/06/08)
246                    if( useURLCheck ) {
247                            // 4.3.8.0 (2009/08/01)
248    //                      urlCheckUser = getUser().getUserID();
249                            urlCheckUser = nval( urlCheckUser, getUser().getUserID() );
250                    }
251    
252                    ViewLinkTag viewlink = (ViewLinkTag)findAncestorWithClass( this,ViewLinkTag.class );
253                    if( viewlink != null ) {
254                            if( isGamenCheck() ) {  set( "onLink", onLink );  }
255                            else {                                  set( "onLink", "false" ); }
256                             // 4.3.7.1 (2009/06/08)
257                            if( useURLCheck ) {
258                                    set( "useURLCheck", "true" );
259                                    set( "urlCheckUser", urlCheckUser );
260                                    set( "urlCheckTime", String.valueOf( System.currentTimeMillis() + urlCheckTime ) );
261                            }
262                            set( "markList",markList );
263                            set( "linkFormat",makeTag() );          // 3.5.6.2 (2004/07/05)
264                            // 4.0.0 (2005/08/31) 同ä¸?‚«ラãƒ??è¤?•°登録を許可しますã?
265                            set( "column",column );
266                            set( "extToken", extToken); // 5.8.2.1 (2014/12/13)
267                            viewlink.addAttribute( getAttributes() );
268                    }
269                    // 3.7.1.0 (2005/04/26) ãƒ?‚¤レクトジャンプリンク機è?を追åŠ?
270                    // 画面の利用権限有無などは調査不è¦?
271                    else if( useDirectJump ) {
272                            jspPrint( makeDirectLink() );
273                    }
274                    else {
275                            if( isFileCheck() && isGamenCheck() && markList.indexOf( onLink ) >= 0 ) {
276                                    // 3.5.6.2 (2004/07/05) makeTag() より移å‹?
277                                    if( filePath ) {
278                                            String furl  = get( "href" );
279    
280                                            fileURL = StringUtil.urlAppend( baseURL,furl );
281                                            String filename =  HybsSystem.url2dir( fileURL );
282    
283                                            set( "href",filename );
284                                    }
285    
286                                    // 4.3.7.1 (2009/06/08)
287                                    String tag = makeTag();
288                                    if( useURLCheck ) {
289                                            if( hrefOnly ) {
290                                                    // 4.3.7.4 (2009/07/01) 循環参ç?を解æ¶?
291                                                    tag = XHTMLTag.addURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime );
292                                            }
293                                            else {
294                                                    // 4.3.7.4 (2009/07/01) 循環参ç?を解æ¶?
295                                                    tag = XHTMLTag.embedURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime );
296                                            }
297                                    }
298                                    
299                                    // 5.8.2.1 (2014/12/14) URLトã?クンプラグイン
300                                    if( ctArray != null && ctArray.size() > 0 ){
301                                            for( CreateToken ct : ctArray){
302                                                    if( hrefOnly ){
303                                                            tag = ct.generateURL( tag, System.currentTimeMillis() + urlCheckTime, null );
304                                                    }
305                                                    else{
306                                                            tag = ct.embedToken( tag, System.currentTimeMillis() + urlCheckTime, null );
307                                                    }
308                                            }
309                                    }
310                                    
311                                    jspPrint( tag );
312    //                              jspPrint( makeTag() );
313                            }
314                    }
315    
316                    return(EVAL_PAGE);
317            }
318    
319            /**
320             * タグリブオブジェクトをリリースしますã?
321             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
322             *
323             * @og.rev 2.0.0.4 (2002/09/27) カスタãƒ?‚¿グの release() メソãƒ?ƒ‰をã?追åŠ?
324             * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応ã?release2() ã‚?doEndTag()で呼ぶã€?
325             * @og.rev 3.1.2.0 (2003/04/07) リンクæŒ?®š時に、画面IDを渡して、実アドレスを求める事ができる様にするã€?
326             * @og.rev 3.1.8.0 (2003/05/16) GAMENID属æ?の?µ?²?¬への自動セãƒ?ƒˆを行うかどã�?�‹を決める属æ?( useGamenId )を追åŠ??
327             * @og.rev 3.5.2.0 (2003/10/20) markList属æ?を追åŠ?
328             * @og.rev 3.5.5.0 (2004/03/12) xlink属æ?を追åŠ?
329             * @og.rev 3.5.6.2 (2004/07/05) keys , vals属æ?を追åŠ?
330             * @og.rev 3.7.1.0 (2005/04/26) useDirectJump , useRequestCache , delKeys 属æ?を追åŠ?
331             * @og.rev 4.0.0.0 (2005/09/30) validDuration 属æ?を追åŠ?
332             * @og.rev 4.3.7.0 (2009/06/01) useURLCheck属æ?を追åŠ?
333             * @og.rev 5.5.5.6 (2012/08/31) hrefTarget属æ?を追åŠ?
334             * @og.rev 5.8.2.1 (2014/12/14) トã?クンプラグイン対å¿?extToken,ctArray属æ?を追åŠ?
335             *
336             */
337            @Override
338            protected void release2() {
339                    super.release2();
340                    column                  = null;
341                    onLink                  = "true";       // true またã? 1
342                    markList                = "true|TRUE|1";        // 3.5.2.0 (2003/10/20)
343                    fileCheck               = false;
344                    filePath                = false;
345                    baseURL                 = HybsSystem.sys( "FILE_URL" );
346                    fileURL                 = baseURL;
347                    gamenId                 = null;
348                    useGamenId              = true;
349                    xlink                   = false;        // 3.5.5.0 (2004/03/12)
350                    keys                    = null;         // 3.5.6.2 (2004/07/05)
351                    vals                    = null;         // 3.5.6.2 (2004/07/05)
352                    useDirectJump   = false;        // 3.7.1.0 (2005/04/26)
353                    useRequestCache = true;         // 3.7.1.0 (2005/04/26)
354                    delKeys                 = null;         // 3.7.1.0 (2005/04/26)
355                    validDuration   = -1;
356                    hrefOnly                = false;        // 4.0.0 (2005/11/30)
357                    hrefTarget              = false;        // 5.5.5.6 (2012/08/31)
358                    useURLCheck             = false;        // 4.3.7.0 (2009/06/01)
359                    urlCheckUser    = null;         // 4.3.7.0 (2009/06/01)
360                    urlCheckTime    = 1000*60*60*24;        // 4.3.7.0 (2009/06/01)
361                    extToken                = null;                         // 5.8.2.1 (2014/12/14)
362                    ctArray                 = null;                         // 5.8.2.1 (2014/12/14)
363            }
364    
365            /**
366             * リンクを作æ?しますã?
367             *
368             * @og.rev 3.5.5.0 (2004/03/12) xlink 属æ?に応じたリンクæ–?­—を作æ?しますã?
369             * @og.rev 3.5.6.2 (2004/07/05) XHTMLTag の変換値のみを返す様に変更ã€?
370             * @og.rev 3.7.0.3 (2005/03/01) リンク作æ?時に行番号を引数に追åŠ?�™るã?
371             * @og.rev 4.0.0.0 (2005/11/30) href 属æ?のみを返しますã?
372             * @og.rev 4.0.1.0 (2007/12/17) BACK_ADDRESSの追åŠ?
373             * @og.rev 4.3.3.5 (2008/11/08) サーバã?アドレスを取得する際に、リクエストから取得するよã�?�«変更しますã?
374             * @og.rev 4.3.7.0 (2009/06/01) URLチェãƒ?‚¯機è?対å¿?
375             * @og.rev 4.3.7.1 (2009/06/08) ↑ã?実è£?‚’#doEndTagに移å‹?
376             * @og.rev 5.5.5.6 (2012/08/31) 「href="*******" target="******"ã€?とã�?�† キー付きのæ–?­—å?を作æ?
377             *
378             * @return      リンクタグæ–?­—å?
379             */
380            @Override
381            protected String makeTag() {
382    
383                    makeGamenLink();                // 3.5.6.2 (2004/07/05)
384                    if( get( "body" ) == null ) { set( "body" , get( "href" ) ); }
385    
386                    // xlink と通常の link では、URL接続文字が異なるã?
387                    String sep = ( xlink ) ? "&amp;" : "&" ;
388    
389                    String urlEnc = XHTMLTag.urlEncode( keys,vals,sep );
390                    // 3.5.6.2 (2004/07/05) addBackGamenId() メソãƒ?ƒ‰のå†?®¹を移å‹?
391                    if( useGamenId ) {
392                            String backGamenId = getGUIInfoAttri( "KEY" );  // 4.0.0 (2005/01/31)
393                            urlEnc += sep + "BACK_ROW={I}" + sep + "BACK_GAMENID=" + backGamenId ;  // 3.7.0.3 (2005/03/01)
394                            if( gamenId != null && gamenId.length() > 0 ) {
395                                    urlEnc += sep + "GAMENID=" + gamenId ;
396                            }
397                            // 4.0.1.0 (2007/12/17) gamenIdがあるå?合ã?backAddressを付加するã€?BackGamenTagではこれで戻ã‚?
398                            String guiAddress = getGUIInfoAttri( "ADDRESS" );
399    
400                            // 4.3.3.5 (2008/11/08) サーバã?アドレスを取得する際に、リクエストから取得するよã�?�«変更しますã?
401    //                      String backAddress = sys("CONTEXT_URL") + "jsp/"+guiAddress+"/index.jsp";
402                            String backAddress = getContextURL() + guiAddress + "/index.jsp";
403                            urlEnc += sep + "BACK_ADDRESS=" + backAddress;
404                    }
405    
406                    // 4.0.0 (2005/11/30) href 属æ?のみを返しますã?
407                    if( hrefOnly ) {
408                            return XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep );
409                    }
410    
411                    // 5.5.5.6 (2012/08/31) 「href="*******" target="******"ã€?とã�?�† キー付きのæ–?­—å?を作æ?
412                    if( hrefTarget ) {
413                            StringBuilder hrefTemp = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
414    
415                            hrefTemp.append( "href=\"" ).append( XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep ) ).append( "\"" );
416    
417                            String target = get( "target" ) ;
418                            if( target != null && !target.isEmpty() ) {
419                                    hrefTemp.append( " target=\"" ).append( target ).append( "\"" );
420                            }
421    
422                            return hrefTemp.toString() ;
423                    }
424    
425                    if( xlink ) {
426                            return XHTMLTag.xlink( getAttributes(),urlEnc ) ;
427                    }
428                    else {
429                            return XHTMLTag.link( getAttributes(),urlEnc ) ;
430                    }
431            }
432    
433            /**
434             * ãƒ?‚¤レクトジャンプリンクを作æ?しますã?
435             *
436             * gamenId を指定しなければ、この画面が指定されたとè€?�ˆますã?
437             * target を指定しなければã€?_blank" を指定しますã?
438             * msg がなければ(またã?、BODY部が空の場å�?、画面名にこã?リンクを作æ?しますã?
439             *
440             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
441             * @og.rev 4.0.0.0 (2005/09/30) リンクæ–?­—å?をハãƒ?‚·ュ化しますã?
442             * @og.rev 4.3.3.5 (2008/11/08) サーバã?アドレスを取得する際に、リクエストから取得するよã�?�«変更しますã?
443             *
444             * @return      ãƒ?‚¤レクトジャンプリンクæ–?­—å?
445             */
446            private String makeDirectLink() {
447    
448                    // gamenId を指定しなければ、この画面が指定されたとè€?�ˆますã?
449                    if( gamenId == null ) {
450                            gamenId = getGUIInfoAttri( "KEY" );
451                    }
452    
453                    // キャãƒ?‚·ュæƒ??と keys,valsæƒ??を設定しますã?
454                    if( useRequestCache ) { makeRequestCache2Vals( gamenId ); }
455                    String urlEnc = XHTMLTag.urlEncode( keys,vals );
456                    urlEnc = urlEnc + "&GAMENID=" + gamenId ;
457    
458                    String href = get( "href" );
459                    if( href == null || href.length() == 0 ) {
460                            // 4.3.3.5 (2008/11/08) サーバã?アドレスを取得する際に、リクエストから取得するよã�?�«変更しますã?
461    //                      href = sys( "CONTEXT_URL" ) + "jsp/index.jsp" ;
462                            href = getContextURL() + "index.jsp" ;
463                    }
464    
465                    String redirectURL = href + "?" + urlEnc ;
466                    String name = getGUIInfoAttri( "LNAME" );
467    
468                    String validDate = null;        // 設定されなã�??合ã?、無制é™?
469                    if( validDuration != 0 ) {
470                            if( validDuration < 0 ) {    // マイナスの場合ã?、å?期å?が使われますã?
471                                    validDuration = sysInt( "LINK_VALID_DURATION_DAYS" );
472                            }
473                                                                    //  ミリç§?   ç§?   時間
474                            long nowTime = System.currentTimeMillis() + 1000L * 3600L * 24L * validDuration ;
475                            validDate = HybsSystem.getDate( nowTime,"yyyyMMdd" );
476                    }
477                    String userid   = getUser().getUserID();
478    
479                    URLXfer xfer = new URLXfer();
480                    // redirectURL,name,validDate,userid
481                    return xfer.getRandomURL( redirectURL,name,validDate,userid );
482            }
483    
484            /**
485             * リクエストキャãƒ?‚·ュæƒ??を加味した keys,vals をå?作æ?しますã?
486             * こã?メソãƒ?ƒ‰は、ダイレクトジャンプ時のみ有効ですã?
487             *
488             * リクエスト情報のMapを取りå?しますã?そã?ときã?keys,vals を優先して
489             * 設定しますã?
490             *
491             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
492             *
493             * @param       gamenId 画面ID(リクエストキャãƒ?‚·ュの取り出しキー)
494             */
495            @SuppressWarnings(value={"unchecked"})
496            private void makeRequestCache2Vals( final String gamenId ) {
497                    Map<String,String[]> cache = new HashMap<String,String[]>();
498    
499                    String cacheKey = HybsSystem.REQ_CACHE_KEY + gamenId ;
500                    Map<String,String[]> map = (Map<String,String[]>)getSessionAttribute( cacheKey );
501                    if( map != null ) { cache.putAll( map ); }
502    
503                    if( keys != null ) {
504                            for( int i=0; i<keys.length; i++ ) {
505                                    // keys,vals をキャãƒ?‚·ュに上書ã�? キャãƒ?‚·ュは、文字å?配å?)
506                                    String[] temp = new String[] { vals[i] } ;
507                                    cache.put( keys[i],temp );
508                            }
509                    }
510    
511                    // ãƒ?‚¤レクトジャンプするためã?画面IDは、別途設定するためã?削除しておきますã?
512                    cache.remove( "GAMENID" );
513    
514                    // 使用しなã�?‚­ーをã?削除しておきますã?
515                    if( delKeys != null ) {
516                            for( int i=0; i<delKeys.length; i++ ) {
517                                    cache.remove( delKeys[i] );
518                            }
519                    }
520    
521                    // マップキーを取得ã?キャãƒ?‚·ュ値は、String[] なので、è¤?•°キー登録するã€?
522                    String[] cKeys = cache.keySet().toArray( new String[cache.size()] );
523    
524                    ArrayList<String> v_keys = new ArrayList<String>();
525                    ArrayList<String> v_vals = new ArrayList<String>();
526                    for( int i=0; i<cKeys.length; i++ ) {
527                            String   kk = cKeys[i];
528                            String[] vv = cache.get( kk );
529                            if( vv != null ) {
530                                    for( int j=0; j<vv.length; j++ ) {
531                                            v_keys.add( kk );
532                                            v_vals.add( vv[j] );
533                                    }
534                            }
535                    }
536    
537                    keys = v_keys.toArray( new String[v_keys.size()] );
538                    vals = v_vals.toArray( new String[v_vals.size()] );
539            }
540    
541            /**
542             * ファイルの存在チェãƒ?‚¯を行いますã?
543             *
544             * 実ファイルは、URL(httpの引数)より、変換して求めますã?
545             *
546             * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張ã‚?張らなã�?‚’自動判断するã€?
547             *
548             * @return      ファイルが存在する(true)/存在しなã�?false)
549             */
550            private boolean isFileCheck() {
551                    boolean rtn = true;
552    
553                    if( fileCheck ) {
554                            File file = null;
555    
556                            String url  = get( "href" );
557                            if( url != null ) {
558                                    String fin = HybsSystem.url2dir( url );
559                                    file = new File( fin );
560                            }
561                            rtn = ( file != null && file.exists() );
562                    }
563    
564                    return rtn ;
565            }
566    
567            /**
568             * リンク先ã?画面のロールに応じて、リンクを張ã‚?張らなã�?‚’自動判断を行いますã?
569             *
570             * リンク先ã?画面?©?¤は、gamenId 属æ?でæŒ?®šしてください。それ以外ã?リンクはã€?
571             * 自動判断できませんã€?
572             * link タグ単独の場合に、画面にアクセスできなã�??合ã?、メãƒ?‚»ージも表示されませんã€?
573             * viewLink タグを利用されるå?合ã?、リンクのON/OFF で制御しますã?
574             *
575             * @og.rev 3.1.8.0 (2003/05/16) 画面のロールに応じて、リンクを張ã‚?張らなã�?‚’自動判断するã€?
576             * @og.rev 4.0.0.0 (2005/01/31) GUIオブジェクトがマップに無ければ、アクセスできなã�??
577             *
578             * @return      画面アクセス許可する(true)/許可しなã�?false)
579             */
580            private boolean isGamenCheck() {
581                    boolean rtn = true;
582    
583                    if( gamenId != null ) {
584                            GUIInfo guiInfo = getGUIInfo( gamenId );                // 4.0.0 (2005/01/31)
585    
586                            // 4.0.0 (2005/01/31) ユーザー毎にアクセスできるGUIが設定されてã�?‚‹為
587                            // 存在しなければ、アクセス不可とã�?�†ことã€?
588                            if( guiInfo == null ) { rtn = false; }
589                    }
590    
591                    return rtn ;
592            }
593    
594            /**
595             * 画面?©?¤とhref から、指定ã??µ?²?¬を作æ?しますã?
596             *
597             * @og.rev 3.1.2.0 (2003/04/07) リンクæŒ?®š時に、画面IDを渡して、実アドレスを求める事ができる様にするã€?
598             * @og.rev 3.1.8.0 (2003/05/16) リンク作æ?時に、kyes/values ã�?null の時ã?処ç�??修正ã€?
599             * @og.rev 3.1.8.0 (2003/05/16) GAMENID属æ?の?µ?²?¬への自動セãƒ?ƒˆを行うかどã�?�‹を決める属æ?( useGamenId )を追åŠ??
600             * @og.rev 3.1.8.0 (2003/05/16) 画面?©?¤が指定されたときã?リンクæƒ??作æ?方法を通常のリンク時にも適用するã€?
601             * @og.rev 3.5.5.0 (2004/03/12) URLを求めるã?に、GUIInfo#getRealAddress() を使用するã€?
602             * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実アドレスのパラメータをè?慮するã€?
603             *
604             */
605            private void makeGamenLink() {
606                    if( gamenId == null || gamenId.length() == 0 ) { return ; }     // 4.0.0 (2005/11/30)
607    
608                    GUIInfo guiInfo = getGUIInfo( gamenId );                // 4.0.0 (2005/01/31)
609                    if( guiInfo == null ) { return ; }      // 見つからなã�??合ã?、アクセス不可
610    
611                    String address = guiInfo.getRealAddress( get( "href" ) );
612                    String url = getRequestParameter( address );
613                    set( "href",url );
614    
615                    String label = guiInfo.getLabel();
616                    if( get( "title" ) == null ) {
617                            set( "title","To:" + label );
618                    }
619                    if( get( "body" ) == null ) {
620                            set( "body",label );
621                    }
622            }
623    
624            /**
625             * リクエストからサーバã?アドレス(例:http://hn5120:8824/ver4/jsp/)を取得しますã?
626             *
627             * @og.rev 4.3.3.5 (2008/11/08) 新規追åŠ??
628             * @og.rev 5.4.3.8 (2011/01/24) プロトコルhttps対å¿?
629             *
630             * @return      サーバã?アドレスæ–?­—å?
631             */
632            private String getContextURL() {
633                    StringBuilder link = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
634                    HttpServletRequest request = (HttpServletRequest) getRequest();
635                    //link.append( "http://" );
636                    link.append( request.getScheme() ).append( "://" ); // 5.4.3.8
637                    link.append( request.getServerName() ).append( ":" );
638                    link.append( request.getServerPort() );
639                    link.append( request.getContextPath() );
640                    link.append( "/jsp/" );
641                    return link.toString();
642            }
643    
644            /**
645             * 【HTML】リンク先ã?MIMEタイプをæŒ?®šしますã?
646             *
647             * @og.tag リンク先ã?MIMEタイプをæŒ?®šしますã?
648             *
649             * @param       type MIMEタイãƒ?
650             */
651            public void setType( final String type ) {
652                    set( "type",getRequestParameter( type ) );
653            }
654    
655            /**
656             * 【HTML】この要ç´?‚’リンクの対象とするための名前を指定しますã?
657             *
658             * @og.tag こã?要ç´?‚’リンクの対象とするための名前を指定しますã?
659             *
660             * ※ HTML5では、a要ç´??name属æ?はå»?­¢されてã�?�¾すã? 
661             * HTML4.01におけるname属æ?は、ウェブã?ージå†??特定å?æ‰?�«名前を付けてã€?
662             * ペã?ジå†?ƒªンクを作æ?する際などに使用してã�?�¾したã€?HTML5で同様ã?
663             * 機è?を作æ?する場合にはid属æ?を使用しますã? id属æ?は、ã?とつの
664             * æ–?›¸の中では重è¤?�—て同じ名前を付けることはできなã�??でã€?
665             * ウェブã?ージå†??場æ‰?‚’ä¸?„�に特定できますã? 
666             *
667             * @param       name 名前
668             * @see         <a href="http://www.htmq.com/html5/a.shtml">a</a>
669             */
670            public void setName( final String name ) {
671                    set( "name",getRequestParameter( name ) );
672            }
673    
674            /**
675             * 【TAG】リンクをつけたã�?‚«ラãƒ?‚’æŒ?®šしまã�?ViewLink タグと併用)ã€?
676             *
677             * @og.tag
678             * こã?カラãƒ?��のTableModelに対してã€?ViewLink タグが存在する場合ã?,
679             * リンクを張りますã?
680             *
681             * @param       clm カラãƒ?
682             */
683            public void setColumn( final String clm ) {
684                    this.column = getRequestParameter( clm );
685            }
686    
687            /**
688             * 【HTML】リンク先ã?URLを指定しますã?
689             *
690             * @og.tag リンク先ã?URLを指定しますã?
691             *
692             * @param       href リンク先ã?URL
693             */
694            public void setHref( final String href ) {
695                    set( "href",getRequestParameter( href ) );
696            }
697    
698            /**
699             * 【HTML】リンク先ã?基本となるè¨?ªžコードをæŒ?®šしますã?
700             *
701             * @og.tag リンク先ã?基本となるè¨?ªžコードをæŒ?®šしますã?
702             *
703             * @param       hreflang è¨?ªžコーãƒ?
704             */
705            public void setHreflang( final String hreflang ) {
706                    set( "hreflang",getRequestParameter( hreflang ) );
707            }
708    
709            /**
710             * 【HTML】このæ–?›¸から見た、href属æ?でæŒ?®šされるリンク先との関係をæŒ?®šしますã?
711             *
712             * @og.tag こã?æ–?›¸から見た、href属æ?でæŒ?®šされるリンク先との関係をæŒ?®šしますã?
713             *
714             * @param       rel リンク先との関ä¿?
715             */
716            public void setRel( final String rel ) {
717                    set( "rel",getRequestParameter( rel ) );
718            }
719    
720            /**
721             * 【HTML】href属æ?でæŒ?®šされるリンク先から見た、このæ–?›¸との関係をしてしますã?
722             *
723             * @og.tag href属æ?でæŒ?®šされるリンク先から見た、このæ–?›¸との関係をしてしますã?
724             *
725             * @param       rev リンク先から見たこã?æ–?›¸との関ä¿?
726             */
727            public void setRev( final String rev ) {
728                    set( "rev",getRequestParameter( rev ) );
729            }
730    
731            /**
732             * 【HTML】リンク先ã?æ–?­—コードセãƒ?ƒˆを指定しますã?
733             *
734             * @og.tag リンク先ã?æ–?­—コードセãƒ?ƒˆを指定しますã?
735             *
736             * @param       charset æ–?­—コードセãƒ?ƒˆ
737             */
738            public void setCharset( final String charset ) {
739                    set( "charset",getRequestParameter( charset ) );
740            }
741    
742            /**
743             * 【HTML】リンク先ã?表示ターゲãƒ?ƒˆを指定しますã?
744             *
745             * @og.tag リンク先ã?æ–?›¸を表示させるフレーãƒ??またã?ウィンドウの名前を指定しますã?
746             *
747             * @param       target ターゲãƒ?ƒˆ
748             */
749            public void setTarget( final String target ) {
750                    set( "target",getRequestParameter( target ) );
751            }
752    
753            /**
754             * 【HTML】リンクボタンの形状(イメージマッãƒ?rect/circle/poly/default)を指定しますã?
755             *
756             * @og.tag リンクボタンの形状(イメージマッãƒ?rect/circle/poly/default)を指定しますã?
757             *
758             * @param       shape 形状(イメージマッãƒ?rect/circle/poly/default)
759             */
760            public void setShape( final String shape ) {
761                    set( "shape",getRequestParameter( shape ) );
762            }
763    
764            /**
765             * 【HTML】リンクボタンの座標をæŒ?®šしますã?
766             *
767             * @og.tag
768             * coords セãƒ?ƒˆ
769             *
770             * @param       coords リンクボタンの座æ¨?
771             */
772            public void setCoords( final String coords ) {
773                    set( "coords",getRequestParameter( coords ) );
774            }
775    
776            /**
777             * 【TAG】リンク先に渡すキーをCSV形式でè¤?•°æŒ?®šしますã?
778             *
779             * @og.tag リンク先に渡すキーを指定しますã?
780             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
781             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
782             *
783             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
784             *
785             * @param       key キー(CSV形å¼?
786             */
787            public void setKeys( final String key ) {
788                    keys = getCSVParameter( key );
789            }
790    
791    //      /**
792    //       * 【å»?­¢】リンク先に渡すå?をCSV形式でè¤?•°æŒ?®šしますã?
793    //       *
794    //       * @og.tag リンク先に渡すå?を指定しますã?
795    //       *
796    //       * @og.rev 3.5.6.2 (2004/07/05) å»?­¢しますã?
797    //       * @og.rev 4.0.0.0 (2007/06/18) å»?­¢
798    //       *
799    //       * @param       value 値(CSV形å¼?
800    //       * @deprecated  vals 属æ?を使用してくださいã€?
801    //       */
802    //      @Deprecated public void setValue( final String value ) {
803    //              setVals( value );
804    //      }
805    
806            /**
807             * 【TAG】リンク先に渡すå?をCSV形式でè¤?•°æŒ?®šしますã?
808             *
809             * @og.tag リンク先に渡すå?を指定しますã?
810             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
811             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
812             *
813             * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
814             *
815             * @param       val 値(CSV形å¼?
816             */
817            public void setVals( final String val ) {
818                    vals = getCSVParameter( val );
819            }
820    
821            /**
822             * 【TAG】リンクを張ã‚?true or 1)/張らなã�?false or 0)の設定をæŒ?®šしまã�?初期値:true)ã€?
823             *
824             * @og.tag
825             * リンクを張るå?合ã?ã€?true"(またã? "1") リンクを張らなã�?
826             * 場合ã?, "true以å¤?(またã? "0")をセãƒ?ƒˆしますã?
827             * 初期値はã€?"true"(リンクを張ã‚?ですã?
828             * さらに、[カラãƒ?��] で、動çš?�«カラãƒ??値で、リンクを張るã?張らなã�?‚’
829             * 選ぶ事が可能になりますã?値はã€?true"(またã? "1") で、ã?ークしますã?
830             * 追è¨?3.5.2.0 (2003/10/20)?šmarkList属æ?に、å?ç�?¯¾象æ–?­—å?郡を指定できますã?
831             * これにより、リンクをå?ç�?�™るかどã�?�‹の判断がã?true,1 以外にも使用できるようになりましたã€?
832             *
833             * @og.rev 3.5.2.0 (2003/10/20) markList属æ?を追åŠ?
834             *
835             * @param       flag リンクの設定[true,1:リンクを張ã‚?true,1以å¤?リンクを張らない]
836             */
837            public void setOnLink( final String flag ) {
838                    onLink = nval( getRequestParameter( flag ),onLink );
839            }
840    
841            /**
842             * 【TAG】ファイルの存在チェãƒ?‚¯を行うかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
843             *
844             * @og.tag
845             * "true"の場合ã?、ファイルの存在チェãƒ?‚¯を行い、ファイルがあれã?
846             * リンクを張りますã?ファイルが存在しなã�??合ã?, 何も表示されませんã€?
847             * 初期値はã€?"false"(ファイルチェãƒ?‚¯を行わなã�?ですã?
848             * 注意:現状、viewLink タグからの使用は出来ませんので、ごäº?‰¿願いますã?
849             *
850             * @param       flag 存在チェãƒ?‚¯[true:行う/false:行わない])
851             */
852            public void setFileCheck( final String flag ) {
853                    fileCheck = nval( getRequestParameter( flag ),fileCheck );
854            }
855    
856            /**
857             * 【TAG】アドレスにファイルのãƒ?‚£レクトリ直接のアドレスを指定するかどã�?�‹[true/false]設定しまã�?初期値:false)ã€?
858             *
859             * @og.tag
860             * "true"の場合ã?、ファイルの物ç�?ƒ‡ィレクトリをリンクしますã?
861             * 初期値はã€?"false"(ファイルの直接アドレスを行わなã�?ですã?
862             *
863             * @param       flag ファイルのãƒ?‚£レクトリ直接のアドレスのæŒ?®š[true:直接アドレス/そã?ä»?通常のURL]
864             */
865            public void setFilePath( final String flag ) {
866                    filePath = nval( getRequestParameter( flag ),filePath );
867            }
868    
869            /**
870             * 【TAG】画面ID属æ?を登録しますã?
871             *
872             * @og.tag
873             * gamenId 属æ?は、画面IDをキーに、実アドレスを求めるã?に使用しますã?
874             * 画面IDが指定された場合ã?、実アドレスに変換する。指定されなã�??合ã?ã€?
875             * href 属æ?をそのままリンクæƒ??を作æ?しますã?
876             * 画面IDを指定するå?合ã? href は、JSPファイルå�?例えば、index.jsp ç­?ですã?
877             *
878             * @og.rev 3.1.2.0 (2003/04/07) リンクæŒ?®š時に、画面IDを渡して、実アドレスを求める事ができる様にするã€?
879             *
880             * @param   id 画面ID属æ?
881             */
882            public void setGamenId( final String id ) {
883                    gamenId = nval( getRequestParameter( id ),gamenId );
884            }
885    
886            /**
887             * 【TAG】GAMENID,BACK_GAMENID 属æ?を付加するかどã�?�‹[true/false]を設定しまã�?初期値:true)ã€?
888             *
889             * @og.tag
890             * "true"の場合ã?、GAMENID,BACK_GAMENID 属æ?ã‚?href に追åŠ?�—ますã?(?KEY1=VAL1&amp;KEY2=VAL2?¥?¥?¥)
891             * "false"の場合ã?、付加しませんã€?
892             * JavaScript ã‚??通常のファイル( .html ã‚?.pdf ç­?に、GAMENID,BACK_GAMENID 属æ?を付けなã�?‚ˆã�?�«
893             * する事が出来ますã?
894             * 初期値はã€?"true"(GAMENID,BACK_GAMENID 属æ?ã‚?href に追åŠ?�™ã‚?ですã?
895             *
896             * @og.rev 3.1.8.0 (2003/05/16) GAMENID属æ?の?µ?²?¬への自動セãƒ?ƒˆを行うかどã�?�‹を決める属æ?( useGamenId )を追åŠ??
897             *
898             * @param       flag BACK_GAMENID 属æ?を付加するかどã�?�‹[true:追åŠ?�™ã‚?そã?ä»?追åŠ?�—ない]
899             */
900            public void setUseGamenId( final String flag ) {
901                    useGamenId = nval( getRequestParameter( flag ),useGamenId );
902            }
903    
904            /**
905             * 【TAG】å?ç�?�™るã?ークをã?"|"区åˆ?‚Šのæ–?­—å?でæŒ?®šしますã?
906             *
907             * @og.tag
908             * markListで与えられた文字å?に、onLinkæ–?­—å?(大æ–?­?小文字ã?区別あり)ã�?
909             * 含まれてã�?‚Œば、å?ç�?�—ますã?
910             * 例えばã€?A","B","C" とã�?�†æ–?­—å?がã?onLink でæŒ?®šされた
911             * 場合に処ç�?�™るよã�?�«したã�??合ã?ã€?A|B|C" をセãƒ?ƒˆしますã?
912             * markList には、[カラãƒ?��]æŒ?®šが可能ですã?
913             * 初期値はã€?"true|TRUE|1"ですã?
914             *
915             * @og.rev 3.5.2.0 (2003/10/20) 新規追åŠ?
916             *
917             * @param       list 処ç�?�™るã?ーク(indexOf による含ã‚?含まなã�?ˆ¤å®?
918             */
919            public void setMarkList( final String list ) {
920                    markList = nval( getRequestParameter( list ),markList );
921            }
922    
923            /**
924             * 【TAG】href ではなくã?xlink:href を使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
925             *
926             * @og.tag
927             * xlink:href 属æ?は、XMLでのリンクを指定しますã?そã?場合ã?href 属æ?でæŒ?®šしã�?
928             * å†?®¹は、xlink:href に置き換えられますã?
929             * またã?URLæ–?­—å?の接続文字å?(&amp;)をã?(&amp;amp;)で接続しますã?これは、xlink としてã€?
930             * XMLファイルに埋め込ã‚??合に、置き換えがå¿?¦�な為ですã?
931             * 初期値はã€?"false"(通常の href) ですã?
932             *
933             * @og.rev 3.5.5.0 (2004/03/12) 新規追åŠ?
934             *
935             * @param       lnk XMLリンクを使用するかどã�?�‹[true:使用する/false:使用しない]
936             */
937            public void setXlink( final String lnk ) {
938                    xlink = nval( getRequestParameter( lnk ),xlink );
939            }
940    
941            /**
942             * 【TAG】ダイレクトジャンプを使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
943             *
944             * @og.tag
945             * ãƒ?‚¤レクトジャンãƒ?æŒ?®šã?画面へ直接飛ã?ã�?は、簡易ワークフローçš?�«、画面への
946             * リンクを作æ?する場合に使用しますã?ä¸?ˆ¬には、メール本æ–?�«記述して、指定ã?画面まで
947             * 直接飛ã?すå?合に使用しますã?
948             * こã?リンクは、その画面の index.jsp に直接ジャンプしますã?
949             *
950             * gamenId を指定しなければ、この画面が指定されたとè€?�ˆますã?
951             * target を指定しなければã€?_blank" を指定しますã?
952             * msg がなければ(またã?、BODY部が空の場å�?、画面名にこã?リンクを作æ?しますã?
953             * 初期値はã€?"false"(使用しなã�? ですã?
954             *
955             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
956             *
957             * @param       directJump ãƒ?‚¤レクトジャンプを使用するかどã�?�‹[true:使用する/false:使用しない]
958             */
959            public void setUseDirectJump( final String directJump ) {
960                    useDirectJump = nval( getRequestParameter( directJump ),useDirectJump );
961            }
962    
963            /**
964             * 【TAG】リクエストキャãƒ?‚·ュæƒ??を使用するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
965             *
966             * @og.tag
967             * リクエストキャãƒ?‚·ュæƒ??は、戻るリンクで画面を差表示(command=RENEW)する場合に
968             * æœ?¾Œに検索に利用された情報をキャãƒ?‚·ュしておき、å?利用する場合に利用する値ですã?
969             * ãƒ?‚¤レクトジャンプ機è?(useDirectJum=true)の場合ã?み有効ですã?
970             * 戻るリンクによる再表示は、各画面自身が持ってã�?‚‹æƒ??を利用しますがã€?
971             * ãƒ?‚¤レクトジャンプ等で、すでにキャãƒ?‚·ュが存在してã�?�ªã�?セãƒ?‚·ョンが異なってã�?‚‹)
972             * 場合に、リンクæƒ??に直接紐付けて、å?検索させるå¿?¦�がある場合に利用しますã?
973             * こã?キャãƒ?‚·ュは、keys,vals による値の再設定で、書き換えることが可能ですã?
974             *
975             * 初期値はã€?"true"(使用する) ですã?
976             *
977             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
978             *
979             * @param       useCache リクエストキャãƒ?‚·ュæƒ??を使用するかどã�?�‹[true:使用する/false:使用しない]
980             */
981            public void setUseRequestCache( final String useCache ) {
982                    useRequestCache = nval( getRequestParameter( useCache ),useRequestCache );
983            }
984    
985            /**
986             * 【TAG】リクエストキャãƒ?‚·ュæƒ??使用時に使用しなã�?削除する)キーをCSV形式でè¤?•°æŒ?®šしますã?
987             *
988             * @og.tag
989             * リクエストキャãƒ?‚·ュæƒ??には、ä¸?ˆ¬に検索時に使用されたすべての引数ã�?
990             * 使用されますã?こã?引数をã?転送å?画面では、使用しなã�?‚±ースがありã?そã?場合にã€?
991             * æŒ?®šã?キーæƒ??をã?削除しますã?
992             * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
993             * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
994             *
995             * @og.rev 3.7.1.0 (2005/04/26) 新規追åŠ?
996             *
997             * @param       key     使用しなã�?削除する)キーをCSV形式でè¤?•°æŒ?®?
998             */
999            public void setDelKeys( final String key ) {
1000                    delKeys = getCSVParameter( key );
1001            }
1002    
1003            /**
1004             * 【TAG】ダイレクトジャンプリンク時ã?ハッシュ化されたURLの有効期間を日数を指定しまã�?
1005             *              (初期値:LINK_VALID_DURATION_DAYS[={@og.value org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS}])ã€?
1006             *
1007             * @og.tag
1008             * ãƒ?‚¤レクトジャンプリンクの引数を作æ?する場合ã?有効期限を指定できますã?
1009             * ここでは、設定時刻からの有効期間を日数æŒ?®šしますã?
1010             * 実際には、GE17のvalidDateカラãƒ?�«設定される、日付と現在日を比è¼?�—てã€?
1011             * 有効かどã�?�‹を判断しますã?
1012             * ゼロが指定された場合ã?、制限なしに設定されますã?マイナスの場合ã?、å?期å?が使われますã?
1013             * (初期値:ユーザー定数のLINK_VALID_DURATION_DAYS[={@og.value org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS}])ã€?
1014             *
1015             * @og.rev 4.0.0.0 (2005/09/30) 新規追åŠ?
1016             *
1017             * @param       validDura       URLの有効期間日数
1018             * @see         org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS
1019             */
1020            public void setValidDuration( final String validDura ) {
1021                    validDuration = nval( getRequestParameter( validDura ),validDuration );
1022            }
1023    
1024            /**
1025             * 【TAG】リンク(アンカータグ)ではなくã?href 属æ?をそのまま返すかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1026             *
1027             * @og.tag
1028             * 通常のリンクは、アンカータグ(aタグ)の状態で出力されますã?そã?場合ã?HTML上では
1029             * リンクとして表示されますã?こã?フラグをtrue にセãƒ?ƒˆすると、リンクæ–?­—å?
1030             * そã?もã?がå?力されますã?これは、リンクæ–?­—å?を作æ?してDBに登録する場合などに
1031             * 使用しますã?
1032             *
1033             * 初期値はã€?"false"(リンク) ですã?
1034             *
1035             * @og.rev 4.0.0.0 (2005/11/30) 新規追åŠ?
1036             *
1037             * @param       flag href 属æ?をそのまま返すかどã�?�‹(true:href属æ?/false:リンク)
1038             */
1039            public void setHrefOnly( final String flag ) {
1040                    hrefOnly = nval( getRequestParameter( flag ),hrefOnly );
1041            }
1042    
1043            /**
1044             * 【TAG】リンク(アンカータグ)ではなくã?href 属æ?と、target属æ?ã‚?キーも含めて返すかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1045             *
1046             * @og.tag
1047             * å†?®¹çš?�«は、hrefOnly と類似の機è?で、アンカータグ(aタグ)の出力ではなくã?href 属æ?とã€?
1048             * target属æ?ã‚?キーも含めて作æ?しますã?
1049             * 「href="*******" target="******"ã€?とã�?�†形式になりますã?
1050             * これは、クリãƒ?‚«ブルマップ等ã? href 属æ?と target属æ?の両方を使用するようなケースで使ã�?�¾すã?
1051             * またã?onLink、markList を使ったリンク作æ?可否の処ç�?‚’おこなったå?合ã?通常であればã€?
1052             * æŒ?®šã?カラãƒ??値が取得できますが、その場合ã?、å?頭æ–?­—å?がã?href かどã�?�‹を判定することでã€?
1053             * リンク作æ?可否の判断が可能ですã?
1054             * é€?�«è¨?�ˆば、この属æ?ã‚?true にセãƒ?ƒˆした場合ã?、å?頭æ–?­—å?がã?href で始まることが保障されますã?
1055             * hrefOnly = true と同時に設定したå?合ã?、hrefOnly が優先されますã?
1056             *
1057             * 初期値はã€?"false"(リンク) ですã?
1058             *
1059             * @og.rev 5.5.5.6 (2012/08/31) 新規追åŠ?
1060             *
1061             * @param       flag 「href="*******" target="******"ã€?とã�?�†形式をそã?まま返すかどã�?�‹(true:href,target属æ?/false:リンク)
1062             */
1063            public void setHrefTarget( final String flag ) {
1064                    hrefTarget = nval( getRequestParameter( flag ),hrefTarget );
1065            }
1066    
1067            /**
1068             * 【TAG】リンクアドレスにURLチェãƒ?‚¯用の確認キーを付加するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1069             *
1070             * @og.tag
1071             * こã?属æ?は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用しますã?
1072             * trueが指定された場合ã?リンクURLのパラメーターに、URL確認用のパラメーターがå?力されますã?
1073             * こã?パラメーターをã?URLCheckFilterが復号化し、正式なアクセスであるかどã�?�‹の判定を行いますã?
1074             *
1075             * 初期値はã€?"false"(確認キーをå?力しなã�? ですã?
1076             *
1077             * @og.rev 4.3.7.0 (2009/06/01) 新規追åŠ?
1078             *
1079             * @param       flag 暗号化するかかどã�?�‹ [true:暗号化すã‚?false:しない]
1080             * @see org.opengion.hayabusa.filter.URLCheckFilter
1081             */
1082            public void setUseURLCheck( final String flag ) {
1083                    useURLCheck = nval( getRequestParameter( flag ),useURLCheck );
1084            }
1085    
1086            /**
1087             * 【TAG】URLチェãƒ?‚¯用の確認キーに対して、リンクを開くことのできるユーザーIDを指定しまã�?初期値:ログインユーザー)ã€?
1088             *
1089             * @og.tag
1090             * URLチェãƒ?‚¯用の確認キーに対して、リンクを開くことのできるユーザーIDã‚?
1091             * カンマ区åˆ?‚ŠでæŒ?®šしますã?
1092             * "*"が指定された場合ã?ユーザーチェãƒ?‚¯は行われませんã€?
1093             *
1094             * 初期値はã€?ログインユーザーですã?
1095             *
1096             * @og.rev 4.3.8.0 (2009/08/01) 新規追åŠ?
1097             *
1098             * @param       user リンクにアクセス可能なユーザーä¸?¦§
1099             */
1100            public void setUrlCheckUser( final String user ) {
1101                    urlCheckUser = nval( getRequestParameter( user ),urlCheckUser );
1102            }
1103            
1104            /**
1105             * 【TAG】外部?ˆã?ラグイン?‰ã?トã?クンを利用する場合にプラグインを指定しますã?
1106             *
1107             * @og.tag
1108             * プラグインの名前を指定する事で、該当ã?CreateTokenを利用して
1109             * URLに対してトã?クンを付与しますã?
1110             * ??reatetToken_xxxのxxxを指定しますï¼?
1111             *
1112             * カンマ区åˆ?‚Šをå?解して、ã?ラグインをé?列として持ちますã?
1113             * 適応ã?前からé?番に行いますã?
1114             *
1115             * @og.rev 5.8.2.1 (2014/12/13) 新規追åŠ?
1116             *
1117             * @param       name 利用するCreateTokenプラグイン
1118             */
1119            public void setExtToken( final String name ) {
1120                    extToken = nval( getRequestParameter( name ),extToken );
1121                    ctArray = new ArrayList<CreateToken>();
1122                    
1123                    if( extToken != null && extToken.length() > 0 ){
1124                            String[] tokens = StringUtil.csv2Array( extToken );
1125                            for( String tk :tokens ){
1126                                    String cls = HybsSystem.sys( "CreateToken_" + tk ) ;    
1127                                    CreateToken ct = (CreateToken)HybsSystem.newInstance( cls );
1128                                    ctArray.add( ct );
1129                            }
1130                    }
1131            }
1132    
1133            /**
1134             * 【TAG】URLチェãƒ?‚¯用の確認キーに対して、リンクの有効期限を指定しまã�?初期値:60åˆ?ã€?
1135             *
1136             * @og.tag
1137             * URLチェãƒ?‚¯用の確認キーに対して、リンクが生成されてからの有効期限をå?単位で設定しますã?
1138             * 属æ?値の先é?に'D'をつけることで、日付指定を行うことができますã?
1139             * (D20090612 â‡?20090612まで(当日を含ã‚?は有効)
1140             *
1141             * 初期値は、現在時間を基準として+ "1440"(1日) ですã?
1142             *
1143             * @og.rev 4.3.8.0 (2009/08/01) 新規追åŠ?
1144             *
1145             * @param       time リンクの有効期限(åˆ?
1146             */
1147            public void setUrlCheckTime( final String time ) {
1148                    String tm = getRequestParameter( time );
1149    
1150                    if( tm != null && tm.length() > 0 && tm.charAt( 0 ) == 'D' ) {
1151                            if( tm.length() < 9 ) {
1152                                    String errMsg = "urlCheckTime属æ?の日付ã?YYYYMMDD形式でæŒ?®šして下さã�??"
1153                                                            + " 値=" + tm ;                 // 5.1.8.0 (2010/07/01) errMsg 修正
1154                                    throw new HybsSystemException( errMsg );
1155                            }
1156                            Calendar cal = new GregorianCalendar(
1157                                            Integer.valueOf( tm.substring( 1, 5 ) )
1158                                            ,Integer.valueOf( tm.substring( 5, 7 ) ) - 1
1159                                            ,Integer.valueOf( tm.substring( 7, 9 ) ) );
1160                            urlCheckTime = cal.getTimeInMillis() + (long)1000 * 60 * 60 * 24 - System.currentTimeMillis();
1161                    }
1162                    else {
1163                            urlCheckTime = nval( tm, (long)60*24 ) * 1000 * 60;
1164                    }
1165            }
1166    
1167            /**
1168             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
1169             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1170             *
1171             * @return こã?クラスのæ–?­—å?表現
1172             */
1173            @Override
1174            public String toString() {
1175                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
1176                                    .println( "VERSION"                     ,VERSION                )
1177                                    .println( "column"                      ,column                 )
1178                                    .println( "onLink"                      ,onLink                 )
1179                                    .println( "fileCheck"           ,fileCheck              )
1180                                    .println( "filePath"            ,filePath               )
1181                                    .println( "baseURL"                     ,baseURL                )
1182                                    .println( "fileURL"                     ,fileURL                )
1183                                    .println( "gamenId"                     ,gamenId                )
1184                                    .println( "useGamenId"          ,useGamenId             )
1185                                    .println( "markList"            ,markList               )
1186                                    .println( "xlink"                       ,xlink                  )
1187                                    .println( "useDirectJump"       ,useDirectJump  )
1188                                    .println( "useRequestCache"     ,useRequestCache)
1189                                    .println( "hrefOnly"            ,hrefOnly               )
1190                                    .println( "hrefTarget"          ,hrefTarget             )               // 5.5.5.6 (2012/08/31)
1191                                    .println( "validDuration"       ,validDuration  )
1192                                    .println( "keys"                        ,keys                   )
1193                                    .println( "vals"                        ,vals                   )
1194                                    .println( "delKeys"                     ,delKeys                )
1195                                    .println( "useURLCheck"         ,useURLCheck    )
1196                                    .println( "urlCheckUser"        ,urlCheckUser   )
1197                                    .println( "urlCheckTime"        ,urlCheckTime   )
1198                                    .println( "Other..."            ,getAttributes().getAttribute() )
1199                                    .fixForm().toString() ;
1200            }
1201    }