    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 */
    016package org.opengion.hayabusa.taglib;
    017
    018import java.io.File;
    019import java.util.List;
    020import java.util.ArrayList;
    021import java.util.Calendar;
    022import java.util.GregorianCalendar;
    023import java.util.HashMap;
    024import java.util.Map;
    025
    026import jakarta.servlet.http.HttpServletRequest;
    027
    028import org.opengion.fukurou.system.OgBuilder ;                          // 6.4.4.1 (2016/03/18)
    029import org.opengion.fukurou.system.DateSet;                                     // 6.4.2.0 (2016/01/29)
    030import org.opengion.fukurou.security.HybsCryptography;          // 5.8.8.0 (2015/06/05)
    031import org.opengion.fukurou.util.StringUtil;
    032import org.opengion.fukurou.util.XHTMLTag;
    033import org.opengion.fukurou.util.ToString;                                      // 6.1.1.0 (2015/01/17)
    034import org.opengion.hayabusa.common.HybsSystem;
    035import org.opengion.hayabusa.common.HybsSystemException;
    036// import org.opengion.hayabusa.html.CreateToken;                               // 5.8.2.1 (2014/12/13) 6.9.5.0 (2018/04/23) extToken 廃止
    037import org.opengion.hayabusa.resource.GUIInfo;
    038import org.opengion.hayabusa.resource.URLXfer;
    039
    040import static org.opengion.fukurou.util.StringUtil.nval;
    041
    042/**
    043 * HTML のaﾀｸﾞと同等のﾘﾝｸを作成するHTML拡張ﾀｸﾞです。
    044 *
    045 * @og.formSample
    046 * ●形式:&lt;og:link href="…" &gt;  ...  &lt;/og:link &gt;
    047 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    048 *
    049 * ●Tag定義:
    050 *   &lt;og:link
    051 *       type               【HTML】ﾘﾝｸ先のMIMEﾀｲﾌﾟを指定します
    052 *       name               【HTML】この要素をﾘﾝｸの対象とするための名前を指定します(HTML5より廃止)
    053 *       gamenId            【TAG】画面ID属性を登録します
    054 *       useGamenId         【TAG】GAMENID,BACK_GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true)
    055 *       column             【TAG】ﾘﾝｸをつけたいｶﾗﾑを指定します(ViewLink ﾀｸﾞと併用)
    056 *       keys               【TAG】ﾘﾝｸ先に渡すｷｰをCSV形式で複数指定します
    057 *       vals               【TAG】ﾘﾝｸ先に渡す値をCSV形式で複数指定します
    058 *       onLink             【TAG】ﾘﾝｸを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)
    059 *       markList           【TAG】処理するﾏｰｸを、"|"区切りの文字列で指定します
    060 *       href               【HTML】ﾘﾝｸ先のURLを指定します
    061 *       target             【HTML】ﾘﾝｸ先の表示ﾀｰｹﾞｯﾄを指定します
    062 *       caseKey            【TAG】このﾀｸﾞ自体を利用するかどうかの条件ｷｰを指定します(初期値:null)
    063 *       caseVal            【TAG】このﾀｸﾞ自体を利用するかどうかの条件値を指定します(初期値:null)
    064 *       caseNN             【TAG】指定の値が、null/ｾﾞﾛ文字列 でない場合(Not Null=NN)は、このﾀｸﾞは使用されます(初期値:判定しない)
    065 *       caseNull           【TAG】指定の値が、null/ｾﾞﾛ文字列 の場合は、このﾀｸﾞは使用されます(初期値:判定しない)
    066 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このﾀｸﾞは使用されます(初期値:判定しない)
    067 *       lbl                【TAG】ﾗﾍﾞﾙﾘｿｰｽのﾗﾍﾞﾙIDを指定します
    068 *       xlink              【TAG】href ではなく、xlink:href を使用するかどうか[true/false]を指定します(初期値:false)
    069 *       fileCheck          【TAG】ﾌｧｲﾙの存在ﾁｪｯｸを行うかどうか[true/false]を指定します(初期値:false)
    070 *       filePath           【TAG】ｱﾄﾞﾚｽにﾌｧｲﾙのﾃﾞｨﾚｸﾄﾘ直接のｱﾄﾞﾚｽを指定するかどうか[true/false]設定します(初期値:false)
    071 *       hreflang           【HTML】ﾘﾝｸ先の基本となる言語ｺｰﾄﾞを指定します
    072 *       rel                【HTML】この文書から見た、href属性で指定されるﾘﾝｸ先との関係を指定します
    073 *       rev                【HTML】href属性で指定されるﾘﾝｸ先から見た、この文書との関係をしてします
    074 *       charset            【HTML】ﾘﾝｸ先の文字ｺｰﾄﾞｾｯﾄを指定します
    075 *       shape              【HTML】ﾘﾝｸﾎﾞﾀﾝの形状(ｲﾒｰｼﾞﾏｯﾌﾟ rect/circle/poly/default)を指定します
    076 *       coords             【HTML】ﾘﾝｸﾎﾞﾀﾝの座標を指定します
    077 *       id                 【HTML】要素に対して固有の名前(id)をつける場合に設定します
    078 *       lang               【HTML】要素の内容と他の属性値の言語(lang,xml:lang)を指定します
    079 *       dir                【HTML】文字表記の方向(dir)を指定します
    080 *       title              【HTML】要素に対する補足的情報(title)を設定します
    081 *       style              【HTML】この要素に対して適用させるｽﾀｲﾙｼｰﾄ(style)を設定します
    082 *       tabindex           【HTML】ﾀﾌﾞの移動順(tabindex)を指定します(0 ～ 32767)
    083 *       accesskey          【HTML】ｱｸｾｽｷｰ(alt+ｷｰで直接指定)を割り当てます
    084 *       clazz              【HTML】要素に対して class 属性を設定します
    085 *       language           【TAG】ﾀｸﾞ内部で使用する言語ｺｰﾄﾞ[ja/en/zh/…]を指定します
    086 *       useDirectJump      【TAG】ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟを使用するかどうか[true/false]を指定します(初期値:false)
    087 *       useRequestCache    【TAG】ﾘｸｴｽﾄｷｬｯｼｭ情報を使用するかどうか[true/false]を指定します(初期値:true)
    088 *       hrefOnly           【TAG】ﾘﾝｸ(ｱﾝｶｰﾀｸﾞ)ではなく、href 属性をそのまま返すかどうか[true/false]を指定します(初期値:false)
    089 *       hrefTarget         【TAG】ﾘﾝｸ(ｱﾝｶｰﾀｸﾞ)ではなく、href 属性と、target属性を ｷｰも含めて返すかどうか[true/false]を指定します(初期値:false)
    090 *       delKeys            【TAG】ﾘｸｴｽﾄｷｬｯｼｭ情報使用時に使用しない(削除する)ｷｰをCSV形式で複数指定します
    091 *       onClick            【HTML】JavaScriptのｲﾍﾞﾝﾄ onClick を設定します(例:onClick="renew('query.jsp','QUERY');")
    092 *       onBlur             【HTML】JavaScriptのｲﾍﾞﾝﾄ onBlur を設定します(例:onBlur="this.value=value.toUpperCase();")
    093 *       onFocus            【HTML】JavaScriptのｲﾍﾞﾝﾄ onFocus を設定します
    094 *       ondblClick         【HTML】JavaScriptのｲﾍﾞﾝﾄ ondblClick を設定します
    095 *       onMouseDown        【HTML】JavaScriptのｲﾍﾞﾝﾄ onMouseDown を設定します
    096 *       onMouseUp          【HTML】JavaScriptのｲﾍﾞﾝﾄ onMouseUp を設定します
    097 *       onMouseMove        【HTML】JavaScriptのｲﾍﾞﾝﾄ onMouseMove を設定します
    098 *       onMouseOut         【HTML】JavaScriptのｲﾍﾞﾝﾄ onMouseOut を設定します
    099 *       onMouseOver        【HTML】JavaScriptのｲﾍﾞﾝﾄ onMouseOver を設定します
    100 *       roles              【TAG】ﾛｰﾙをｾｯﾄします
    101 *       useURLCheck        【TAG】ﾘﾝｸｱﾄﾞﾚｽにURLﾁｪｯｸ用の確認ｷｰを付加するかどうか[true/false]を指定します(初期値:false)
    102 *       urlCheckUser       【TAG】URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸを開くことのできるﾕｰｻﾞｰIDを指定します(初期値:ﾛｸﾞｲﾝﾕｰｻﾞｰ)
    103 *       urlCheckTime       【TAG】URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸの有効期限を指定します(初期値:1440分=1日)
    104 *       urlCheckCrypt      【TAG】URLﾁｪｯｸの暗号化ｷｰを指定します。受け側に依存します。未指定の場合はﾃﾞﾌｫﾙﾄの値が利用されます。
    105 *       useHrefEncode      【TAG】href 部分に対して、(;%)の2文字だけ URLEncodeを行うかどうかを指定します(初期値:USE_HREF_URLENCODE[=false])
    106 *       strictCheck        【TAG】(通常は使いません)ｶﾗﾑIDの存在ﾁｪｯｸを行うかどうか[true/false]を指定します(初期値:true)
    107 *       forceEnc           【TAG】(通常は使いません) valsの値が[で開始している場合でもURLEncodeを通すかを設定します(初期値:false) 5.10.15.3 (2019/09/27)
    108 *       useBackLink        【TAG】(通常は使いません) true:相手先に戻るﾘﾝｸを必ず表示。false:必ず表示しない。未指定(null):従来通り(初期値:null) 7.3.1.0 (2021/02/02)
    109 *       debug              【TAG】ﾃﾞﾊﾞｯｸﾞ情報を出力するかどうか[true/false]を指定します(初期値:false)
    110 *   &gt;   ... Body ...
    111 *   &lt;/og:link&gt;
    112 *
    113 * 【廃止】6.9.5.0 (2018/04/23) 物理削除
    114 *   //  extToken           【廃止】利用するCreateTokenﾌﾟﾗｸﾞｲﾝ名を設定します。6.9.5.0 (2018/04/23)
    115 *
    116 *    6.7.6.0 (2017/03/17) [strictCheck属性]は、ｶﾗﾑIDの存在ﾁｪｯｸを行うかどうかを指定します(初期値:true)
    117 *      true    ｶﾗﾑIDがDBTableModel に存在しない場合は、ｴﾗｰになる。
    118 *      false   ｶﾗﾑIDがDBTableModel に存在しない場合は、無視する。
    119 *
    120 * ●使用例
    121 *    ･普通のﾘﾝｸ
    122 *        &lt;og:link gamenId="32ExcelIn" href="direct.jsp" keys="location,filename,modifyType" value="{&#064;GUI.ADDRESS},{&#064;GUI.ADDRESS}.xls,A"  target="RESULT" &gt;
    123 *            &lt;img src="{&#064;SYS.JSP}/image/insert.gif" alt="Excel Insert" /&gt;&lt;og:message lbl="MSG0057" /&gt;
    124 *        &lt;/og:link&gt;
    125 *
    126 *    ･検索結果ﾃｰﾌﾞﾙ内でのﾘﾝｸ
    127 *        &lt;og:viewLink command="{&#064;command}"&gt;
    128 *            &lt;og:link column="KMZ" gamenId="RK0251" href="index.jsp" target="CONTENTS"
    129 *                keys="KMZ,ORDER_BY,command" vals="[KMZ],'LKIS',NEW" /&gt;
    130 *        &lt;/og:viewLink&gt;
    131 *
    132 *    ･ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟ(指定の画面へ直接飛ばす)URL
    133 *      gamenId を指定しなければこの画面へのURLを作成します。
    134 *      このURLは、その画面の index.jsp に直接ｼﾞｬﾝﾌﾟするためのURLです。
    135 *      この場合、useRequestCache="true" が初期値なので、必要なければ、false に設定願います。
    136 *        &lt;og:link useDirectJump="true" delKeys="pageSize"
    137 *                     keys="location,filename,modifyType" value="{&#064;GUI.ADDRESS},{&#064;GUI.ADDRESS}.xls,A" /&gt;
    138 * @og.group 画面表示
    139 *
    140 * @version     4.0
    141 * @author      Kazuhiko Hasegawa
    142 * @since       JDK5.0,
    143 */
    144public class LinkTag extends HTMLTagSupport {
    145        /** このプログラムのVERSION文字列を設定します。   {@value} */
    146        private static final String VERSION = "7.3.1.0 (2021/02/02)" ;
    147        private static final long serialVersionUID = 731020210202L ;
    148
    149        private static final long INIT_TIME = 24*60*60*1000L ;                                          // 6.2.5.0 (2015/06/05) 1日=24(時)*60(分)*60(秒)*1000(ミリ秒)
    150
    151        private String          column          ;
    152        private String          onLink          = "true";                                                                       // true または 1
    153        private boolean         fileCheck       ;
    154        private boolean         filePath        ;
    155        // 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。fileURL変数を廃止します。
    156        // 7.2.7.0 (2020/08/07) 他の属性の関係で、baseURLをfileURL に変更
    157//      private String          baseURL         = HybsSystem.sys( "FILE_URL" );
    158        private String          fileURL         = HybsSystem.sys( "FILE_URL" );
    159        private String          gamenId         ;
    160        private boolean         useGamenId      = true;
    161        // 3.5.2.0 (2003/10/20)
    162        private String          markList                = "true|TRUE|1";                                                // true または 1
    163        private boolean         xlink                   ;                                                                               // 3.5.5.0 (2004/03/12)
    164        private boolean         useDirectJump   ;                                                                               // 3.7.1.0 (2005/04/26)
    165        private boolean         useRequestCache = true;                                                                 // 3.7.1.0 (2005/04/26)
    166        private int                     validDuration   = -1;
    167        private boolean         hrefOnly                ;                                                                               // 4.0.0 (2005/11/30)
    168        private boolean         hrefTarget              ;                                                                               // 5.5.5.6 (2012/08/31)
    169        private boolean         useHrefEncode   = HybsSystem.sysBool( "USE_HREF_URLENCODE" );   // 6.0.2.0 (2014/09/19)
    170        private boolean         strictCheck             = true;                                                                 // 6.7.6.0 (2017/03/17) ｶﾗﾑIDの存在ﾁｪｯｸを行うかどうかを指定します。
    171
    172        private String[]        keys                    ;                                                                               // 3.5.6.2 (2004/07/05)
    173        private String[]        vals                    ;                                                                               // 3.5.6.2 (2004/07/05)
    174        private String[]        delKeys                 ;                                                                               // 3.7.1.0 (2005/04/26)
    175//      private boolean         useURLCheck             ;                                                                               // 4.3.7.0 (2009/06/01)
    176        private boolean         useURLCheck             = HybsSystem.sysBool( "LINK_URL_CHECK" );               // 5.10.11.0 (2019/05/03) ｼｽﾃﾑﾘｿｰｽに変更
    177        private String          urlCheckUser    ;                                                                               // 4.3.7.0 (2009/06/01)
    178        private long            urlCheckTime    = INIT_TIME;                                                    // 6.2.5.0 (2015/06/05)
    179//      private String          urlCheckCrypt   ;                                                                               // 5.8.8.0 (2015/06/05)
    180        private String          urlCheckCrypt   = HybsSystem.sys( "URL_CHECK_CRYPT" );  // 5.8.8.0 (2015/06/05) 5.9.32.1 (2018/05/09) urlCheckCrypt初期値をｼｽﾃﾑﾘｿｰｽから取得に変更
    181//      private String          extToken                ;                                                                               // 5.8.2.1 (2014/12/13) 6.9.5.0 (2018/04/23) extToken 廃止
    182
    183//      private transient List<CreateToken>     ctArray ;                                                               // 6.3.9.0 (2015/11/06) transient 追加 6.9.5.0 (2018/04/23) 廃止
    184        private boolean         useForceEnc             ;                                                                               // 5.10.15.3 (2019/09/27) 強制URLｴﾝｺｰﾄﾞ用
    185        private String          useBackLink             ;                                                                               // 7.3.1.0 (2021/02/02)
    186
    187        private static final String SERVER_ACCESS_URL = HybsSystem.sys( "SERVER_ACCESS_URL" );  // 5.10.16.3 (2019/10/25) https://www.xxx:8080 まで
    188
    189        /**
    190         * ﾃﾞﾌｫﾙﾄｺﾝｽﾄﾗｸﾀｰ
    191         *
    192         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    193         */
    194        public LinkTag() { super(); }           // これも、自動的に呼ばれるが、空のﾒｿｯﾄﾞを作成すると警告されるので、明示的にしておきます。
    195
    196        /**
    197         * Taglibの開始ﾀｸﾞが見つかったときに処理する doStartTag() を ｵｰﾊﾞｰﾗｲﾄﾞします。
    198         *
    199         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。ﾎﾞﾃﾞｨが存在する場合のみﾎﾞﾃﾞｨが呼ばれる対応。
    200         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
    201         * @og.rev 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更
    202         *
    203         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
    204         */
    205        @Override
    206        public int doStartTag() {
    207                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
    208                if( useTag() ) {
    209                        String msglbl = getMsglbl();    // 5.7.1.2 (2013/12/20) msg ⇒ msglbl 変更
    210                        if( msglbl == null && column != null ) { msglbl = "[" + column + "]"; }
    211                        set( "body",msglbl );
    212                        return EVAL_BODY_BUFFERED ;             // Body を評価する。( extends BodyTagSupport 時)
    213                }
    214                return SKIP_BODY ;                                      // Body を評価しない
    215        }
    216
    217        /**
    218         * Taglibのﾀｸﾞ本体を処理する doAfterBody() を ｵｰﾊﾞｰﾗｲﾄﾞします。
    219         *
    220         * @og.rev 3.1.1.0 (2003/03/28) ﾎﾞﾃﾞｨの内容を取得する処理を、CommonTagSupport で行う。
    221         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。ﾎﾞﾃﾞｨが存在する場合のみﾎﾞﾃﾞｨが呼ばれる対応。
    222         *
    223         * @return      後続処理の指示(SKIP_BODY)
    224         */
    225        @Override
    226        public int doAfterBody() {
    227                final String label = getBodyString();
    228
    229                if( label != null && label.length() > 0 ) {
    230                        set( "body",label );
    231                }
    232
    233                return SKIP_BODY ;
    234        }
    235
    236        /**
    237         * Taglibの終了ﾀｸﾞが見つかったときに処理する doEndTag() を ｵｰﾊﾞｰﾗｲﾄﾞします。
    238         *
    239         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    240         * @og.rev 3.1.2.0 (2003/04/07) ﾘﾝｸ指定時に、画面IDを渡して、実ｱﾄﾞﾚｽを求める事ができる様にする。
    241         * @og.rev 3.1.7.0 (2003/05/02) 戻るﾎﾞﾀﾝ用のBACK_GAMENID を、引数に追加します。
    242         * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動ｾｯﾄを行うかどうかを決める属性( useGamenId )を追加。
    243         * @og.rev 3.1.8.0 (2003/05/16) 画面IDが指定されたときのﾘﾝｸ情報作成方法を通常のﾘﾝｸ時にも適用する。
    244         * @og.rev 3.1.8.0 (2003/05/16) 画面のﾛｰﾙに応じて、ﾘﾝｸを張る/張らないを自動判断する。
    245         * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加
    246         * @og.rev 3.5.5.0 (2004/03/12) xlink属性をAttributeｵﾌﾞｼﾞｪｸﾄに追加
    247         * @og.rev 3.5.6.2 (2004/07/05) makeTag() の処理範囲変更、viewlink へのﾊﾟﾗﾒｰﾀ変更。
    248         * @og.rev 3.7.1.0 (2005/04/26) ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸ機能を追加
    249         * @og.rev 4.0.0.0 (2005/11/30) roles 属性の追加
    250         * @og.rev 4.0.0.0 (2005/08/31) 同一ｶﾗﾑの複数登録を許可します。
    251         * @og.rev 4.3.0.0 (2008/07/04) ﾛｰﾙﾓｰﾄﾞﾏﾙﾁ対応
    252         * @og.rev 4.3.7.1 (2009/06/08) URLﾁｪｯｸ機能対応
    253         * @og.rev 4.3.7.4 (2009/07/01) 循環参照を解消
    254         * @og.rev 4.3.8.0 (2009/08/01) ﾕｰｻﾞｰIDの外部設定に対応
    255         * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
    256         * @og.rev 6.0.2.0 (2014/09/19) useHrefEncode 属性対応
    257         * @og.rev 5.8.2.1 (2014/12/14) ﾄｰｸﾝﾌﾟﾗｸﾞｲﾝ対応
    258         * @og.rev 5.8.8.0 (2015/06/05) urlCheckCrypt対応
    259         * @og.rev 6.2.5.0 (2015/06/05) System.currentTimeMillis() + urlCheckTime を、最初に計算しておく。
    260         * @og.rev 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。fileURL変数を廃止します。
    261         * @og.rev 6.7.3.0 (2017/01/27) ViewLinkTag経由の判定を入れる。
    262         * @og.rev 6.7.6.0 (2017/03/17) strictCheck 追加。
    263         * @og.rev 6.9.5.0 (2018/04/23) extToken 廃止
    264         * @og.rev 7.1.0.1 (2020/02/07) hrefOnly属性追加
    265         * @og.rev 7.2.7.0 (2020/08/07) 他の属性の関係で、baseURLをfileURL に変更
    266         *
    267         * @return      後続処理の指示
    268         */
    269        @Override
    270        public int doEndTag() {
    271                debugPrint();           // 4.0.0 (2005/02/28)
    272                // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属性対応
    273                if( !useTag() ) { return EVAL_PAGE ; }
    274
    275                // 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動ｾｯﾄを行うかどうかを決める属性( useGamenId )を追加。
    276                // 4.0.0 (2005/11/30) 指定のﾛｰﾙが、ｱｸｾｽ許可の場合は、出力します。
    277                final String roles = get( "roles" );
    278                // 4.3.0.0 (2008/07/04) ロールモードマルチ対応
    279                if( ! getUser().isAccess( roles ) ) {
    280                        return EVAL_PAGE ;
    281                }
    282
    283                //  4.3.7.1 (2009/06/08)
    284                if( useURLCheck ) {
    285                        // 4.3.8.0 (2009/08/01)
    286                        urlCheckUser = nval( urlCheckUser, getUser().getUserID() );
    287                }
    288
    289                // 6.2.5.0 (2015/06/05) System.currentTimeMillis() + urlCheckTime を、最初に計算しておく。
    290                final long plusCheckTime = System.currentTimeMillis() + urlCheckTime ;
    291
    292                final ViewLinkTag viewlink = (ViewLinkTag)findAncestorWithClass( this,ViewLinkTag.class );
    293                if( viewlink != null ) {
    294                        if( isGamenCheck() ) {  set( "onLink", onLink );  }
    295                        else {                                  set( "onLink", "false" ); }
    296                        // 4.3.7.1 (2009/06/08)
    297                        if( useURLCheck ) {
    298                                set( "useURLCheck"      , "true" );
    299                                set( "urlCheckUser"     , urlCheckUser );
    300                                set( "urlCheckTime"     , String.valueOf( plusCheckTime ) );            // 6.2.5.0 (2015/06/05)
    301                                set( "urlCheckCrypt", urlCheckCrypt );                                                  // 5.8.8.0 (2015/06/05)
    302                        }
    303                        set( "markList"   , markList );
    304                        set( "linkFormat" , makeTag() );                                                                        // 3.5.6.2 (2004/07/05)
    305                        if( hrefOnly ) {
    306                                set( "hrefOnly" , "true" );                                                                             // 7.1.0.1 (2020/02/07) hrefOnly属性追加
    307                        }
    308
    309                        // 4.0.0 (2005/08/31) 同一ｶﾗﾑの複数登録を許可します。
    310                        set( "column"      , column );
    311//                      set( "extToken"    , extToken );                                                                        // 5.8.2.1 (2014/12/13) 6.9.5.0 (2018/04/23) extToken 廃止
    312                        set( "strictCheck" , String.valueOf( strictCheck ) );                           // 6.7.6.0 (2017/03/17)
    313
    314                        // 6.0.2.0 (2014/09/19) useHrefEncode 属性対応
    315                        if( !useGamenId && useHrefEncode ) {
    316                                set( "useHrefEncode","true" );
    317                        }
    318                        viewlink.addAttribute( getAttributes() );
    319                }
    320                // 3.7.1.0 (2005/04/26) ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸ機能を追加
    321                // 画面の利用権限有無などは調査不要
    322                else if( useDirectJump ) {
    323                        jspPrint( makeDirectLink() );
    324                }
    325                else {
    326                        if( isFileCheck() && isGamenCheck() && markList.indexOf( onLink ) >= 0 ) {
    327                                // 3.5.6.2 (2004/07/05) makeTag() より移動
    328                                if( filePath ) {
    329                                        final String furl  = get( "href" );
    330
    331                                        // 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。fileURL変数を廃止します。
    332                                        // 7.2.7.0 (2020/08/07) 他の属性の関係で、fileURL に変更
    333//                                      final String filename =  HybsSystem.url2dir( baseURL,furl );
    334                                        final String filename =  HybsSystem.url2dir( fileURL,furl );
    335
    336                                        set( "href",filename );
    337                                }
    338
    339                                // 4.3.7.1 (2009/06/08)
    340                                // 6.7.3.0 (2017/01/27) ViewLinkTag経由の判定を入れる。
    341                                String tag = makeTag( false );          // ViewLinkTag経由しない。
    342                                if( useURLCheck ) {
    343                                        // 5.8.8.0 (2015/06/05) urlCheckCrypt対応
    344                                        HybsCryptography criptCls = null;
    345                                        if( urlCheckCrypt != null && urlCheckCrypt.length() > 0 ){
    346                                                criptCls = new HybsCryptography( urlCheckCrypt );
    347                                        }
    348
    349                                        if( hrefOnly ) {
    350                                                // 4.3.7.4 (2009/07/01) 循環参照を解消
    351                                                tag = XHTMLTag.addURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), plusCheckTime, criptCls );         // 5.8.8.0
    352                                        }
    353                                        else {
    354                                                // 4.3.7.4 (2009/07/01) 循環参照を解消
    355                                                tag = XHTMLTag.embedURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), plusCheckTime, criptCls );       // 5.8.8.0
    356                                        }
    357                                }
    358//                              // 5.8.2.1 (2014/12/14) URLﾄｰｸﾝﾌﾟﾗｸﾞｲﾝ
    359//                              // 6.9.5.0 (2018/04/23) extToken 廃止
    360//                              if( ctArray != null && !ctArray.isEmpty() ){                                    // 6.1.1.0 (2015/01/17) refactoring
    361//                                      for( final CreateToken ct : ctArray){
    362//                                              if( hrefOnly ){
    363//                                                      tag = ct.generateURL( tag, plusCheckTime, null );       // 5.8.8.0
    364//                                              }
    365//                                              else{
    366//                                                      tag = ct.embedToken( tag, plusCheckTime, null );        // 5.8.8.0
    367//                                              }
    368//                                      }
    369//                              }
    370                                jspPrint( tag );
    371                        }
    372                }
    373
    374                return EVAL_PAGE ;
    375        }
    376
    377        /**
    378         * ﾀｸﾞﾘﾌﾞｵﾌﾞｼﾞｪｸﾄをﾘﾘｰｽします。
    379         * ｷｬｯｼｭされて再利用されるので、ﾌｨｰﾙﾄﾞの初期設定を行います。
    380         *
    381         * @og.rev 2.0.0.4 (2002/09/27) ｶｽﾀﾑﾀｸﾞの release() ﾒｿｯﾄﾞを、追加
    382         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    383         * @og.rev 3.1.2.0 (2003/04/07) ﾘﾝｸ指定時に、画面IDを渡して、実ｱﾄﾞﾚｽを求める事ができる様にする。
    384         * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のＵＲＬへの自動ｾｯﾄを行うかどうかを決める属性( useGamenId )を追加。
    385         * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加
    386         * @og.rev 3.5.5.0 (2004/03/12) xlink属性を追加
    387         * @og.rev 3.5.6.2 (2004/07/05) keys , vals属性を追加
    388         * @og.rev 3.7.1.0 (2005/04/26) useDirectJump , useRequestCache , delKeys 属性を追加
    389         * @og.rev 4.0.0.0 (2005/09/30) validDuration 属性を追加
    390         * @og.rev 4.3.7.0 (2009/06/01) useURLCheck属性を追加
    391         * @og.rev 5.5.5.6 (2012/08/31) hrefTarget属性を追加
    392         * @og.rev 6.0.2.0 (2014/09/19) useHrefEncode属性を追加
    393         * @og.rev 5.8.2.1 (2014/12/14) ﾄｰｸﾝﾌﾟﾗｸﾞｲﾝ対応(extToken,ctArray属性を追加)
    394         * @og.rev 5.8.8.0 (2015/06/05) urlCheckCrypt追加
    395         * @og.rev 6.2.5.0 (2015/06/05) urlCheckTimeの初期値を、INIT_TIMEに変更
    396         * @og.rev 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。fileURL変数を廃止します。
    397         * @og.rev 6.7.6.0 (2017/03/17) strictCheck 追加。
    398         * @og.rev 6.9.5.0 (2018/04/23) extToken 廃止
    399         * @og.rev 5.9.32.1 (2018/05/09) urlCheckCrypt初期値をｼｽﾃﾑﾘｿｰｽから取得に変更
    400         * @og.rev 5.10.11.0 (2019/05/03) useURLCheck属性をｼｽﾃﾑﾘｿｰｽから取得に変更
    401         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    402         * @og.rev 7.2.7.0 (2020/08/07) 他の属性の関係で、baseURLをfileURL に変更
    403         * @og.rev 7.3.1.0 (2021/02/02) useBackLink 追加。
    404         */
    405        @Override
    406        protected void release2() {
    407                super.release2();
    408                column                  = null;
    409                onLink                  = "true";                                                                                               // true または 1
    410                markList                = "true|TRUE|1";                                                                                // 3.5.2.0 (2003/10/20)
    411                fileCheck               = false;
    412                filePath                = false;
    413//              baseURL                 = HybsSystem.sys( "FILE_URL" );
    414                fileURL                 = HybsSystem.sys( "FILE_URL" );                                                 // 7.2.7.0 (2020/08/07)
    415                gamenId                 = null;
    416                useGamenId              = true;
    417                xlink                   = false;                                                                                                // 3.5.5.0 (2004/03/12)
    418                keys                    = null;                                                                                                 // 3.5.6.2 (2004/07/05)
    419                vals                    = null;                                                                                                 // 3.5.6.2 (2004/07/05)
    420                useDirectJump   = false;                                                                                                // 3.7.1.0 (2005/04/26)
    421                useRequestCache = true;                                                                                                 // 3.7.1.0 (2005/04/26)
    422                delKeys                 = null;                                                                                                 // 3.7.1.0 (2005/04/26)
    423                validDuration   = -1;
    424                hrefOnly                = false;                                                                                                // 4.0.0 (2005/11/30)
    425                hrefTarget              = false;                                                                                                // 5.5.5.6 (2012/08/31)
    426//              useURLCheck             = false;                                                                                                // 4.3.7.0 (2009/06/01)
    427                useURLCheck             = HybsSystem.sysBool( "LINK_URL_CHECK" );                               // 5.10.11.0 (2019/05/03)
    428                urlCheckUser    = null;                                                                                                 // 4.3.7.0 (2009/06/01)
    429                urlCheckTime    = INIT_TIME;                                                                                    // 6.2.5.0 (2015/06/05)
    430//              urlCheckCrypt   = null;                                                                                                 // 5.8.8.0 (2015/06/05)
    431                urlCheckCrypt   = HybsSystem.sys( "URL_CHECK_CRYPT" );                                  // 5.9.32.1 (2018/05/11)
    432                useHrefEncode   = HybsSystem.sysBool( "USE_HREF_URLENCODE" );                   // 6.0.2.0 (2014/09/19)
    433                strictCheck             = true;                                                                                                 // 6.7.6.0 (2017/03/17)
    434//              extToken                = null;                                                                                                 // 5.8.2.1 (2014/12/14) 6.9.5.0 (2018/04/23) extToken 廃止
    435//              ctArray                 = null;                                                                                                 // 5.8.2.1 (2014/12/14) 6.9.5.0 (2018/04/23) extToken 廃止
    436                useForceEnc             = false;                                                                                                // 5.10.15.3 (2019/09/27)
    437                useBackLink             = null;                                                                                                 // 7.3.1.0 (2021/02/02)
    438        }
    439
    440        /**
    441         * ﾘﾝｸを作成します。
    442         *
    443         * これは、HTMLTagSupportのmakeTag()のｵｰﾊﾞｰﾗｲﾄﾞ用のﾒｿｯﾄﾞです。
    444         * ViewLinkTag経由の場合は、引数 true で、独自のﾒｿｯﾄﾞを呼び出します。
    445         * これは、戻り行番号( BACK_ROW={I} )が、処理されないため、IE上でｴﾗｰが発生するのを
    446         * 避けるためです。
    447         *
    448         * @og.rev 6.7.3.0 (2017/01/27) Override用のﾒｿｯﾄﾞを用意しておきます。
    449         *
    450         * @return      ﾘﾝｸﾀｸﾞ文字列
    451         * @og.rtnNotNull
    452         */
    453        @Override
    454        protected String makeTag() {
    455                return makeTag( true );         // 互換性。ViewLinkTag経由の場合
    456        }
    457
    458        /**
    459         * ﾘﾝｸを作成します。
    460         *
    461         * @og.rev 3.5.5.0 (2004/03/12) xlink 属性に応じたﾘﾝｸ文字を作成します。
    462         * @og.rev 3.5.6.2 (2004/07/05) XHTMLTag の変換値のみを返す様に変更。
    463         * @og.rev 3.7.0.3 (2005/03/01) ﾘﾝｸ作成時に行番号を引数に追加する。
    464         * @og.rev 4.0.0.0 (2005/11/30) href 属性のみを返します。
    465         * @og.rev 4.0.1.0 (2007/12/17) BACK_ADDRESSの追加
    466         * @og.rev 4.3.3.5 (2008/11/08) ｻｰﾊﾞｰｱﾄﾞﾚｽを取得する際に、ﾘｸｴｽﾄから取得するように変更します。
    467         * @og.rev 4.3.7.0 (2009/06/01) URLﾁｪｯｸ機能対応
    468         * @og.rev 4.3.7.1 (2009/06/08) ↑の実装を#doEndTagに移動
    469         * @og.rev 5.5.5.6 (2012/08/31) ｢href="*******" target="******"｣ という ｷｰ付きの文字列を作成
    470         * @og.rev 6.0.2.0 (2014/09/19) useHrefEncode 属性対応
    471         * @og.rev 6.2.0.1 (2015/03/06) hrefｱﾄﾞﾚｽのASCII以外の文字の、URLｴﾝｺｰﾄﾞを行う。
    472         * @og.rev 6.4.4.1 (2016/03/18) StringBuilderの代わりに、OgBuilderを使用する。
    473         * @og.rev 6.7.3.0 (2017/01/27) ViewLinkTag経由の判定を入れる。
    474         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    475         * @og.rev 7.3.1.0 (2021/02/02) useBackLink で戻るﾘﾝｸの制御を行う。
    476         *
    477         * @param       useViewLink     ViewLinkTag経由の判定 [true:ViewLinkTag経由/false:その他]
    478         * @return      ﾘﾝｸﾀｸﾞ文字列
    479         * @og.rtnNotNull
    480         */
    481        private String makeTag( final boolean useViewLink ) {
    482
    483                makeGamenLink();                                                                        // 3.5.6.2 (2004/07/05)
    484                if( get( "body" ) == null ) { set( "body" , get( "href" ) ); }
    485
    486                // xlink と通常の link では、URL接続文字が異なる。
    487                final String sep = xlink ? "&amp;" : "&" ;
    488
    489                final OgBuilder urlEncBuf = new OgBuilder()
    490//                              .append( XHTMLTag.urlEncode( keys,vals,sep ) );
    491                                .append( XHTMLTag.urlEncode( keys,vals,sep,useForceEnc ) );             // 5.10.15.3 (2019/09/27)
    492                // 3.5.6.2 (2004/07/05) addBackGamenId() ﾒｿｯﾄﾞの内容を移動
    493                if( useGamenId ) {
    494                        urlEncBuf.appendIf( useViewLink , sep , "BACK_ROW={I}" )                                // ViewLinkTag経由の場合のみ、出力します。
    495                                         .append( sep , "BACK_GAMENID=" , getGUIInfoAttri( "KEY" ) )
    496                                         .appendIf( gamenId != null && !gamenId.isEmpty()                               // if
    497                                                        , sep , "GAMENID=" , gamenId )
    498                                         .append( sep , "BACK_ADDRESS=" )
    499                                         .append( getContextURL() , getGUIInfoAttri( "ADDRESS" ) , "/index.jsp" );
    500                }
    501                // 6.0.2.0 (2014/09/19) useHrefEncode 属性対応
    502                else if( useHrefEncode ) {
    503                        String furl = get( "href" );
    504                        if( furl != null ) {
    505                                furl = StringUtil.urlEncode2( furl );                                                   // ASCII以外の文字の、URLｴﾝｺｰﾄﾞを行う。
    506                                set( "href",furl );
    507                        }
    508                }
    509
    510                urlEncBuf.appendNN( sep,"useBackLink=" , useBackLink );                                 // 7.3.1.0 (2021/02/02) useBackLink で戻るﾘﾝｸの制御を行う。
    511
    512                final String urlEnc = urlEncBuf.toString();
    513
    514                // 4.0.0 (2005/11/30) href 属性のみを返します。
    515                if( hrefOnly ) {
    516                        return XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep );
    517                }
    518
    519                // 5.5.5.6 (2012/08/31) ｢href="*******" target="******"｣ という ｷｰ付きの文字列を作成
    520                if( hrefTarget ) {
    521                        final StringBuilder hrefTemp = new StringBuilder( BUFFER_MIDDLE );
    522
    523                        // 6.0.2.5 (2014/10/31) char を append する。
    524                        hrefTemp.append( "href=\"" ).append( XHTMLTag.addUrlEncode( get( "href" ),urlEnc,sep ) ).append( '"' );
    525
    526                        final String target = get( "target" ) ;
    527                        if( target != null && !target.isEmpty() ) {
    528                                hrefTemp.append( " target=\"" ).append( target ).append( '"' );         // 6.0.2.5 (2014/10/31) char を append する。
    529                        }
    530
    531                        return hrefTemp.toString() ;
    532                }
    533
    534                if( xlink ) {
    535                        return XHTMLTag.xlink( getAttributes(),urlEnc ) ;
    536                }
    537                else {
    538                        return XHTMLTag.link( getAttributes(),urlEnc ) ;
    539                }
    540        }
    541
    542        /**
    543         * ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸを作成します。
    544         *
    545         * gamenId を指定しなければ、この画面が指定されたと考えます。
    546         * target を指定しなければ、"_blank" を指定します。
    547         * msg がなければ(または、BODY部が空の場合)、画面名にこのﾘﾝｸを作成します。
    548         *
    549         * @og.rev 3.7.1.0 (2005/04/26) 新規追加
    550         * @og.rev 4.0.0.0 (2005/09/30) ﾘﾝｸ文字列をﾊｯｼｭ化します。
    551         * @og.rev 4.3.3.5 (2008/11/08) ｻｰﾊﾞｰｱﾄﾞﾚｽを取得する際に、ﾘｸｴｽﾄから取得するように変更します。
    552         * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。
    553         *
    554         * @return      ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸ文字列
    555         */
    556        private String makeDirectLink() {
    557
    558                // gamenId を指定しなければ、この画面が指定されたと考えます。
    559                if( gamenId == null ) {
    560                        gamenId = getGUIInfoAttri( "KEY" );
    561                }
    562
    563                // ｷｬｯｼｭ情報と keys,vals情報を設定します。
    564                if( useRequestCache ) { makeRequestCache2Vals( gamenId ); }
    565                final String urlEnc = XHTMLTag.urlEncode( keys,vals )
    566                                                        + "&GAMENID=" + gamenId ;
    567
    568                String href = get( "href" );
    569                if( href == null || href.isEmpty() ) {
    570                        // 4.3.3.5 (2008/11/08) ｻｰﾊﾞｰｱﾄﾞﾚｽを取得する際に、ﾘｸｴｽﾄから取得するように変更します。
    571                        href = getContextURL() + "index.jsp" ;
    572                }
    573
    574                final String redirectURL = href + "?" + urlEnc ;
    575                final String name = getGUIInfoAttri( "LNAME" );
    576
    577                String validDate = null;        // 設定されない場合は、無制限
    578                if( validDuration != 0 ) {
    579                        if( validDuration < 0 ) {       // マイナスの場合は、初期値が使われます。
    580                                validDuration = sysInt( "LINK_VALID_DURATION_DAYS" );
    581                        }
    582                                                                                                                        // ミリ秒    秒   時間
    583                        final long nowTime = System.currentTimeMillis() + 1000L * 3600L * 24L * validDuration ;
    584                        validDate = DateSet.getDate( nowTime,"yyyyMMdd" );                              // 6.4.2.0 (2016/01/29)
    585                }
    586                final String userid   = getUser().getUserID();
    587
    588                final URLXfer xfer = new URLXfer();
    589                // redirectURL,name,validDate,userid
    590                return xfer.getRandomURL( redirectURL,name,validDate,userid );
    591        }
    592
    593        /**
    594         * ﾘｸｴｽﾄｷｬｯｼｭ情報を加味した keys,vals を再作成します。
    595         * このﾒｿｯﾄﾞは、ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟ時のみ有効です。
    596         *
    597         * ﾘｸｴｽﾄ情報のMapを取り出します。そのとき、keys,vals を優先して
    598         * 設定します。
    599         *
    600         * @og.rev 3.7.1.0 (2005/04/26) 新規追加
    601         *
    602         * @param       gamenId 画面ID (ﾘｸｴｽﾄｷｬｯｼｭの取り出しｷｰ)
    603         */
    604//      @SuppressWarnings(value={"unchecked"})
    605        private void makeRequestCache2Vals( final String gamenId ) {
    606                final Map<String,String[]> reqMap = new HashMap<>();
    607
    608                final String reqKey = HybsSystem.REQ_CACHE_KEY + gamenId ;
    609                @SuppressWarnings(value={"unchecked"})                                                                  // 8.2.1.0 (2022/07/15) ﾒｿｯﾄﾞ全体から局所化
    610                final Map<String,String[]> attMap = (Map<String,String[]>)getSessionAttribute( reqKey );
    611                if( attMap != null ) { reqMap.putAll( attMap ); }
    612
    613                if( keys != null ) {
    614                        for( int i=0; i<keys.length; i++ ) {
    615                                // keys,vals をｷｬｯｼｭに上書き( ｷｬｯｼｭは、文字列配列)
    616                                final String[] temp = new String[] { vals[i] } ;
    617                                reqMap.put( keys[i],temp );
    618                        }
    619                }
    620
    621                // ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟするための画面IDは、別途設定するため、削除しておきます。
    622                reqMap.remove( "GAMENID" );
    623
    624                // 使用しないｷｰを、削除しておきます。
    625                if( delKeys != null ) {
    626                        for( int i=0; i<delKeys.length; i++ ) {
    627                                reqMap.remove( delKeys[i] );
    628                        }
    629                }
    630
    631                // マップキーを取得。キャッシュ値は、String[] なので、複数キー登録する。
    632                // 6.3.9.0 (2015/11/06) 配列にせずに、拡張for文で処理する。
    633
    634                final List<String> v_keys = new ArrayList<>();
    635                final List<String> v_vals = new ArrayList<>();
    636                for( final Map.Entry<String,String[]> entry : reqMap.entrySet() ) {
    637                        final String   kk = entry.getKey();
    638                        final String[] vv = entry.getValue();
    639                        if( vv != null ) {
    640                                for( final String val : vv ) {
    641                                        v_keys.add( kk );
    642                                        v_vals.add( val );
    643                                }
    644                        }
    645                }
    646
    647                keys = v_keys.toArray( new String[v_keys.size()] );
    648                vals = v_vals.toArray( new String[v_vals.size()] );
    649        }
    650
    651        /**
    652         * ﾌｧｲﾙの存在ﾁｪｯｸを行います。
    653         *
    654         * 実ﾌｧｲﾙは、URL(httpの引数)より、変換して求めます。
    655         *
    656         * @og.rev 3.1.8.0 (2003/05/16) 画面のﾛｰﾙに応じて、ﾘﾝｸを張る/張らないを自動判断する。
    657         *
    658         * @return      ﾌｧｲﾙが存在する(true)/存在しない(false)
    659         */
    660        private boolean isFileCheck() {
    661                boolean rtn = true;
    662
    663                if( fileCheck ) {
    664                        File file = null;
    665
    666                        final String url  = get( "href" );
    667                        if( url != null ) {
    668                                final String fin = HybsSystem.url2dir( url );
    669                                file = new File( fin );
    670                        }
    671                        rtn = file != null && file.exists() ;
    672                }
    673
    674                return rtn ;
    675        }
    676
    677        /**
    678         * ﾘﾝｸ先の画面のﾛｰﾙに応じて、ﾘﾝｸを張る/張らないを自動判断を行います。
    679         *
    680         * ﾘﾝｸ先の画面IDは、gamenId 属性で指定してください。それ以外のﾘﾝｸは、
    681         * 自動判断できません。
    682         * link ﾀｸﾞ単独の場合に、画面にｱｸｾｽできない場合は、ﾒｯｾｰｼﾞも表示されません。
    683         * viewLink ﾀｸﾞを利用される場合は、ﾘﾝｸのON/OFF で制御します。
    684         *
    685         * @og.rev 3.1.8.0 (2003/05/16) 画面のﾛｰﾙに応じて、ﾘﾝｸを張る/張らないを自動判断する。
    686         * @og.rev 4.0.0.0 (2005/01/31) GUIｵﾌﾞｼﾞｪｸﾄがﾏｯﾌﾟに無ければ、ｱｸｾｽできない。
    687         *
    688         * @return      画面ｱｸｾｽ許可する(true)/許可しない(false)
    689         */
    690        private boolean isGamenCheck() {
    691                boolean rtn = true;
    692
    693                if( gamenId != null ) {
    694                        final GUIInfo guiInfo = getGUIInfo( gamenId );          // 4.0.0 (2005/01/31)
    695
    696                        // 4.0.0 (2005/01/31) ﾕｰｻﾞｰ毎にｱｸｾｽできるGUIが設定されている為
    697                        // 存在しなければ、ｱｸｾｽ不可ということ。
    698                        if( guiInfo == null ) { rtn = false; }
    699                }
    700
    701                return rtn ;
    702        }
    703
    704        /**
    705         * 画面IDとhref から、指定のURLを作成します。
    706         *
    707         * @og.rev 3.1.2.0 (2003/04/07) ﾘﾝｸ指定時に、画面IDを渡して、実ｱﾄﾞﾚｽを求める事ができる様にする。
    708         * @og.rev 3.1.8.0 (2003/05/16) ﾘﾝｸ作成時に、kyes/values が null の時の処理の修正。
    709         * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のURLへの自動ｾｯﾄを行うかどうかを決める属性( useGamenId )を追加。
    710         * @og.rev 3.1.8.0 (2003/05/16) 画面IDが指定されたときのﾘﾝｸ情報作成方法を通常のﾘﾝｸ時にも適用する。
    711         * @og.rev 3.5.5.0 (2004/03/12) URLを求めるのに、GUIInfo#getRealAddress() を使用する。
    712         * @og.rev 4.0.0.0 (2005/01/31) GUIInfoの実ｱﾄﾞﾚｽのﾊﾟﾗﾒｰﾀを考慮する。
    713         *
    714         */
    715        private void makeGamenLink() {
    716                if( gamenId == null || gamenId.isEmpty() ) { return ; } // 4.0.0 (2005/11/30)
    717
    718                final GUIInfo guiInfo = getGUIInfo( gamenId );                  // 4.0.0 (2005/01/31)
    719                if( guiInfo == null ) { return ; }                                              // 見つからない場合は、ｱｸｾｽ不可
    720
    721                final String address = guiInfo.getRealAddress( get( "href" ) );
    722                final String url = getRequestParameter( address );
    723                set( "href",url );
    724
    725                final String label = guiInfo.getLabel();
    726                if( get( "title" ) == null ) {
    727                        set( "title","To:" + label );
    728                }
    729                if( get( "body" ) == null ) {
    730                        set( "body",label );
    731                }
    732        }
    733
    734        /**
    735         * ﾘｸｴｽﾄからｻｰﾊﾞｰｱﾄﾞﾚｽ(例：http://hn5120:8824/ver4/jsp/)を取得します。
    736         *
    737         * ｼｽﾃﾑﾘｿｰｽに、SERVER_ACCESS_URL ｷｰで設定されているｱﾄﾞﾚｽが優先されます。
    738         * 例）https://www.xxx:8080 まで
    739         *
    740         * @og.rev 4.3.3.5 (2008/11/08) 新規追加。
    741         * @og.rev 5.4.3.8 (2011/01/24) ﾌﾟﾛﾄｺﾙhttps対応
    742         * @og.rev 5.10.16.3 (2019/10/25) accessURL対応
    743         *
    744         * @return      ｻｰﾊﾞｰｱﾄﾞﾚｽ文字列
    745         * @og.rtnNotNull
    746         */
    747        private String getContextURL() {
    748                final HttpServletRequest request = (HttpServletRequest) getRequest();
    749//              final StringBuilder link = new StringBuilder( BUFFER_MIDDLE )
    750//                      .append( request.getScheme()     ).append( "://" )                                      // 5.4.3.8
    751//                      .append( request.getServerName() ).append( ':' )                                        // 6.0.2.5 (2014/10/31) char を append する。
    752//                      .append( request.getServerPort() )
    753//                      .append( request.getContextPath() )
    754//                      .append( "/jsp/" );
    755//              return link.toString();
    756
    757                final StringBuilder link = new StringBuilder( BUFFER_MIDDLE );
    758                if( StringUtil.isEmpty( SERVER_ACCESS_URL ) ) {
    759                        //link.append( "http://" );
    760                        link.append( request.getScheme() ).append( "://" )                                      // 5.4.3.8
    761                                .append( request.getServerName() ).append( ':' )
    762                                .append( request.getServerPort() );
    763                }
    764                else {
    765                        link.append( SERVER_ACCESS_URL );                                                                       // 5.10.16.3 (2019/10/25) accessURL対応
    766                }
    767
    768                return link.append( request.getContextPath() ).append( "/jsp/" ).toString();
    769        }
    770
    771        /**
    772         * 【HTML】ﾘﾝｸ先のMIMEﾀｲﾌﾟを指定します。
    773         *
    774         * @og.tag ﾘﾝｸ先のMIMEﾀｲﾌﾟを指定します。
    775         *
    776         * @param       type    MIMEﾀｲﾌﾟ
    777         */
    778        public void setType( final String type ) {
    779                set( "type",getRequestParameter( type ) );
    780        }
    781
    782        /**
    783         * 【HTML】この要素をﾘﾝｸの対象とするための名前を指定します。
    784         *
    785         * @og.tag この要素をﾘﾝｸの対象とするための名前を指定します。
    786         *
    787         * ※ HTML5では、a要素のname属性は廃止されています。
    788         * HTML4.01におけるname属性は、ｳｪﾌﾞﾍﾟｰｼﾞ内の特定個所に名前を付けて、
    789         * ﾍﾟｰｼﾞ内ﾘﾝｸを作成する際などに使用していました。 HTML5で同様の
    790         * 機能を作成する場合にはid属性を使用します。 id属性は、ひとつの
    791         * 文書の中では重複して同じ名前を付けることはできないので、
    792         * ｳｪﾌﾞﾍﾟｰｼﾞ内の場所を一意に特定できます。
    793         *
    794         * @param       name    名前
    795         * @see         <a href="http://www.htmq.com/html5/a.shtml" target="_blank" >a</a>
    796         */
    797        public void setName( final String name ) {
    798                set( "name",getRequestParameter( name ) );
    799        }
    800
    801        /**
    802         * 【TAG】ﾘﾝｸをつけたいｶﾗﾑを指定します(ViewLink ﾀｸﾞと併用)。
    803         *
    804         * @og.tag
    805         * このｶﾗﾑ名のTableModelに対して、 ViewLink ﾀｸﾞが存在する場合は、
    806         * ﾘﾝｸを張ります。
    807         *
    808         * @param       clm     ｶﾗﾑ
    809         */
    810        public void setColumn( final String clm ) {
    811                this.column = getRequestParameter( clm );
    812        }
    813
    814        /**
    815         * 【HTML】ﾘﾝｸ先のURLを指定します。
    816         *
    817         * @og.tag ﾘﾝｸ先のURLを指定します。
    818         *
    819         * @param       href    ﾘﾝｸ先のURL
    820         */
    821        public void setHref( final String href ) {
    822                set( "href",getRequestParameter( href ) );
    823        }
    824
    825        /**
    826         * 【HTML】ﾘﾝｸ先の基本となる言語ｺｰﾄﾞを指定します。
    827         *
    828         * @og.tag ﾘﾝｸ先の基本となる言語ｺｰﾄﾞを指定します。
    829         *
    830         * @param       hreflang        言語ｺｰﾄﾞ
    831         */
    832        public void setHreflang( final String hreflang ) {
    833                set( "hreflang",getRequestParameter( hreflang ) );
    834        }
    835
    836        /**
    837         * 【HTML】この文書から見た、href属性で指定されるﾘﾝｸ先との関係を指定します。
    838         *
    839         * @og.tag この文書から見た、href属性で指定されるﾘﾝｸ先との関係を指定します。
    840         *
    841         * @param       rel     ﾘﾝｸ先との関係
    842         */
    843        public void setRel( final String rel ) {
    844                set( "rel",getRequestParameter( rel ) );
    845        }
    846
    847        /**
    848         * 【HTML】href属性で指定されるﾘﾝｸ先から見た、この文書との関係をしてします。
    849         *
    850         * @og.tag href属性で指定されるﾘﾝｸ先から見た、この文書との関係をしてします。
    851         *
    852         * @param       rev     ﾘﾝｸ先から見たこの文書との関係
    853         */
    854        public void setRev( final String rev ) {
    855                set( "rev",getRequestParameter( rev ) );
    856        }
    857
    858        /**
    859         * 【HTML】ﾘﾝｸ先の文字ｺｰﾄﾞｾｯﾄを指定します。
    860         *
    861         * @og.tag ﾘﾝｸ先の文字ｺｰﾄﾞｾｯﾄを指定します。
    862         *
    863         * @param       charset 文字ｺｰﾄﾞｾｯﾄ
    864         */
    865        public void setCharset( final String charset ) {
    866                set( "charset",getRequestParameter( charset ) );
    867        }
    868
    869        /**
    870         * 【HTML】ﾘﾝｸ先の表示ﾀｰｹﾞｯﾄを指定します。
    871         *
    872         * @og.tag ﾘﾝｸ先の文書を表示させるﾌﾚｰﾑ、またはｳｨﾝﾄﾞｳの名前を指定します。
    873         *
    874         * @param       target  ﾀｰｹﾞｯﾄ
    875         */
    876        public void setTarget( final String target ) {
    877                set( "target",getRequestParameter( target ) );
    878        }
    879
    880        /**
    881         * 【HTML】ﾘﾝｸﾎﾞﾀﾝの形状[rect/circle/poly/default]を指定します。
    882         *
    883         * @og.tag HTMLのｲﾒｰｼﾞﾏｯﾌﾟとして指定できる設定値[rect/circle/poly/default]を指定します。
    884         *
    885         * @param       shape   形状 [rect/circle/poly/default]
    886         */
    887        public void setShape( final String shape ) {
    888                set( "shape",getRequestParameter( shape ) );
    889        }
    890
    891        /**
    892         * 【HTML】ﾘﾝｸﾎﾞﾀﾝの座標を指定します。
    893         *
    894         * @og.tag
    895         * coords ｾｯﾄ
    896         *
    897         * @param       coords  ﾘﾝｸﾎﾞﾀﾝの座標
    898         */
    899        public void setCoords( final String coords ) {
    900                set( "coords",getRequestParameter( coords ) );
    901        }
    902
    903        /**
    904         * 【TAG】ﾘﾝｸ先に渡すｷｰをCSV形式で複数指定します。
    905         *
    906         * @og.tag ﾘﾝｸ先に渡すｷｰを指定します。
    907         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
    908         * こうしないとﾃﾞｰﾀ自身にｶﾝﾏを持っている場合に分解をﾐｽる為です。
    909         *
    910         * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
    911         *
    912         * @param       key     ｷｰ(CSV形式)
    913         */
    914        public void setKeys( final String key ) {
    915                keys = getCSVParameter( key );
    916        }
    917
    918        /**
    919         * 【TAG】ﾘﾝｸ先に渡す値をCSV形式で複数指定します。
    920         *
    921         * @og.tag ﾘﾝｸ先に渡す値を指定します。
    922         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
    923         * こうしないとﾃﾞｰﾀ自身にｶﾝﾏを持っている場合に分解をﾐｽる為です。
    924         * keys,vals を使用すると、URLｴﾝｺｰﾄﾞされます。
    925         *
    926         * @og.rev 3.5.6.2 (2004/07/05) CommonTagSupport#getCSVParameter を使用
    927         *
    928         * @param       val     値(CSV形式)
    929         */
    930        public void setVals( final String val ) {
    931                vals = getCSVParameter( val );
    932        }
    933
    934        /**
    935         * 【TAG】ﾘﾝｸを張る(true or 1)/張らない(false or 0)の設定を指定します(初期値:true)。
    936         *
    937         * @og.tag
    938         * ﾘﾝｸを張る場合は、"true"(または "1") ﾘﾝｸを張らない
    939         * 場合は、"true以外"(または "0")をｾｯﾄします。
    940         * 初期値は、 "true"(ﾘﾝｸを張る)です。
    941         * さらに、[ｶﾗﾑ名] で、動的にｶﾗﾑの値で、ﾘﾝｸを張る、張らないを
    942         * 選ぶ事が可能になります。値は、"true"(または "1") で、ﾏｰｸします。
    943         * 追記 3.5.2.0 (2003/10/20)：markList属性に、処理対象文字列郡を指定できます。
    944         * これにより、ﾘﾝｸを処理するかどうかの判断が、true,1 以外にも使用できるようになりました。
    945         *
    946         * @og.rev 3.5.2.0 (2003/10/20) markList属性を追加
    947         *
    948         * @param       flag    ﾘﾝｸの設定 [true,1:ﾘﾝｸを張る/true,1以外:ﾘﾝｸを張らない]
    949         */
    950        public void setOnLink( final String flag ) {
    951                onLink = nval( getRequestParameter( flag ),onLink );
    952        }
    953
    954        /**
    955         * 【TAG】ﾌｧｲﾙの存在ﾁｪｯｸを行うかどうか[true/false]を指定します(初期値:false)。
    956         *
    957         * @og.tag
    958         * "true"の場合は、ﾌｧｲﾙの存在ﾁｪｯｸを行い、ﾌｧｲﾙがあれば
    959         * ﾘﾝｸを張ります。ﾌｧｲﾙが存在しない場合は、何も表示されません。
    960         * 初期値は、 "false"(ﾌｧｲﾙﾁｪｯｸを行わない)です。
    961         * 注意：現状、viewLink ﾀｸﾞからの使用は出来ませんので、ご了承願います。
    962         *
    963         * @param       flag    存在ﾁｪｯｸ [true:行う/false:行わない])
    964         */
    965        public void setFileCheck( final String flag ) {
    966                fileCheck = nval( getRequestParameter( flag ),fileCheck );
    967        }
    968
    969        /**
    970         * 【TAG】ｱﾄﾞﾚｽにﾌｧｲﾙのﾃﾞｨﾚｸﾄﾘ直接のｱﾄﾞﾚｽを指定するかどうか[true/false]設定します(初期値:false)。
    971         *
    972         * @og.tag
    973         * "true"の場合は、ﾌｧｲﾙの物理ﾃﾞｨﾚｸﾄﾘをﾘﾝｸします。
    974         * 初期値は、 "false"(ﾌｧｲﾙの直接ｱﾄﾞﾚｽを行わない)です。
    975         *
    976         * @param       flag    ﾌｧｲﾙのﾃﾞｨﾚｸﾄﾘ直接のｱﾄﾞﾚｽの指定 [true:直接ｱﾄﾞﾚｽ/その他:通常のURL]
    977         */
    978        public void setFilePath( final String flag ) {
    979                filePath = nval( getRequestParameter( flag ),filePath );
    980        }
    981
    982        /**
    983         * 【TAG】画面ID を指定します。
    984         *
    985         * @og.tag
    986         * gamenId 属性は、画面IDをｷｰに、実ｱﾄﾞﾚｽを求めるのに使用します。
    987         * 画面IDが指定された場合は、実ｱﾄﾞﾚｽに変換する。指定されない場合は、
    988         * href 属性をそのままﾘﾝｸ情報を作成します。
    989         * 画面IDを指定する場合の href は、JSPﾌｧｲﾙ名(例えば、index.jsp 等)です。
    990         * ※ 画面ID属性は、[ｶﾗﾑ名]等の動的指定はできません。
    991         *
    992         * @og.rev 3.1.2.0 (2003/04/07) ﾘﾝｸ指定時に、画面IDを渡して、実ｱﾄﾞﾚｽを求める事ができる様にする。
    993         *
    994         * @param       id      画面ID属性
    995         */
    996        public void setGamenId( final String id ) {
    997                gamenId = nval( getRequestParameter( id ),gamenId );
    998        }
    999
    1000        /**
    1001         * 【TAG】GAMENID,BACK_GAMENID 属性を付加するかどうか[true/false]を設定します(初期値:true)。
    1002         *
    1003         * @og.tag
    1004         * "true"の場合は、GAMENID,BACK_GAMENID 属性を href に追加します。(?KEY1=VAL1&amp;KEY2=VAL2･･･)
    1005         * "false"の場合は、付加しません。
    1006         * JavaScript や、通常のﾌｧｲﾙ( .html や .pdf 等)に、GAMENID,BACK_GAMENID 属性を付けないように
    1007         * する事が出来ます。
    1008         * 初期値は、 "true"(GAMENID,BACK_GAMENID 属性を href に追加する)です。
    1009         *
    1010         * @og.rev 3.1.8.0 (2003/05/16) GAMENID属性のＵＲＬへの自動ｾｯﾄを行うかどうかを決める属性( useGamenId )を追加。
    1011         *
    1012         * @param       flag    BACK_GAMENID属性の追加可否 [true:追加する/その他:追加しない]
    1013         */
    1014        public void setUseGamenId( final String flag ) {
    1015                useGamenId = nval( getRequestParameter( flag ),useGamenId );
    1016        }
    1017
    1018        /**
    1019         * 【TAG】処理するﾏｰｸを含むような文字列を、"|"区切りの文字列で指定します(初期値:"true|TRUE|1")。
    1020         *
    1021         * @og.tag
    1022         * markListで与えられた文字列に、onLink文字列(大文字/小文字の区別あり)が
    1023         * 含まれていれば、処理します。
    1024         * 例えば、"A","B","C" という文字列が、onLink で指定された
    1025         * 場合に処理するようにしたい場合は、"A|B|C" をｾｯﾄします。
    1026         * markList には、[ｶﾗﾑ名]指定が可能です。
    1027         * 初期値は、 "true|TRUE|1"です。
    1028         *
    1029         * @og.rev 3.5.2.0 (2003/10/20) 新規追加
    1030         *
    1031         * @param       list    処理するﾏｰｸ (indexOf による含む/含まない判定)
    1032         */
    1033        public void setMarkList( final String list ) {
    1034                markList = nval( getRequestParameter( list ),markList );
    1035        }
    1036
    1037        /**
    1038         * 【TAG】href ではなく、xlink:href を使用するかどうか[true/false]を指定します(初期値:false)。
    1039         *
    1040         * @og.tag
    1041         * xlink:href 属性は、XMLでのﾘﾝｸを指定します。その場合、href 属性で指定した
    1042         * 内容は、xlink:href に置き換えられます。
    1043         * また、URL文字列の接続文字列(&amp;)を、(&amp;amp;)で接続します。これは、xlink として、
    1044         * XMLﾌｧｲﾙに埋め込む場合に、置き換えが必要な為です。
    1045         * 初期値は、 "false"(通常の href) です。
    1046         *
    1047         * @og.rev 3.5.5.0 (2004/03/12) 新規追加
    1048         *
    1049         * @param       lnk     XMLﾘﾝｸを使用可否 [true:する/false:しない]
    1050         */
    1051        public void setXlink( final String lnk ) {
    1052                xlink = nval( getRequestParameter( lnk ),xlink );
    1053        }
    1054
    1055        /**
    1056         * 【TAG】ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟを使用するかどうか[true/false]を指定します(初期値:false)。
    1057         *
    1058         * @og.tag
    1059         * ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟ(指定の画面へ直接飛ばす)は、簡易ﾜｰｸﾌﾛｰ的に、画面への
    1060         * ﾘﾝｸを作成する場合に使用します。一般には、ﾒｰﾙ本文に記述して、指定の画面まで
    1061         * 直接飛ばす場合に使用します。
    1062         * このﾘﾝｸは、その画面の index.jsp に直接ｼﾞｬﾝﾌﾟします。
    1063         *
    1064         * gamenId を指定しなければ、この画面が指定されたと考えます。
    1065         * target を指定しなければ、"_blank" を指定します。
    1066         * msg がなければ(または、BODY部が空の場合)、画面名にこのﾘﾝｸを作成します。
    1067         * 初期値は、 "false"(使用しない) です。
    1068         *
    1069         * @og.rev 3.7.1.0 (2005/04/26) 新規追加
    1070         *
    1071         * @param       directJump      ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟを使用可否 [true:する/false:しない]
    1072         */
    1073        public void setUseDirectJump( final String directJump ) {
    1074                useDirectJump = nval( getRequestParameter( directJump ),useDirectJump );
    1075        }
    1076
    1077        /**
    1078         * 【TAG】ﾘｸｴｽﾄｷｬｯｼｭ情報を使用するかどうか[true/false]を指定します(初期値:true)。
    1079         *
    1080         * @og.tag
    1081         * ﾘｸｴｽﾄｷｬｯｼｭ情報は、戻るﾘﾝｸで画面を差表示(command=RENEW)する場合に
    1082         * 最後に検索に利用された情報をｷｬｯｼｭしておき、再利用する場合に利用する値です。
    1083         * ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟ機能(useDirectJum=true)の場合のみ有効です。
    1084         * 戻るﾘﾝｸによる再表示は、各画面自身が持っている情報を利用しますが、
    1085         * ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟ等で、すでにｷｬｯｼｭが存在していない(ｾｯｼｮﾝが異なっている)
    1086         * 場合に、ﾘﾝｸ情報に直接紐付けて、再検索させる必要がある場合に利用します。
    1087         * このｷｬｯｼｭは、keys,vals による値の再設定で、書き換えることが可能です。
    1088         *
    1089         * 初期値は、 "true"(使用する) です。
    1090         *
    1091         * @og.rev 3.7.1.0 (2005/04/26) 新規追加
    1092         *
    1093         * @param       useCache        ﾘｸｴｽﾄｷｬｯｼｭ使用可否 [true:する/false:しない]
    1094         */
    1095        public void setUseRequestCache( final String useCache ) {
    1096                useRequestCache = nval( getRequestParameter( useCache ),useRequestCache );
    1097        }
    1098
    1099        /**
    1100         * 【TAG】ﾘｸｴｽﾄｷｬｯｼｭ情報使用時に使用しない(削除する)ｷｰをCSV形式で複数指定します。
    1101         *
    1102         * @og.tag
    1103         * ﾘｸｴｽﾄｷｬｯｼｭ情報には、一般に検索時に使用されたすべての引数が
    1104         * 使用されます。この引数を、転送先画面では、使用しないｹｰｽがあり、その場合に、
    1105         * 指定のｷｰ情報を、削除します。
    1106         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
    1107         * こうしないとﾃﾞｰﾀ自身にｶﾝﾏを持っている場合に分解をﾐｽる為です。
    1108         *
    1109         * @og.rev 3.7.1.0 (2005/04/26) 新規追加
    1110         *
    1111         * @param       key     使用しない(削除する)ｷｰ(CSV形式)
    1112         */
    1113        public void setDelKeys( final String key ) {
    1114                delKeys = getCSVParameter( key );
    1115        }
    1116
    1117        /**
    1118         * 【TAG】ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸ時のﾊｯｼｭ化されたURLの有効期間を日数を指定します
    1119         *              (初期値:LINK_VALID_DURATION_DAYS[={@og.value SystemData#LINK_VALID_DURATION_DAYS}])。
    1120         *
    1121         * @og.tag
    1122         * ﾀﾞｲﾚｸﾄｼﾞｬﾝﾌﾟﾘﾝｸの引数を作成する場合、有効期限を指定できます。
    1123         * ここでは、設定時刻からの有効期間を日数指定します。
    1124         * 実際には、GE17のvalidDateｶﾗﾑに設定される、日付と現在日を比較して、
    1125         * 有効かどうかを判断します。
    1126         * ｾﾞﾛが指定された場合は、制限なしに設定されます。ﾏｲﾅｽの場合は、初期値が使われます。
    1127         * (初期値:ﾕｰｻﾞｰ定数のLINK_VALID_DURATION_DAYS[={@og.value SystemData#LINK_VALID_DURATION_DAYS}])。
    1128         *
    1129         * @og.rev 4.0.0.0 (2005/09/30) 新規追加
    1130         *
    1131         * @param       validDura       URLの有効期間日数
    1132         * @see         org.opengion.hayabusa.common.SystemData#LINK_VALID_DURATION_DAYS
    1133         */
    1134        public void setValidDuration( final String validDura ) {
    1135                validDuration = nval( getRequestParameter( validDura ),validDuration );
    1136        }
    1137
    1138        /**
    1139         * 【TAG】ﾘﾝｸ(ｱﾝｶｰﾀｸﾞ)ではなく、href 属性をそのまま返すかどうか[true/false]を指定します(初期値:false)。
    1140         *
    1141         * @og.tag
    1142         * 通常のﾘﾝｸは、ｱﾝｶｰﾀｸﾞ(aﾀｸﾞ)の状態で出力されます。その場合、HTML上では
    1143         * ﾘﾝｸとして表示されます。このﾌﾗｸﾞをtrue にｾｯﾄすると、ﾘﾝｸ文字列
    1144         * そのものが出力されます。これは、ﾘﾝｸ文字列を作成してDBに登録する場合などに
    1145         * 使用します。
    1146         *
    1147         * 7.1.0.1 (2020/02/07)
    1148         *  hrefOnly 属性を true に設定した場合は、URL全体をurlEncodeします。
    1149         *
    1150         * 初期値は、false:ﾘﾝｸ です。
    1151         *
    1152         * @og.rev 4.0.0.0 (2005/11/30) 新規追加
    1153         *
    1154         * @param       flag    href属性 [true:href属性/false:ﾘﾝｸ]
    1155         */
    1156        public void setHrefOnly( final String flag ) {
    1157                hrefOnly = nval( getRequestParameter( flag ),hrefOnly );
    1158        }
    1159
    1160        /**
    1161         * 【TAG】ﾘﾝｸ(ｱﾝｶｰﾀｸﾞ)ではなく、href 属性と、target属性を ｷｰも含めて返すかどうか[true/false]を指定します(初期値:false)。
    1162         *
    1163         * @og.tag
    1164         * 内容的には、hrefOnly と類似の機能で、ｱﾝｶｰﾀｸﾞ(aﾀｸﾞ)の出力ではなく、href 属性と、
    1165         * target属性を ｷｰも含めて作成します。
    1166         * ｢href="*******" target="******"｣ という形式になります。
    1167         * これは、ｸﾘｯｶﾌﾞﾙﾏｯﾌﾟ等の href 属性と target属性の両方を使用するようなｹｰｽで使います。
    1168         * また、onLink、markList を使ったﾘﾝｸ作成可否の処理をおこなった場合、通常であれば、
    1169         * 指定のｶﾗﾑの値が取得できますが、その場合は、先頭文字列が、href かどうかを判定することで、
    1170         * ﾘﾝｸ作成可否の判断が可能です。
    1171         * 逆に言えば、この属性を true にｾｯﾄした場合は、先頭文字列が、href で始まることが保障されます。
    1172         * hrefOnly = true と同時に設定した場合は、hrefOnly が優先されます。
    1173         *
    1174         * 初期値は、false:ﾘﾝｸ です。
    1175         *
    1176         * @og.rev 5.5.5.6 (2012/08/31) 新規追加
    1177         *
    1178         * @param       flag    出力形式 [true:href,target形式/false:ﾘﾝｸ]
    1179         */
    1180        public void setHrefTarget( final String flag ) {
    1181                hrefTarget = nval( getRequestParameter( flag ),hrefTarget );
    1182        }
    1183
    1184        /**
    1185         * 【TAG】ﾘﾝｸｱﾄﾞﾚｽにURLﾁｪｯｸ用の確認ｷｰを付加するかどうか[true/false]を指定します(初期値:false)。
    1186         *
    1187         * @og.tag
    1188         * この属性は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用します。
    1189         * trueが指定された場合、ﾘﾝｸURLのﾊﾟﾗﾒｰﾀｰに、URL確認用のﾊﾟﾗﾒｰﾀｰが出力されます。
    1190         * このﾊﾟﾗﾒｰﾀｰを、URLCheckFilterが復号化し、正式なｱｸｾｽであるかどうかの判定を行います。
    1191         *
    1192         * 初期値は、 ｼｽﾃﾑﾘｿｰｽのLINK_URL_CHECK です。
    1193         *
    1194         * @og.rev 4.3.7.0 (2009/06/01) 新規追加
    1195         *
    1196         * @param       flag    暗号化するかかどうか [true:暗号化する/false:しない]
    1197         * @see org.opengion.hayabusa.filter.URLCheckFilter
    1198         */
    1199        public void setUseURLCheck( final String flag ) {
    1200                useURLCheck = nval( getRequestParameter( flag ),useURLCheck );
    1201        }
    1202
    1203        /**
    1204         * 【TAG】URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸを開くことのできるﾕｰｻﾞｰIDを指定します(初期値:ﾛｸﾞｲﾝﾕｰｻﾞｰ)。
    1205         *
    1206         * @og.tag
    1207         * URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸを開くことのできるﾕｰｻﾞｰIDを
    1208         * CSV形式で指定します。
    1209         * "*"が指定された場合、ﾕｰｻﾞｰﾁｪｯｸは行われません。
    1210         *
    1211         * 初期値は、 ﾛｸﾞｲﾝﾕｰｻﾞｰです。
    1212         *
    1213         * @og.rev 4.3.8.0 (2009/08/01) 新規追加
    1214         *
    1215         * @param       user    ﾘﾝｸにｱｸｾｽ可能なﾕｰｻﾞｰ一覧
    1216         */
    1217        public void setUrlCheckUser( final String user ) {
    1218                urlCheckUser = nval( getRequestParameter( user ),urlCheckUser );
    1219        }
    1220
    1221        /**
    1222         * 【TAG】URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸの有効期限を指定します(初期値:60分)。
    1223         *
    1224         * @og.tag
    1225         * URLﾁｪｯｸ用の確認ｷｰに対して、ﾘﾝｸが生成されてからの有効期限を分単位で設定します。
    1226         * 属性値の先頭に'D'をつけることで、日付指定を行うことができます。
    1227         * (D20090612 ⇒ 20090612まで(当日を含む)は有効)
    1228         *
    1229         * 初期値は、現在時間を基準として+ "1440"(1日) です。
    1230         *
    1231         * @og.rev 4.3.8.0 (2009/08/01) 新規追加
    1232         * @og.rev 6.2.5.0 (2015/06/05) urlCheckTimeの初期値を、INIT_TIMEに変更
    1233         *
    1234         * @param       time    ﾘﾝｸの有効期限(分)
    1235         */
    1236        public void setUrlCheckTime( final String time ) {
    1237                final String tm = getRequestParameter( time );
    1238
    1239                if( StringUtil.startsChar( tm , 'D' ) ) {                       // 6.2.0.0 (2015/02/27) 1文字 String.startsWith
    1240                        if( tm.length() < 9 ) {
    1241                                final String errMsg = "urlCheckTime属性の日付はYYYYMMDD形式で指定して下さい。"
    1242                                                        + " 値=" + tm ;                  // 5.1.8.0 (2010/07/01) errMsg 修正
    1243                                throw new HybsSystemException( errMsg );
    1244                        }
    1245                        final Calendar cal = new GregorianCalendar(
    1246                                        Integer.parseInt( tm.substring( 1, 5 ) )
    1247                                        ,Integer.parseInt( tm.substring( 5, 7 ) ) - 1
    1248                                        ,Integer.parseInt( tm.substring( 7, 9 ) ) );            // 6.0.2.4 (2014/10/17) メソッド間違い
    1249                        urlCheckTime = INIT_TIME + cal.getTimeInMillis() - System.currentTimeMillis() ;         // 6.2.5.0 (2015/06/05)
    1250                }
    1251                // 6.2.5.0 (2015/06/05) tm が null でない時のみｾｯﾄ。null の場合は、初期値のままになる。
    1252                else if( tm != null ) {
    1253                        // 6.3.9.0 (2015/11/06) 整数乗算の結果を long にｷｬｽﾄしている(findbugs)
    1254                        urlCheckTime = 60L * 1000L * Integer.parseInt( tm ) ;
    1255                }
    1256        }
    1257
    1258        /**
    1259         * 【TAG】URLﾁｪｯｸ用の暗号化ｷｰを指定します(初期値:ﾃﾞﾌｫﾙﾄ)。
    1260         *
    1261         * @og.tag
    1262         * URLﾁｪｯｸに利用される暗号化のｷｰをしています。
    1263         * 受け側の設定(URL_CHECK_CRYPT)に合わせてください。
    1264         *
    1265         * 未指定の場合は標準が利用されます。
    1266         * (ｼｽﾃﾑﾘｿｰｽURL_CHECK_CRYPTが設定されている場合はそちらを利用)
    1267         *
    1268         * @og.rev 5.8.8.0 (2015/06/05) 新規追加
    1269         *
    1270         * @param       crypt   暗号化ｷｰ
    1271         */
    1272        public void setUrlCheckCrypt( final String crypt ) {
    1273                urlCheckCrypt = nval( getRequestParameter( crypt ),urlCheckCrypt );
    1274        }
    1275
    1276        /**
    1277         * 【TAG】ﾌｧｲﾙのhref 部分の一部をURLEncodeするかどうか[true/false]を指定します
    1278         *              (初期値:USE_HREF_URLENCODE[={@og.value SystemData#USE_HREF_URLENCODE}])。
    1279         *
    1280         * @og.tag
    1281         * ﾌｧｲﾙ等のﾘﾝｸで、keys,vals は、URLEncode していましたが、URL に相当する箇所は
    1282         * http:// など URLEncode してはいけない箇所がある為、何もしていませんでした。
    1283         * ﾌｧｲﾙのﾀﾞｳﾝﾛｰﾄﾞ等で、ﾌｧｲﾙ名に、";" や "%" が存在すると、認識できないため
    1284         * ﾌｧｲﾙが見つからないｴﾗｰが発生していました。
    1285         * なお、ﾌｧｲﾙに限定する意味で、useGamenId="false" の場合のみ、有効にします。
    1286         *      (初期値:USE_HREF_URLENCODE[={@og.value SystemData#USE_HREF_URLENCODE}])。
    1287         *
    1288         * ※ 6.2.0.1 (2015/03/06) ASCII以外の文字＋";" と "%"の、URLｴﾝｺｰﾄﾞを行う様に仕様変更。
    1289         *
    1290         * @og.rev 6.0.2.0 (2014/09/19) 新規追加
    1291         *
    1292         * @param       useEnc  hrefの一部をURLEncode可否 [true:する/false:しない]
    1293         */
    1294        public void setUseHrefEncode( final String useEnc ) {
    1295                useHrefEncode = nval( getRequestParameter( useEnc ),useHrefEncode );
    1296        }
    1297
    1298        /**
    1299         * 【TAG】(通常は使いません)ｶﾗﾑIDの存在ﾁｪｯｸを行うかどうか[true/false]を指定します(初期値:true)。
    1300         *
    1301         * @og.tag
    1302         * true の場合、ｶﾗﾑIDがDBTableModel に存在しない場合は、ｴﾗｰになります。
    1303         * false の場合、ｶﾗﾑIDがDBTableModel に存在しない場合は、無視します。
    1304         * これは、検索条件によって、設定されるｶﾗﾑが異なる場合でも、後続処理を
    1305         * 正常に動作させたい場合に、使用します。
    1306         * 初期値は true (ﾁｪｯｸを行う) です。
    1307         * この属性は、column属性とともに、ViewLink ﾀｸﾞを使用する場合にのみ有効です。
    1308         *
    1309         * @og.rev 6.7.6.0 (2017/03/17) strictCheck 追加。
    1310         *
    1311         * @param       check   存在ﾁｪｯｸ [true:行う/false:行わない]
    1312         */
    1313        public void setStrictCheck( final String check ) {
    1314                strictCheck = nval( getRequestParameter( check ),strictCheck );
    1315        }
    1316
    1317        /**
    1318         * 【TAG】valsの値が[で開始している場合でもURLEncodeを通すかを設定します(初期値:false)。
    1319         *
    1320         * @og.tag
    1321         * ﾃｰﾌﾞﾙﾓﾃﾞﾙの値の変換のため、通常は先頭が[の場合はｴﾝｺｰﾄﾞがかかりません。
    1322         * 強制的にかける場合にtrueにします。
    1323         *
    1324         * @og.rev 5.10.15.3 (2019/09/27) forceEnc追加
    1325         *
    1326         * @param       flg     URLEncodeを通す場合は、trueをｾｯﾄ
    1327         */
    1328        public void setForceEnc( final String flg ) {
    1329                useForceEnc = nval( getRequestParameter( flg ), useForceEnc );
    1330        }
    1331
    1332        /**
    1333         * 【TAG】(通常は使いません) 戻るﾘﾝｸを表示(true)、必ず表示しない(false)、従来通り(null)を指定します。
    1334         *
    1335         * @og.tag
    1336         * 通常の戻るﾘﾝｸは、自分自身へのﾘﾝｸ時には出さずに、別画面IDの場合のみ(条件が成立すれば)表示します。
    1337         * この属性を使用すると、自分自身へのﾘﾝｸ時でも、戻るﾘﾝｸを表示できます。
    1338         * 別画面へのﾘﾝｸで、条件が成立していない場合に表示(true)を設定すると、戻ることができないため、
    1339         * 自分自身へのﾘﾝｸを表示しますので、ご注意ください。
    1340         *
    1341         * true：相手先に(条件が成立すれば)戻るﾘﾝｸを表示。条件が成立しない場合は、自身へのﾘﾝｸが表示。
    1342         * false:必ず表示しない
    1343         * 未指定(null):従来通り…自分自身では戻るﾘﾝｸを表示せず、別画面の場合のみ表示します。
    1344         * 初期値は null (従来通り)です。
    1345         *
    1346         * @og.rev 7.3.1.0 (2021/02/02) useBackLink 追加。
    1347         *
    1348         * @param       flg     URLEncodeを通す場合は、trueをｾｯﾄ
    1349         */
    1350        public void setUseBackLink( final String flg ) {
    1351                useBackLink = nval( getRequestParameter( flg ), useBackLink );
    1352        }
    1353
    1354//      /**
    1355//       * 【TAG】外部（ﾌﾟﾗｸﾞｲﾝ）のﾄｰｸﾝを利用する場合にﾌﾟﾗｸﾞｲﾝを指定します。
    1356//       *
    1357//       * @og.tag
    1358//       * ﾌﾟﾗｸﾞｲﾝの名前を指定する事で、該当のCreateTokenを利用して
    1359//       * URLに対してﾄｰｸﾝを付与します。
    1360//       * （CreatetToken_xxxのxxxを指定します）
    1361//       *
    1362//       * CSV形式を分解して、ﾌﾟﾗｸﾞｲﾝを配列として持ちます。
    1363//       * 適応は前から順番に行います。
    1364//       *
    1365//       * @og.rev 5.8.2.1 (2014/12/13) 新規追加
    1366//       * @og.rev 6.4.3.3 (2016/03/04) HybsSystem.newInstance(String,String) への置き換え。
    1367//       * @og.rev 6.9.5.0 (2018/04/23) extToken 廃止
    1368//       *
    1369//       * @param       name    利用するCreateTokenﾌﾟﾗｸﾞｲﾝ
    1370//       */
    1371//      public void setExtToken( final String name ) {
    1372//              extToken = nval( getRequestParameter( name ),extToken );
    1373//              ctArray  = new ArrayList<>();
    1374//
    1375//              if( extToken != null && extToken.length() > 0 ) {
    1376//                      final String[] tokens = StringUtil.csv2Array( extToken );
    1377//                      for( final String tk : tokens ) {
    1378//                              final CreateToken ct = HybsSystem.newInstance( "CreateToken_" , tk );
    1379//                              ctArray.add( ct );
    1380//                      }
    1381//              }
    1382//      }
    1383
    1384        /**
    1385         * このｵﾌﾞｼﾞｪｸﾄの文字列表現を返します。
    1386         * 基本的にﾃﾞﾊﾞｯｸﾞ目的に使用します。
    1387         *
    1388         * @return      このｸﾗｽの文字列表現
    1389         * @og.rtnNotNull
    1390         */
    1391        @Override
    1392        public String toString() {
    1393                return ToString.title( this.getClass().getName() )
    1394                                .println( "VERSION"                     ,VERSION                )
    1395                                .println( "column"                      ,column                 )
    1396                                .println( "onLink"                      ,onLink                 )
    1397                                .println( "fileCheck"           ,fileCheck              )
    1398                                .println( "filePath"            ,filePath               )
    1399                                // 7.2.7.0 (2020/08/07) 他の属性の関係で、baseURLをfileURL に変更
    1400//                              .println( "baseURL"                     ,baseURL                )
    1401                                .println( "fileURL"                     ,fileURL                )                                       // 7.2.7.0 (2020/08/07)
    1402                                .println( "gamenId"                     ,gamenId                )
    1403                                .println( "useGamenId"          ,useGamenId             )
    1404                                .println( "markList"            ,markList               )
    1405                                .println( "xlink"                       ,xlink                  )
    1406                                .println( "useDirectJump"       ,useDirectJump  )
    1407                                .println( "useRequestCache"     ,useRequestCache)
    1408                                .println( "hrefOnly"            ,hrefOnly               )
    1409                                .println( "hrefTarget"          ,hrefTarget             )                                       // 5.5.5.6 (2012/08/31)
    1410                                .println( "strictCheck"         ,strictCheck    )                                       // 6.7.6.0 (2017/03/17)
    1411                                .println( "validDuration"       ,validDuration  )
    1412                                .println( "keys"                        ,keys                   )
    1413                                .println( "vals"                        ,vals                   )
    1414                                .println( "delKeys"                     ,delKeys                )
    1415                                .println( "useURLCheck"         ,useURLCheck    )
    1416                                .println( "urlCheckUser"        ,urlCheckUser   )
    1417                                .println( "urlCheckTime"        ,urlCheckTime   )
    1418                                .println( "Other..."            ,getAttributes().getAttribute() )
    1419                                .fixForm().toString() ;
    1420        }
    1421}