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