    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.taglib;
    017
    018import org.opengion.hayabusa.common.HybsSystem;
    019import org.opengion.hayabusa.resource.GUIInfo;
    020import org.opengion.hayabusa.resource.RoleMode ;
    021import org.opengion.hayabusa.db.DBLastSql;
    022import org.opengion.fukurou.util.Attributes;
    023import org.opengion.fukurou.util.XHTMLTag;
    024import org.opengion.fukurou.util.StringUtil ;
    025
    026import static org.opengion.fukurou.util.StringUtil.nval ;
    027
    028/**
    029 * ファイルアップロード/ダウンロードリンクを作成するタグです(通常は result_info.jsp に組込み)。
    030 *
    031 * 画面検索した結果を、ダウンロードしたり、アップロードする機能は、画面リソースの
    032 * ロール制御で管理しています。
    033 * ただし、デフォルトで、以下の制限が掛かっています。
    034 *
    035 * ファイルダウンロード
    036 *   ・command="NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" のみ
    037 * ファイルアップロード
    038 *   ・command="COPY|INSERT" のみ
    039 *
    040 * 5.7.8.1 (2014/07/18)
    041 *  addDownCmnd と、addUpldCmnd を指定すれば、ダウンロード、アップロードできる
    042 *  command を増やすことが可能です。
    043 *
    044 * また、typeDownload="true" にするとDownload 処理を行う為の前処理を実施します。
    045 * Download 処理を行うには、指定の画面(呼び出し元)と、抜き出した時の
    046 * DBTableModel がマッチしているか判定します。
    047 * また、DBTableModel が存在しない、または、不備な場合(オーバーフロー)は、
    048 * 最終SQLを実行する必要があり、そもそも、抜出処理が出来ない状態では、
    049 * エラーを返す必要があります。
    050 * それら、一連のDownload 処理を行うかどうかを指定します。
    051 * true の場合、session の HybsSystem.DB_LAST_SQL_KEY に格納された
    052 * DBLastSql オブジェクトを取得し、scope が request または、overflow が
    053 * true の場合に、BODY部を実行します。(通常、queryタグを記述します。)
    054 * query の出力先は、scope を request にします。
    055 * それ以外は、tableId から取り出した DBTableModel を、scope = "request"
    056 * に(アドレスのみ)コピーします。
    057 * writeTable タグでは、scope = "request" から、DBTableModel を取り出します。
    058
    059 * @og.formSample
    060 * ●形式：一般ユーザーが直接組み込むことはありません。
    061 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    062 *
    063 * ●Tag定義：
    064 *   &lt;og:fileUD
    065 *       command            【TAG】command を指定します
    066 *       downloadImg        【TAG】ダウンロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileDownload.gif")
    067 *       downloadJsp        【TAG】ダウンロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileDownload.jsp")
    068 *       uploadImg          【TAG】アップロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileUpload.gif")
    069 *       uploadJsp          【TAG】アップロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileUpload.jsp")
    070 *       imgWidth           【TAG】アイコン幅サイズ(px)を指定します(初期値:20px)
    071 *       imgHeight          【TAG】アイコン高さサイズ(px)を指定します(初期値:20px)
    072 *       filename           【TAG】ダウンロード時ファイル名を指定します(初期値:"{&#064;GUI.LABEL}.xls")
    073 *       addDownCmnd        【TAG】ダウンロード時のコマンドを追加指定できます(初期値:null)
    074 *       addUpldCmnd        【TAG】アップロード時のコマンドを追加指定できます(初期値:null)
    075 *       roles              【TAG】ロールズをセットします
    076 *       target             【TAG】ダウンロード文書を表示させるフレーム、またはウィンドウの名前を指定します
    077 *       errorMsg           【TAG】ダウンロード出来ない場合のエラーメッセージIDを指定します(初期値:ERR0028)
    078 *       typeDownload       【TAG】Download 処理を行うかどうかを指定します(初期値:false)
    079 *       useEditLink        【TAG】編集リンク自体を出すかどうかどうか(初期値:true)
    080 *       editImg            【TAG】編集アイコンを指定します(初期値:"{&#064;SYS.JSP}/image/edit.png")
    081 *       clmEdit            【TAG】編集時にカラム編集タブを表示するかどうか(初期値:true)
    082 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    083 *   &gt;   ... Body ...
    084 *   &lt;/og:fileUD&gt;
    085 *
    086 * ●使用例
    087 *     &lt;og:fileUD command="{&#064;command}" /&gt;
    088 *
    089 *     &lt;og:fileUD
    090 *         command        = command設定 (ダウンロード="NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW" 、   アップロード="COPY|INSERT")
    091 *       [ downloadImg ]  = "{&#064;SYS.JSP}/image/fileDownload.gif"   ダウンロード時のアイコン
    092 *       [ downloadJsp ]  = "{&#064;SYS.JSP}/common/fileDownload.jsp"  ダウンロード時の呼び出しJSP
    093 *       [ uploadImg   ]  = "{&#064;SYS.JSP}/image/fileUpload.gif"     アップロード時のアイコン
    094 *       [ uploadJsp   ]  = "{&#064;SYS.JSP}/common/filePopup.jsp"     アップロード時の呼び出しJSP
    095 *       [ imgWidth    ]  = "20px"                                アイコン幅サイズ(px)
    096 *       [ imgHeight   ]  = "20px"                                アイコン高さサイズ(px)
    097 *       [ filename    ]  = "{&#064;GUI.LABEL}.xls"               ダウンロード時ファイル名
    098 *       [ roles       ]  = "GE|DOC"                              アクセスロールズ
    099 *       [ target      ]  = "_blank"                              ダウンロードファイルを開くターゲット
    100 *       [ errorMsg    ]  = "ERR0042"                             エラーメッセージID
    101 *       [ typeDownload]  = "false/true"                          Download 処理を行うかどうか(初期値:false)
    102 *     /&gt;
    103 *
    104 * @og.group ファイルアップロード/ダウンロード
    105 *
    106 * @og.rev 4.3.0.0 (2008/07/04) 新規追加
    107 * @og.rev 5.7.4.1 (2014/03/15) エラーメッセージ変更
    108 * @og.rev 5.9.32.1 (2018/05/08) URLチェック対応
    109 *
    110 * @version  4.0
    111 * @author       Kazuhiko Hasegawa
    112 * @since    JDK5.0,
    113 */
    114public class FileUDTag extends CommonTagSupport {
    115        //* このプログラムのVERSION文字列を設定します。   {@value} */
    116        private static final String VERSION = "5.7.8.1 (2014/07/18)" ;
    117
    118        private static final long serialVersionUID = 578120140718L ;
    119
    120        private String  sysJsp                  = HybsSystem.sys( "JSP" );
    121
    122        private String  command                 = null;         // ダウンロード="NEW|RENEW" 、アップロード="COPY|INSERT"
    123        private String  downloadImg             = sysJsp + "/image/fileDownload.gif";   // ダウンロード時のアイコン
    124        private String  downloadJsp             = sysJsp + "/common/fileDownload.jsp";  // ダウンロード時の呼び出しJSP
    125        private String  uploadImg               = sysJsp + "/image/fileUpload.gif";             // アップロード時のアイコン
    126        private String  uploadJsp               = sysJsp + "/common/filePopup.jsp";             // アップロード時の呼び出しJSP
    127        private String  imgWidth                = "20px";                                               // アイコン幅サイズ(px)
    128        private String  imgHeight               = "20px";                                               // アイコン高さサイズ(px)
    129        private String  filename                = null;                                                 // ダウンロード時ファイル名("{@GUI.LABEL}.xls")
    130        private String  roles                   = null;                                                 // アクセスロールズ
    131        private String  target                  = null;                                                 // ダウンロードファイルを開くターゲット
    132        private String  errorMsg                = "ERR0042";                                    // 出力対象データが見つかりませんでした。再度検索して下さい。 5.7.4.1 (2014/03/15)
    133        private boolean isError                 = false;
    134        private boolean typeDownload    = false;                                                // Download 処理を行うかどうか(初期値:false)
    135        private boolean isEdit                  = true;                                                 // 5.6.0.2 (2013/01/19) ロールのisEditとほぼ同等。clmEdit用。
    136        private boolean useEditLink             = true;                                                 // 5.7.5.0 (2014/04/04) 編集リンク自体を出すかどうかどうか(初期値:true)
    137
    138        private String  addDownCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) ダウンロード時のコマンドを追加
    139        private String  addUpldCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) アップロード時のコマンドを追加
    140
    141        private static final String     EDIT_GAMENID= "14_EDIT";                                        // 編集画面の画面ID
    142        private String                          editImg         = sysJsp + "/image/edit.png";   // 編集時のアイコン
    143
    144        // 5.9.32.1 (2018/05/08) URLチェック対応
    145        private boolean useURLCheck     =  HybsSystem.sysBool("FILEUD_URL_CHECK");
    146        private long            urlCheckTime= 1000*60*60*24;
    147        private String          urlCheckCrypt = HybsSystem.sys( "URL_CHECK_CRYPT" );
    148
    149        /**
    150         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    151         *
    152         * @og.rev 5.1.6.0 (2010/05/01) 画面項目並べ替え対応
    153         *
    154         * @return      後続処理の指示(SKIP_BODY)
    155         */
    156        @Override
    157        public int doStartTag() {
    158
    159                if( typeDownload ) {
    160                        DBLastSql lastSql = (DBLastSql)getSessionAttribute( HybsSystem.DB_LAST_SQL_KEY );
    161                        if( lastSql != null ) {
    162                                String guikey = getRequest().getParameter( "gamenId" );
    163                                if( lastSql.isGuiMatch( guikey ) ) {
    164                                        // view タグで仕込んだ clmNames を、Request 変数に設定します。
    165                                        setRequestAttribute( "DB.CLM_NAMES" , lastSql.getClmNames() );
    166                                        // 5.1.6.0 (2010/05/01) 画面項目並べ替え対応
    167                                        setRequestAttribute( "DB.VIEW_CLM_NAMES" , lastSql.getViewClmNames() );
    168                                        setRequestAttribute( "DB.VIEW_EDITABLE" , Boolean.toString( lastSql.isViewEditable() ) );
    169
    170        //                              if( lastSql.isRequest() || lastSql.isOverflow() ) {
    171                                        if( lastSql.isRequest() ) {
    172                                                // 5.1.6.0 (2010/05/01)
    173                                                String sql = getUserInfo( "LASTSQL" );
    174                                                if( sql != null ) {
    175                                                        return EVAL_BODY_BUFFERED ;     // Body を評価する。( extends BodyTagSupport 時)
    176                                                }
    177                                        }
    178                                        String tableId = lastSql.getTableId();
    179                                        setRequestAttribute( HybsSystem.TBL_MDL_KEY, getSessionAttribute( tableId ) );
    180                                        return SKIP_BODY ;                              // Body を評価しない
    181                                }
    182                        }
    183
    184                        // 処理が実行できない場合、エラーを出力します。
    185                        jspPrint( getResource().getLabel( errorMsg ) );
    186                        isError = true;
    187                }
    188
    189                return SKIP_BODY ;                              // Body を評価しない
    190        }
    191
    192        /**
    193         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    194         *
    195         * @og.rev 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
    196         * @og.rev 5.1.6.0 (2010/05/01) 帳票画面定義機能対応
    197         * @og.rev 5.1.7.0 (2010/06/01) 進む・戻るボタンでもExcel出力ボタンを出す
    198         * @og.rev 5.3.6.0 (2011/06/01) Edit機能見直し
    199         * @og.rev 5.3.7.0 (2011/07/01) Excel取込で画面IDとアドレスが異なる場合にエラーとなるバグを修正
    200         * @og.rev 5.3.7.0 (2011/07/01) 編集画面をリサイズできるように対応します。
    201         * @og.rev 5.3.7.0 (2011/07/01) PL/SQLを利用した検索でファイルダウンロードが出来るように対応します。
    202         * @og.rev 5.4.2.0 (2011/12/01) 画面リソースで画面編集機能のON/OFFを設定できるようにする。
    203         * @og.rev 5.5.2.4 (2012/05/16) nullに対する冗長な比較
    204         * @og.rev 5.5.5.2 (2012/08/20) 画面リソースのoモード対応
    205         * @og.rev 5.5.6.2 (2012/09/24) makeTagのtarget対応
    206         * @og.rev 5.6.0.2 (2013/01/19) editモードのisEditコントロール対応
    207         * @og.rev 5.7.5.0 (2014/04/04) 編集リンク自体を出すかどうかどうか(初期値:true)
    208         * @og.rev 5.7.8.1 (2014/07/18) command="RESET" 時に、ダウンロードリンクを表示
    209         * @og.rev 5.7.8.1 (2014/07/18) addDownCmnd , addUpldCmndを追加
    210         * @og.rev 5.8.9.0 (2015/08/07) 6.3.4.0の移植 EditのURLをindex.jspまで指定する。
    211         * @og.rev 5.9.32.1 (2018/05/11) 出力ファイルの拡張子の自動変更
    212         * @og.rev 5.10.0.2 (2018/06/22) 6.8.1.3対応 日本語のeditNameが400エラー
    213         *
    214         * @return      後続処理の指示
    215         */
    216        @Override
    217        public int doEndTag() {
    218                debugPrint();
    219
    220                if( isError      ) { return SKIP_PAGE ; }               // ページの残りの処理を行わない。
    221                if( typeDownload ) { return EVAL_PAGE ; }               // ページの残りを評価する。
    222
    223                boolean isDownload ;
    224                // 5.7.8.1 (2014/07/18) command="RESET" 時に、ダウンロードリンクを表示
    225                if(    "NEW".equals(   command ) || "RENEW".equals( command )
    226                        || "FIRST".equals( command ) || "LAST".equals(  command )
    227                        || "PREV".equals(  command ) || "NEXT".equals(  command )
    228                        || "VIEW".equals(  command ) || "RESET".equals( command ) ) {
    229                        isDownload = true;
    230                }
    231                else if( "COPY".equals( command ) || "INSERT".equals( command ) ) {
    232                        isDownload = false;
    233                }
    234                // 5.7.8.1 (2014/07/18) addDownCmnd , addUpldCmndを追加
    235                else if( addDownCmnd != null && addDownCmnd.equals( command ) ) {
    236                        isDownload = true;
    237                }
    238                else if( addUpldCmnd != null && addUpldCmnd.equals( command ) ) {
    239                        isDownload = false;
    240                }
    241                else {
    242                        return EVAL_PAGE ;
    243                }
    244
    245                byte bitMode ;
    246                if( roles != null ) {
    247                        RoleMode roleMode = RoleMode.newInstance( roles );
    248                        RoleMode userRoleMode = getUser().getRoleMode();
    249                        bitMode = userRoleMode.getAccessBitMode( roleMode );
    250                }
    251                else {
    252                        GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
    253                        bitMode = guiInfo.getBitMode();
    254                }
    255
    256                if( filename == null ) {
    257                        String suffix =  HybsSystem.sys( "TABLE_WRITER_EXCEL_TYPE"); // 5.9.32.1 (2018/05/11)
    258                        //filename = getGUIInfoAttri( "LABEL" ) + ".xls" ;
    259                        filename = getGUIInfoAttri( "LABEL" ) + "." + suffix ;
    260                }
    261                String guikey = getGUIInfoAttri( "KEY" );       // 4.3.0.1 (2008/08/11)
    262                if( isDownload ) {
    263                        if( RoleMode.isDownload( bitMode ) ) {
    264                                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
    265                                // <og:link href="{@SYS.JSP}/common/fileDownload.jsp" target="_blank" useGamenId="false"
    266                                //              keys="filename,h_clms" vals="{@GUI.LABEL}.xls,{@h_clms}" >
    267
    268                                // 5.3.7.0 (2011/07/01) PL/SQLを利用した検索でファイルダウンロードが出来るように対応します。
    269                                String href = downloadJsp + "?command=RENEW&gamenId=" + guikey + "&GAMENID=" + guikey + "&filename=" + StringUtil.urlEncode( filename ) ;
    270
    271                                jspPrint( makeTag( downloadImg,href,"Download File", target, true ) ); // 5.5.6.2 (2012/09/24)
    272
    273                                // 5.1.6.0 (2010/05/01) 帳票画面定義機能対応
    274                                // 5.3.6.0 (2011/06/01) Edit機能見直し
    275                                GUIInfo editGui = getUser().getGUIInfo( EDIT_GAMENID );
    276                                // 5.7.5.0 (2014/04/04) 編集リンク自体を出すかどうかどうか(初期値:true)
    277                                if( editGui != null && useEditLink ) {
    278//                                      String hrefEdit = sysJsp + "/" + editGui.getAddress() + "/"
    279                                        String hrefEdit = sysJsp + "/" + editGui.getAddress() + "/index.jsp" // 5.8.9.0 (2015/08/07)
    280                                                                                + "?command=NEW&gamenId=" + guikey + "&GAMENID=" + guikey;
    281
    282                                        String editName = getRequestValue( "editName" );
    283                                        // 5.5.2.4 (2012/05/16) nullに対する冗長な比較
    284                                        if( editName != null ) {
    285//                                              hrefEdit += "&editName=" + editName;
    286                                                hrefEdit += "&editName=" +StringUtil.urlEncode( editName ); // 5.10.0.2 (2018/06/22) 日本語のeditNameが400エラー
    287                                        }
    288
    289                                        // 5.4.2.0 (2011/12/01) 画面リソースで画面編集機能のON/OFFを設定できるようにする。
    290                                        if( RoleMode.isEdit( bitMode ) && isEdit ) { // 5.6.0.2(2013/01/09)
    291                                                hrefEdit += "&edit=true";
    292                                        }
    293
    294                                        // 5.5.5.2 (2012/08/10) 画面リソースで、画面編集機能の制限を行えるようにする
    295                                        if( RoleMode.isFullEdit( bitMode ) ) {
    296                                                hrefEdit += "&fullEdit=true";
    297                                        }
    298                                        else{
    299                                                hrefEdit += "&fullEdit=false";
    300                                        }
    301
    302                                        // 5.3.7.0 (2011/07/01) 編集画面をリサイズできるように対応します。
    303                                        hrefEdit = "javascript:ogOpen('" + hrefEdit + "',null,null,'width=800px,height=330px,top=350,left=100,resizable=yes',false);";
    304//                                      jspPrint( makeTag (editImg,hrefEdit,"Edit",null,false) ); // 5.5.6.2 (2012/09/24)
    305                                        jspPrint( makeTag (editImg,hrefEdit,"Edit",null,false).replace( "href", "onClick" ) ); // 5.10.0.2 (2018/06/21)
    306                                }
    307                        }
    308                }
    309                else {
    310                        if( RoleMode.isUpload( bitMode ) ) {
    311                                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
    312                                // <og:link href="{@SYS.JSP}/common/filePopup.jsp" keys="callBack" vals="{@GUI.KEY}/{@SESSION.JSPID}" >
    313
    314                                String jspId  = (String)getSessionAttribute( "JSPID" );
    315                                // 5.3.7.0 (2011/07/01) Excel取込で画面IDとアドレスが異なる場合にエラーとなるバグを修正
    316                                String callBack = getGUIInfoAttri( "ADDRESS" ) + "/" + jspId + "?GAMENID=" + guikey;
    317                                callBack = StringUtil.urlEncode( callBack );
    318                                String href = uploadJsp + "?callBack=" +  callBack;
    319
    320                                jspPrint( makeTag( uploadImg,href,"Upload File",target,false ) ); // 5.5.6.2 (2012/09/24)
    321                        }
    322                }
    323
    324                return EVAL_PAGE ;
    325        }
    326
    327        /**
    328         * タグリブオブジェクトをリリースします。
    329         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    330         *
    331         * @og.rev 5.7.4.1 (2014/03/15) エラーメッセージ変更
    332         * @og.rev 5.7.5.0 (2014/04/04) useEditLink 追加
    333         * @og.rev 5.7.8.1 (2014/07/18) addDownCmnd,addUpldCmnd 追加
    334         * @og.rev 5.9.32.1 (2018/05/08) URLチェック対応
    335         */
    336        @Override
    337        protected void release2() {
    338                super.release2();
    339                sysJsp                  = HybsSystem.sys( "JSP" );
    340                command                 = null;         // ダウンロード="NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" 、アップロード="COPY|INSERT"
    341                downloadImg             = sysJsp + "/image/fileDownload.gif";   // ダウンロード時のアイコン
    342                downloadJsp             = sysJsp + "/common/fileDownload.jsp";  // ダウンロード時の呼び出しJSP
    343                uploadImg               = sysJsp + "/image/fileUpload.gif";             // アップロード時のアイコン
    344                uploadJsp               = sysJsp + "/common/filePopup.jsp";             // アップロード時の呼び出しJSP
    345                imgWidth                = "20px";                                               // アイコン幅サイズ(px)
    346                imgHeight               = "20px";                                               // アイコン高さサイズ(px)
    347                filename                = null;                                                 // ダウンロード時ファイル名("{@GUI.LABEL}.xls")
    348                roles                   = null;                                                 // アクセスロールズ
    349                target                  = null;                                                 // ダウンロードファイルを開くターゲット
    350                errorMsg                = "ERR0042";                                    // 出力対象データが見つかりませんでした。再度検索して下さい。 5.7.4.0 (2014/03/15)
    351                typeDownload    = false;                                                // Download 処理を行うかどうか(初期値:false)
    352                isError                 = false;
    353                editImg                 = sysJsp + "/image/edit.png";   // 編集時のアイコン
    354                isEdit                  = true;                                                 // 5.6.0.2 (2013/01/19)
    355                useEditLink             = true;                                                 // 5.7.5.0 (2014/04/04) 追加
    356                addDownCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) ダウンロード時のコマンドを追加
    357                addUpldCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) アップロード時のコマンドを追加
    358                useURLCheck             = HybsSystem.sysBool("FILEUD_URL_CHECK"); // 5.9.32.1 (2018/05/11)
    359                urlCheckCrypt   = HybsSystem.sys( "URL_CHECK_CRYPT" ); // 5.9.32.1 (2018/05/11)
    360        }
    361
    362        /**
    363         * リンクを作成します。
    364         *
    365         * @og.rev 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
    366         * @og.rev 5.5.6.2 (2012/09/24) tgt引数追加
    367         *
    368         * @param       imgsrc  イメージソース
    369         * @param       href    リンクのURL
    370         * @param       alt             イメージの説明文書
    371         * @param       tgt             HTMLのtarget
    372         * @param       chk             urlCheck対象
    373         * @og.rev 5.9.32.1 (2018/05/08) URLチェック対応
    374         *
    375         * @return      リンク文字列
    376         */
    377//      private String makeTag( final String imgsrc, final String href,  final String alt, final String tgt ) { // 5.5.6.2 (2012/09/24)
    378        private String makeTag( final String imgsrc, final String href,  final String alt, final String tgt, final boolean chk ) { // 5.5.6.2 (2012/09/24)
    379                // linkのBODY部にセットするイメージタグの作成
    380                Attributes imgAttri = new Attributes();
    381                imgAttri.set( "width"   , imgWidth );
    382                imgAttri.set( "height"  , imgHeight );
    383                imgAttri.set( "src"             , imgsrc );
    384                imgAttri.set( "alt"             , alt );
    385
    386                String img = XHTMLTag.img( imgAttri );
    387
    388                // 5.9.32.1 (2018/05/11) urlCheck
    389                String tag = href;
    390                if( useURLCheck && chk ) {
    391                        tag = XHTMLTag.addURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime );
    392                }
    393
    394                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
    395                // linkタグの作成
    396                Attributes linkAttri = new Attributes();
    397                //linkAttri.set( "href" , href );
    398                linkAttri.set( "href"   , tag );
    399                linkAttri.set( "body"   , img );
    400                linkAttri.set( "target" , tgt ); // 5.5.6.2 (2012/09/24)
    401
    402                return XHTMLTag.link( linkAttri );
    403
    404        }
    405
    406        /**
    407         * 【TAG】command を指定します。
    408         *
    409         * @og.tag
    410         * command を指定します。
    411         * ダウンロードは、"NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" のみ有効です。
    412         * アップロードは、"COPY|INSERT" のみ有効です。
    413         * それ以外のコマンドでは、アイコンは表示されません。
    414         * 例えば、NEXT/PREV など。
    415         *
    416         * @param       cmd コマンド[NEW/RENEW/FIRST/LAST/PREV/NEXT/VIEW/RESET/COPY/INSERT]
    417         * @see         #setAddDownCmnd( String )
    418         * @see         #setAddUpldCmnd( String )
    419         * @see         #setCommand( String )
    420         */
    421        public void setCommand( final String cmd ) {
    422                command = nval( getRequestParameter( cmd ),command );
    423        }
    424
    425        /**
    426         * 【TAG】ダウンロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileDownload.gif")。
    427         *
    428         * @og.tag
    429         * ダウンロード時に表示されるアイコンを指定します。
    430         * 初期値:"{&#064;SYS.JSP}/image/fileDownload.gif" です。
    431         *
    432         * @param       img ダウンロード時のアイコン
    433         */
    434        public void setDownloadImg( final String img ) {
    435                downloadImg = nval( getRequestParameter( img ),downloadImg );
    436        }
    437
    438        /**
    439         * 【TAG】ダウンロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileDownload.jsp")。
    440         *
    441         * @og.tag
    442         * ダウンロード時に呼び出されるJSPファイル名を指定します。
    443         * 初期値:"{&#064;SYS.JSP}/common/fileDownload.jsp" です。
    444         *
    445         * @param       file ダウンロード時の呼び出しJSP
    446         */
    447        public void setDownloadJsp( final String file ) {
    448                downloadJsp = nval( getRequestParameter( file ),downloadJsp );
    449        }
    450
    451        /**
    452         * 【TAG】アップロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileUpload.gif")。
    453         *
    454         * @og.tag
    455         * アップロード時に表示されるアイコンを指定します。
    456         * 初期値:"{&#064;SYS.JSP}/image/fileUpload.gif" です。
    457         *
    458         * @param       img アップロード時のアイコン
    459         */
    460        public void setUploadImg( final String img ) {
    461                uploadImg = nval( getRequestParameter( img ),uploadImg );
    462        }
    463
    464        /**
    465         * 【TAG】アップロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileUpload.jsp")。
    466         *
    467         * @og.tag
    468         * アップロード時に呼び出されるJSPファイル名を指定します。
    469         * 初期値:"{&#064;SYS.JSP}/common/fileUpload.jsp" です。
    470         *
    471         * @param       file アップロード時の呼び出しJSP
    472         */
    473        public void setUploadJsp( final String file ) {
    474                uploadJsp = nval( getRequestParameter( file ),uploadJsp );
    475        }
    476
    477        /**
    478         * 【TAG】アイコン幅サイズ(px)を指定します(初期値:20px)。
    479         *
    480         * @og.tag
    481         * アップロード/ダウンロードのアイコンを表示する際の幅サイズ(px)を指定します。
    482         * ファイルサイズは、アップロード/ダウンロード共通です。
    483         * 初期値は、20px です。
    484         *
    485         * @param       width   アイコン幅サイズ(px)
    486         */
    487        public void setImgWidth( final String width ) {
    488                imgWidth = nval( getRequestParameter( width ),imgWidth );
    489        }
    490
    491        /**
    492         * 【TAG】アイコン高さサイズ(px)を指定します(初期値:20px)。
    493         *
    494         * @og.tag
    495         * アップロード/ダウンロードのアイコンを表示する際の高さサイズ(px)を指定します。
    496         * ファイルサイズは、アップロード/ダウンロード共通です。
    497         * 初期値は、20px です。
    498         *
    499         * @param       height  アイコン高さサイズ(px)
    500         */
    501        public void setImgHeight( final String height ) {
    502                imgHeight = nval( getRequestParameter( height ),imgHeight );
    503        }
    504
    505        /**
    506         * 【TAG】ダウンロード時ファイル名を指定します(初期値:"{&#064;GUI.LABEL}.xls")。
    507         *
    508         * @og.tag
    509         * ダウンロード時のファイル名を指定します
    510         * 通常は、画面のラベル(言語対応)＋XLS拡張子です。
    511         * 初期値は、"{&#064;GUI.LABEL}.xls" です。
    512         *
    513         * @param       file    ダウンロード時ファイル名("{&#064;GUI.LABEL}.xls")
    514         */
    515        public void setFilename( final String file ) {
    516                filename = nval( getRequestParameter( file ),filename );
    517        }
    518
    519        /**
    520         * 【TAG】ロールズをセットします。
    521         *
    522         * @og.tag
    523         * ここで指定したロールを元に、ユーザー毎のアクセス許可がチェックされます。
    524         * アクセス許可されないと、表示されません。
    525         * このロールを指定しない場合は、画面のロールが使用されます。
    526         *
    527         * @param       rls パラメータ
    528         */
    529        public void setRoles( final String rls ) {
    530                roles = nval( getRequestParameter( rls ),roles );
    531        }
    532
    533        /**
    534         * 【TAG】ダウンロード文書を表示させるフレーム、またはウィンドウの名前を指定します。
    535         *
    536         * @og.tag フレーム名(ターゲット属性)を設定します。
    537         *
    538         * @param       flag ダウンロード文書のフレーム名(ターゲット属性)
    539         */
    540        public void setTarget( final String flag ) {
    541                target = nval( getRequestParameter( flag ),target );
    542        }
    543
    544        /**
    545         * 【TAG】Download 処理を行うかどうかを指定します(初期値:false)。
    546         *
    547         * @og.tag
    548         * Download 処理を行うには、指定の画面(呼び出し元)と、抜き出した時の
    549         * DBTableModel がマッチしているか判定します。
    550         * また、DBTableModel が存在しない、または、不備な場合(オーバーフロー)は、
    551         * 最終SQLを実行する必要があり、そもそも、抜出処理が出来ない状態では、
    552         * エラーを返す必要があります。
    553         * それら、一連のDownload 処理を行うかどうかを指定します。
    554         * true の場合、session の HybsSystem.DB_LAST_SQL_KEY に格納された
    555         * DBLastSql オブジェクトを取得し、scope が request または、overflow が
    556         * true の場合に、BODY部を実行します。(通常、queryタグを記述します。)
    557         * query の出力先は、scope を request にします。
    558         * それ以外は、tableId から取り出した DBTableModel を、scope = "request"
    559         * に(アドレスのみ)コピーします。
    560         * writeTable タグでは、scope = "request" から、DBTableModel を取り出します。
    561         *
    562         * 初期値は、false(抜き出しでは無くリンク作成) です。
    563         *
    564         * @param       type    Download 処理を行うかどうか(初期値:false)
    565         */
    566        public void setTypeDownload( final String type ) {
    567                typeDownload = nval( getRequestParameter( type ),typeDownload );
    568        }
    569
    570        /**
    571         * 【TAG】ダウンロード出来ない場合のエラーメッセージIDを指定します(初期値:ERR0042)。
    572         *
    573         * @og.tag
    574         * DBTableModel が、最後に作成された画面と、メモリ中の DBLastSql オブジェクトが
    575         * 管理している情報が異なる場合は、ダウンロード出来ません。
    576         * 同様に、DBLastSql オブジェクト 自身が作成されていない場合も出来ません。
    577         * そのようなケースに表示するエラーメッセージのメッセージIDを指定します。
    578         * 引数は、指定できません。
    579         * 初期値は、『ERR0042：出力対象データが見つかりませんでした。再度検索して下さい。』 です。
    580         *
    581         * @param       msg ダウンロード文書のフレーム名(ターゲット属性)
    582         */
    583        public void setErrorMsg( final String msg ) {
    584                errorMsg = nval( getRequestParameter( msg ),errorMsg );
    585        }
    586
    587        /**
    588         * 【TAG】編集アイコンを指定します(初期値:"{&#064;SYS.JSP}/image/edit.png")。
    589         *
    590         * @og.tag
    591         * 編集アイコンを指定します。
    592         * 初期値:"{&#064;SYS.JSP}/image/edit.png" です。
    593         *
    594         * @og.rev 5.1.6.0 (2010/05/01) 新規追加
    595         *
    596         * @param       img アップロード時のアイコン
    597         */
    598        public void setEditImg( final String img ) {
    599                editImg = nval( getRequestParameter( img ),editImg );
    600        }
    601
    602        /**
    603         * 【TAG】Edit画面でカラム編集タブを出すかどうか(初期値：true)
    604         *
    605         * @og.tag
    606         * falseを指定するとカラム編集タブを出さない。
    607         *
    608         * @param       type    カラム編集タブを出すかどうか(初期値:true)
    609         */
    610        public void setClmEdit( final String type ) {
    611                isEdit = nval( getRequestParameter( type ),isEdit );
    612        }
    613
    614        /**
    615         * 【TAG】Edit画面でカラム編集リンクを出力するかどうか(初期値：true)
    616         *
    617         * @og.tag
    618         * falseを指定するとカラム編集リンクを出さない。
    619         * 従来は、カラム編集画面の内、【表示項目設定】タブを表示しないだけでした。
    620         * この設定は、RWMODE を、 ##d , ##u , ##f の場合にも同様の設定が可能です。
    621         * カラム編集リンク自体を出さない機能は、現時点ではリソース設定できないため、
    622         * タグのパラメータとして指定できるようにします。
    623         * 基本的には、このパラメータはほとんど使われていないハズなので、
    624         * 機能を置き換えます。
    625         * 初期値は、カラム編集リンクを出力する(=true)です。
    626         *
    627         * @og.rev 5.7.5.0 (2014/04/04) 新規追加
    628         *
    629         * @param       flag    カラム編集リンクを出力するかどうか(初期値:true)
    630         * @see         org.opengion.hayabusa.taglib.QueryButtonTag#setUseEditMenu(String)
    631         */
    632        public void setUseEditLink( final String flag ) {
    633                useEditLink = nval( getRequestParameter( flag ),useEditLink );
    634        }
    635
    636        /**
    637         * 【TAG】ダウンロード時のコマンドを追加指定できます(初期値:null)
    638         *
    639         * @og.tag
    640         * ダウンロードリンクが表示される command は、
    641         * "NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" のみです。
    642         * これ以外の command で、ダウンロードリンクを表示させたい場合は、
    643         * この、addDownCmnd に、記述します。
    644         * 初期値は、null(追加コマンドはない)です。
    645         *
    646         * @og.rev 5.7.8.1 (2014/07/18) 新規追加
    647         *
    648         * @param       cmd     ダウンロード時のコマンドを追加指定
    649         * @see         #setCommand( String )
    650         */
    651        public void setAddDownCmnd( final String cmd ) {
    652                addDownCmnd = nval( getRequestParameter( cmd ),addDownCmnd );
    653        }
    654
    655        /**
    656         * 【TAG】アップロード時のコマンドを追加指定できます(初期値:null)
    657         *
    658         * @og.tag
    659         * アップロードリンクが表示される command は、"COPY|INSERT" のみです。
    660         * これ以外の command で、アップロードリンクを表示させたい場合は、
    661         * この、addUpldCmnd に、記述します。
    662         * 初期値は、null(追加コマンドはない)です。
    663         *
    664         * @og.rev 5.7.8.1 (2014/07/18) 新規追加
    665         *
    666         * @param       cmd     アップロード時のコマンドを追加指定
    667         * @see         #setCommand( String )
    668         */
    669        public void setAddUpldCmnd( final String cmd ) {
    670                addUpldCmnd = nval( getRequestParameter( cmd ),addUpldCmnd );
    671        }
    672
    673        /**
    674         * 【TAG】リンクアドレスにURLチェック用の確認キーを付加するかどうか[true/false]を指定します。
    675         *
    676         * @og.tag
    677         * この属性は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用します。
    678         * trueが指定された場合、リンクURLのパラメーターに、URL確認用のパラメーターが出力されます。
    679         * このパラメーターを、URLCheckFilterが復号化し、正式なアクセスであるかどうかの判定を行います。
    680         *
    681         * この属性はjsp/fileDownloadに対してチェックをかける場合にtrueにする必要があります。
    682         * 通常はシステムリソースのFILEUD_URL_CHECKで設定します。
    683         *
    684         * 初期値は、 "false"(確認キーを出力しない) です。
    685         *
    686         * @og.rev 5.9.32.1 (2018/05/08) 追加
    687         *
    688         * @param       flag 暗号化するかかどうか [true:暗号化する/false:しない]
    689         * @see org.opengion.hayabusa.filter.URLCheckFilter
    690         */
    691        public void setUseURLCheck( final String flag ) {
    692                useURLCheck = nval( getRequestParameter( flag ),useURLCheck );
    693        }
    694
    695        /**
    696         * このオブジェクトの文字列表現を返します。
    697         * 基本的にデバッグ目的に使用します。
    698         *
    699         * @return このクラスの文字列表現
    700         */
    701        @Override
    702        public String toString() {
    703                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
    704                                .println( "VERSION"             ,VERSION                )
    705                                .println( "command"             ,command                )
    706                                .println( "downloadImg" ,downloadImg    )
    707                                .println( "downloadJsp" ,downloadJsp    )
    708                                .println( "uploadImg"   ,uploadImg              )
    709                                .println( "uploadJsp"   ,uploadJsp              )
    710                                .println( "imgWidth"    ,imgWidth               )
    711                                .println( "imgHeight"   ,imgHeight              )
    712                                .println( "filename"    ,filename               )
    713                                .println( "roles"               ,roles                  )
    714                                .println( "target"              ,target                 )
    715                                .println( "Other..."    ,getAttributes().getAttribute() )
    716                                .fixForm().toString() ;
    717        }
    718}