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