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を評価し、{@XXXX} を解析します)
062 *
063 * ●Tag定義:
064 *   <og:fileUD
065 *       command            【TAG】command を指定します
066 *       downloadImg        【TAG】ダウンロード時のアイコンを指定します(初期値:"{@SYS.JSP}/image/fileDownload.gif")
067 *       downloadJsp        【TAG】ダウンロード時の呼び出しJSPを指定します(初期値:"{@SYS.JSP}/common/fileDownload.jsp")
068 *       uploadImg          【TAG】アップロード時のアイコンを指定します(初期値:"{@SYS.JSP}/image/fileUpload.gif")
069 *       uploadJsp          【TAG】アップロード時の呼び出しJSPを指定します(初期値:"{@SYS.JSP}/common/fileUpload.jsp")
070 *       imgWidth           【TAG】アイコン幅サイズ(px)を指定します(初期値:20px)
071 *       imgHeight          【TAG】アイコン高さサイズ(px)を指定します(初期値:20px)
072 *       filename           【TAG】ダウンロード時ファイル名を指定します(初期値:"{@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】編集アイコンを指定します(初期値:"{@SYS.JSP}/image/edit.png")
081 *       clmEdit            【TAG】編集時にカラム編集タブを表示するかどうか(初期値:true)
082 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
083 *   >   ... Body ...
084 *   </og:fileUD>
085 *
086 * ●使用例
087 *     <og:fileUD command="{@command}" />
088 *
089 *     <og:fileUD
090 *         command        = command設定 (ダウンロード="NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW" 、   アップロード="COPY|INSERT")
091 *       [ downloadImg ]  = "{@SYS.JSP}/image/fileDownload.gif"   ダウンロード時のアイコン
092 *       [ downloadJsp ]  = "{@SYS.JSP}/common/fileDownload.jsp"  ダウンロード時の呼び出しJSP
093 *       [ uploadImg   ]  = "{@SYS.JSP}/image/fileUpload.gif"     アップロード時のアイコン
094 *       [ uploadJsp   ]  = "{@SYS.JSP}/common/filePopup.jsp"     アップロード時の呼び出しJSP
095 *       [ imgWidth    ]  = "20px"                                アイコン幅サイズ(px)
096 *       [ imgHeight   ]  = "20px"                                アイコン高さサイズ(px)
097 *       [ filename    ]  = "{@GUI.LABEL}.xls"               ダウンロード時ファイル名
098 *       [ roles       ]  = "GE|DOC"                              アクセスロールズ
099 *       [ target      ]  = "_blank"                              ダウンロードファイルを開くターゲット
100 *       [ errorMsg    ]  = "ERR0042"                             エラーメッセージID
101 *       [ typeDownload]  = "false/true"                          Download 処理を行うかどうか(初期値:false)
102 *     />
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         *
213         * @return      後続処理の指示
214         */
215        @Override
216        public int doEndTag() {
217                debugPrint();
218
219                if( isError      ) { return SKIP_PAGE ; }               // ページの残りの処理を行わない。
220                if( typeDownload ) { return EVAL_PAGE ; }               // ページの残りを評価する。
221
222                boolean isDownload ;
223                // 5.7.8.1 (2014/07/18) command="RESET" 時に、ダウンロードリンクを表示
224                if(    "NEW".equals(   command ) || "RENEW".equals( command )
225                        || "FIRST".equals( command ) || "LAST".equals(  command )
226                        || "PREV".equals(  command ) || "NEXT".equals(  command )
227                        || "VIEW".equals(  command ) || "RESET".equals( command ) ) {
228                        isDownload = true;
229                }
230                else if( "COPY".equals( command ) || "INSERT".equals( command ) ) {
231                        isDownload = false;
232                }
233                // 5.7.8.1 (2014/07/18) addDownCmnd , addUpldCmndを追加
234                else if( addDownCmnd != null && addDownCmnd.equals( command ) ) {
235                        isDownload = true;
236                }
237                else if( addUpldCmnd != null && addUpldCmnd.equals( command ) ) {
238                        isDownload = false;
239                }
240                else {
241                        return EVAL_PAGE ;
242                }
243
244                byte bitMode ;
245                if( roles != null ) {
246                        RoleMode roleMode = RoleMode.newInstance( roles );
247                        RoleMode userRoleMode = getUser().getRoleMode();
248                        bitMode = userRoleMode.getAccessBitMode( roleMode );
249                }
250                else {
251                        GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
252                        bitMode = guiInfo.getBitMode();
253                }
254
255                if( filename == null ) {
256                        String suffix =  HybsSystem.sys( "TABLE_WRITER_EXCEL_TYPE"); // 5.9.32.1 (2018/05/11)
257                        //filename = getGUIInfoAttri( "LABEL" ) + ".xls" ;
258                        filename = getGUIInfoAttri( "LABEL" ) + "." + suffix ;
259                }
260                String guikey = getGUIInfoAttri( "KEY" );       // 4.3.0.1 (2008/08/11)
261                if( isDownload ) {
262                        if( RoleMode.isDownload( bitMode ) ) {
263                                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
264                                // <og:link href="{@SYS.JSP}/common/fileDownload.jsp" target="_blank" useGamenId="false"
265                                //              keys="filename,h_clms" vals="{@GUI.LABEL}.xls,{@h_clms}" >
266
267                                // 5.3.7.0 (2011/07/01) PL/SQLを利用した検索でファイルダウンロードが出来るように対応します。
268                                String href = downloadJsp + "?command=RENEW&gamenId=" + guikey + "&GAMENID=" + guikey + "&filename=" + StringUtil.urlEncode( filename ) ;
269
270                                jspPrint( makeTag( downloadImg,href,"Download File", target, true ) ); // 5.5.6.2 (2012/09/24)
271
272                                // 5.1.6.0 (2010/05/01) 帳票画面定義機能対応
273                                // 5.3.6.0 (2011/06/01) Edit機能見直し
274                                GUIInfo editGui = getUser().getGUIInfo( EDIT_GAMENID );
275                                // 5.7.5.0 (2014/04/04) 編集リンク自体を出すかどうかどうか(初期値:true)
276                                if( editGui != null && useEditLink ) {
277//                                      String hrefEdit = sysJsp + "/" + editGui.getAddress() + "/"
278                                        String hrefEdit = sysJsp + "/" + editGui.getAddress() + "/index.jsp" // 5.8.9.0 (2015/08/07)
279                                                                                + "?command=NEW&gamenId=" + guikey + "&GAMENID=" + guikey;
280
281                                        String editName = getRequestValue( "editName" );
282                                        // 5.5.2.4 (2012/05/16) nullに対する冗長な比較
283                                        if( editName != null ) {
284                                                hrefEdit += "&editName=" + editName;
285                                        }
286
287                                        // 5.4.2.0 (2011/12/01) 画面リソースで画面編集機能のON/OFFを設定できるようにする。
288                                        if( RoleMode.isEdit( bitMode ) && isEdit ) { // 5.6.0.2(2013/01/09)
289                                                hrefEdit += "&edit=true";
290                                        }
291                                        
292                                        // 5.5.5.2 (2012/08/10) 画面リソースで、画面編集機能の制限を行えるようにする
293                                        if( RoleMode.isFullEdit( bitMode ) ) {
294                                                hrefEdit += "&fullEdit=true";
295                                        }
296                                        else{
297                                                hrefEdit += "&fullEdit=false";
298                                        }
299
300                                        // 5.3.7.0 (2011/07/01) 編集画面をリサイズできるように対応します。
301                                        hrefEdit = "javascript:ogOpen('" + hrefEdit + "',null,null,'width=800px,height=330px,top=350,left=100,resizable=yes',false);";
302                                        jspPrint( makeTag (editImg,hrefEdit,"Edit",null,false) ); // 5.5.6.2 (2012/09/24)
303                                }
304                        }
305                }
306                else {
307                        if( RoleMode.isUpload( bitMode ) ) {
308                                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
309                                // <og:link href="{@SYS.JSP}/common/filePopup.jsp" keys="callBack" vals="{@GUI.KEY}/{@SESSION.JSPID}" >
310
311                                String jspId  = (String)getSessionAttribute( "JSPID" );
312                                // 5.3.7.0 (2011/07/01) Excel取込で画面IDとアドレスが異なる場合にエラーとなるバグを修正
313                                String callBack = getGUIInfoAttri( "ADDRESS" ) + "/" + jspId + "?GAMENID=" + guikey;
314                                callBack = StringUtil.urlEncode( callBack );
315                                String href = uploadJsp + "?callBack=" +  callBack;
316
317                                jspPrint( makeTag( uploadImg,href,"Upload File",target,false ) ); // 5.5.6.2 (2012/09/24)
318                        }
319                }
320
321                return EVAL_PAGE ;
322        }
323
324        /**
325         * タグリブオブジェクトをリリースします。
326         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
327         *
328         * @og.rev 5.7.4.1 (2014/03/15) エラーメッセージ変更
329         * @og.rev 5.7.5.0 (2014/04/04) useEditLink 追加
330         * @og.rev 5.7.8.1 (2014/07/18) addDownCmnd,addUpldCmnd 追加
331         * @og.rev 5.9.32.1 (2018/05/08) URLチェック対応
332         */
333        @Override
334        protected void release2() {
335                super.release2();
336                sysJsp                  = HybsSystem.sys( "JSP" );
337                command                 = null;         // ダウンロード="NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" 、アップロード="COPY|INSERT"
338                downloadImg             = sysJsp + "/image/fileDownload.gif";   // ダウンロード時のアイコン
339                downloadJsp             = sysJsp + "/common/fileDownload.jsp";  // ダウンロード時の呼び出しJSP
340                uploadImg               = sysJsp + "/image/fileUpload.gif";             // アップロード時のアイコン
341                uploadJsp               = sysJsp + "/common/filePopup.jsp";             // アップロード時の呼び出しJSP
342                imgWidth                = "20px";                                               // アイコン幅サイズ(px)
343                imgHeight               = "20px";                                               // アイコン高さサイズ(px)
344                filename                = null;                                                 // ダウンロード時ファイル名("{@GUI.LABEL}.xls")
345                roles                   = null;                                                 // アクセスロールズ
346                target                  = null;                                                 // ダウンロードファイルを開くターゲット
347                errorMsg                = "ERR0042";                                    // 出力対象データが見つかりませんでした。再度検索して下さい。 5.7.4.0 (2014/03/15)
348                typeDownload    = false;                                                // Download 処理を行うかどうか(初期値:false)
349                isError                 = false;
350                editImg                 = sysJsp + "/image/edit.png";   // 編集時のアイコン
351                isEdit                  = true;                                                 // 5.6.0.2 (2013/01/19)
352                useEditLink             = true;                                                 // 5.7.5.0 (2014/04/04) 追加
353                addDownCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) ダウンロード時のコマンドを追加
354                addUpldCmnd             = null;                                                 // 5.7.8.1 (2014/07/18) アップロード時のコマンドを追加
355                useURLCheck             = HybsSystem.sysBool("FILEUD_URL_CHECK"); // 5.9.32.1 (2018/05/11)
356                urlCheckCrypt   = HybsSystem.sys( "URL_CHECK_CRYPT" ); // 5.9.32.1 (2018/05/11)
357        }
358
359        /**
360         * リンクを作成します。
361         *
362         * @og.rev 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
363         * @og.rev 5.5.6.2 (2012/09/24) tgt引数追加
364         *
365         * @param       imgsrc  イメージソース
366         * @param       href    リンクのURL
367         * @param       alt             イメージの説明文書
368         * @param       tgt             HTMLのtarget
369         * @param       chk             urlCheck対象
370         * @og.rev 5.9.32.1 (2018/05/08) URLチェック対応
371         *
372         * @return      リンク文字列
373         */
374//      private String makeTag( final String imgsrc, final String href,  final String alt, final String tgt ) { // 5.5.6.2 (2012/09/24)
375        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)
376                // linkのBODY部にセットするイメージタグの作成
377                Attributes imgAttri = new Attributes();
378                imgAttri.set( "width"   , imgWidth );
379                imgAttri.set( "height"  , imgHeight );
380                imgAttri.set( "src"             , imgsrc );
381                imgAttri.set( "alt"             , alt );
382
383                String img = XHTMLTag.img( imgAttri );
384                
385                // 5.9.32.1 (2018/05/11) urlCheck
386                String tag = href;
387                if( useURLCheck && chk ) {
388                        tag = XHTMLTag.addURLCheckKey( tag, HybsSystem.URL_CHECK_KEY, getUser().getUserID(), System.currentTimeMillis() + urlCheckTime );
389                }
390                
391                // 4.3.0.1 (2008/08/11) callBack パラメータの設定漏れ修正、引数から見直し
392                // linkタグの作成
393                Attributes linkAttri = new Attributes();
394                //linkAttri.set( "href" , href );
395                linkAttri.set( "href"   , tag );
396                linkAttri.set( "body"   , img );
397                linkAttri.set( "target" , tgt ); // 5.5.6.2 (2012/09/24)
398                
399                return XHTMLTag.link( linkAttri );
400
401        }
402
403        /**
404         * 【TAG】command を指定します。
405         *
406         * @og.tag
407         * command を指定します。
408         * ダウンロードは、"NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" のみ有効です。
409         * アップロードは、"COPY|INSERT" のみ有効です。
410         * それ以外のコマンドでは、アイコンは表示されません。
411         * 例えば、NEXT/PREV など。
412         *
413         * @param       cmd コマンド[NEW/RENEW/FIRST/LAST/PREV/NEXT/VIEW/RESET/COPY/INSERT]
414         * @see         #setAddDownCmnd( String )
415         * @see         #setAddUpldCmnd( String )
416         * @see         #setCommand( String )
417         */
418        public void setCommand( final String cmd ) {
419                command = nval( getRequestParameter( cmd ),command );
420        }
421
422        /**
423         * 【TAG】ダウンロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileDownload.gif")。
424         *
425         * @og.tag
426         * ダウンロード時に表示されるアイコンを指定します。
427         * 初期値:"{&#064;SYS.JSP}/image/fileDownload.gif" です。
428         *
429         * @param       img ダウンロード時のアイコン
430         */
431        public void setDownloadImg( final String img ) {
432                downloadImg = nval( getRequestParameter( img ),downloadImg );
433        }
434
435        /**
436         * 【TAG】ダウンロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileDownload.jsp")。
437         *
438         * @og.tag
439         * ダウンロード時に呼び出されるJSPファイル名を指定します。
440         * 初期値:"{&#064;SYS.JSP}/common/fileDownload.jsp" です。
441         *
442         * @param       file ダウンロード時の呼び出しJSP
443         */
444        public void setDownloadJsp( final String file ) {
445                downloadJsp = nval( getRequestParameter( file ),downloadJsp );
446        }
447
448        /**
449         * 【TAG】アップロード時のアイコンを指定します(初期値:"{&#064;SYS.JSP}/image/fileUpload.gif")。
450         *
451         * @og.tag
452         * アップロード時に表示されるアイコンを指定します。
453         * 初期値:"{&#064;SYS.JSP}/image/fileUpload.gif" です。
454         *
455         * @param       img アップロード時のアイコン
456         */
457        public void setUploadImg( final String img ) {
458                uploadImg = nval( getRequestParameter( img ),uploadImg );
459        }
460
461        /**
462         * 【TAG】アップロード時の呼び出しJSPを指定します(初期値:"{&#064;SYS.JSP}/common/fileUpload.jsp")。
463         *
464         * @og.tag
465         * アップロード時に呼び出されるJSPファイル名を指定します。
466         * 初期値:"{&#064;SYS.JSP}/common/fileUpload.jsp" です。
467         *
468         * @param       file アップロード時の呼び出しJSP
469         */
470        public void setUploadJsp( final String file ) {
471                uploadJsp = nval( getRequestParameter( file ),uploadJsp );
472        }
473
474        /**
475         * 【TAG】アイコン幅サイズ(px)を指定します(初期値:20px)。
476         *
477         * @og.tag
478         * アップロード/ダウンロードのアイコンを表示する際の幅サイズ(px)を指定します。
479         * ファイルサイズは、アップロード/ダウンロード共通です。
480         * 初期値は、20px です。
481         *
482         * @param       width   アイコン幅サイズ(px)
483         */
484        public void setImgWidth( final String width ) {
485                imgWidth = nval( getRequestParameter( width ),imgWidth );
486        }
487
488        /**
489         * 【TAG】アイコン高さサイズ(px)を指定します(初期値:20px)。
490         *
491         * @og.tag
492         * アップロード/ダウンロードのアイコンを表示する際の高さサイズ(px)を指定します。
493         * ファイルサイズは、アップロード/ダウンロード共通です。
494         * 初期値は、20px です。
495         *
496         * @param       height  アイコン高さサイズ(px)
497         */
498        public void setImgHeight( final String height ) {
499                imgHeight = nval( getRequestParameter( height ),imgHeight );
500        }
501
502        /**
503         * 【TAG】ダウンロード時ファイル名を指定します(初期値:"{&#064;GUI.LABEL}.xls")。
504         *
505         * @og.tag
506         * ダウンロード時のファイル名を指定します
507         * 通常は、画面のラベル(言語対応)+XLS拡張子です。
508         * 初期値は、"{&#064;GUI.LABEL}.xls" です。
509         *
510         * @param       file    ダウンロード時ファイル名("{&#064;GUI.LABEL}.xls")
511         */
512        public void setFilename( final String file ) {
513                filename = nval( getRequestParameter( file ),filename );
514        }
515
516        /**
517         * 【TAG】ロールズをセットします。
518         *
519         * @og.tag
520         * ここで指定したロールを元に、ユーザー毎のアクセス許可がチェックされます。
521         * アクセス許可されないと、表示されません。
522         * このロールを指定しない場合は、画面のロールが使用されます。
523         *
524         * @param       rls パラメータ
525         */
526        public void setRoles( final String rls ) {
527                roles = nval( getRequestParameter( rls ),roles );
528        }
529
530        /**
531         * 【TAG】ダウンロード文書を表示させるフレーム、またはウィンドウの名前を指定します。
532         *
533         * @og.tag フレーム名(ターゲット属性)を設定します。
534         *
535         * @param       flag ダウンロード文書のフレーム名(ターゲット属性)
536         */
537        public void setTarget( final String flag ) {
538                target = nval( getRequestParameter( flag ),target );
539        }
540
541        /**
542         * 【TAG】Download 処理を行うかどうかを指定します(初期値:false)。
543         *
544         * @og.tag
545         * Download 処理を行うには、指定の画面(呼び出し元)と、抜き出した時の
546         * DBTableModel がマッチしているか判定します。
547         * また、DBTableModel が存在しない、または、不備な場合(オーバーフロー)は、
548         * 最終SQLを実行する必要があり、そもそも、抜出処理が出来ない状態では、
549         * エラーを返す必要があります。
550         * それら、一連のDownload 処理を行うかどうかを指定します。
551         * true の場合、session の HybsSystem.DB_LAST_SQL_KEY に格納された
552         * DBLastSql オブジェクトを取得し、scope が request または、overflow が
553         * true の場合に、BODY部を実行します。(通常、queryタグを記述します。)
554         * query の出力先は、scope を request にします。
555         * それ以外は、tableId から取り出した DBTableModel を、scope = "request"
556         * に(アドレスのみ)コピーします。
557         * writeTable タグでは、scope = "request" から、DBTableModel を取り出します。
558         *
559         * 初期値は、false(抜き出しでは無くリンク作成) です。
560         *
561         * @param       type    Download 処理を行うかどうか(初期値:false)
562         */
563        public void setTypeDownload( final String type ) {
564                typeDownload = nval( getRequestParameter( type ),typeDownload );
565        }
566
567        /**
568         * 【TAG】ダウンロード出来ない場合のエラーメッセージIDを指定します(初期値:ERR0042)。
569         *
570         * @og.tag
571         * DBTableModel が、最後に作成された画面と、メモリ中の DBLastSql オブジェクトが
572         * 管理している情報が異なる場合は、ダウンロード出来ません。
573         * 同様に、DBLastSql オブジェクト 自身が作成されていない場合も出来ません。
574         * そのようなケースに表示するエラーメッセージのメッセージIDを指定します。
575         * 引数は、指定できません。
576         * 初期値は、『ERR0042:出力対象データが見つかりませんでした。再度検索して下さい。』 です。
577         *
578         * @param       msg ダウンロード文書のフレーム名(ターゲット属性)
579         */
580        public void setErrorMsg( final String msg ) {
581                errorMsg = nval( getRequestParameter( msg ),errorMsg );
582        }
583
584        /**
585         * 【TAG】編集アイコンを指定します(初期値:"{&#064;SYS.JSP}/image/edit.png")。
586         *
587         * @og.tag
588         * 編集アイコンを指定します。
589         * 初期値:"{&#064;SYS.JSP}/image/edit.png" です。
590         *
591         * @og.rev 5.1.6.0 (2010/05/01) 新規追加
592         *
593         * @param       img アップロード時のアイコン
594         */
595        public void setEditImg( final String img ) {
596                editImg = nval( getRequestParameter( img ),editImg );
597        }
598        
599        /**
600         * 【TAG】Edit画面でカラム編集タブを出すかどうか(初期値:true)
601         *
602         * @og.tag
603         * falseを指定するとカラム編集タブを出さない。
604         *
605         * @param       type    カラム編集タブを出すかどうか(初期値:true)
606         */
607        public void setClmEdit( final String type ) {
608                isEdit = nval( getRequestParameter( type ),isEdit );
609        }
610
611        /**
612         * 【TAG】Edit画面でカラム編集リンクを出力するかどうか(初期値:true)
613         *
614         * @og.tag
615         * falseを指定するとカラム編集リンクを出さない。
616         * 従来は、カラム編集画面の内、【表示項目設定】タブを表示しないだけでした。
617         * この設定は、RWMODE を、 ##d , ##u , ##f の場合にも同様の設定が可能です。
618         * カラム編集リンク自体を出さない機能は、現時点ではリソース設定できないため、
619         * タグのパラメータとして指定できるようにします。
620         * 基本的には、このパラメータはほとんど使われていないハズなので、
621         * 機能を置き換えます。
622         * 初期値は、カラム編集リンクを出力する(=true)です。
623         *
624         * @og.rev 5.7.5.0 (2014/04/04) 新規追加
625         *
626         * @param       flag    カラム編集リンクを出力するかどうか(初期値:true)
627         * @see         org.opengion.hayabusa.taglib.QueryButtonTag#setUseEditMenu(String)
628         */
629        public void setUseEditLink( final String flag ) {
630                useEditLink = nval( getRequestParameter( flag ),useEditLink );
631        }
632
633        /**
634         * 【TAG】ダウンロード時のコマンドを追加指定できます(初期値:null)
635         *
636         * @og.tag
637         * ダウンロードリンクが表示される command は、
638         * "NEW|RENEW|FIRST|LAST|PREV|NEXT|VIEW|RESET" のみです。
639         * これ以外の command で、ダウンロードリンクを表示させたい場合は、
640         * この、addDownCmnd に、記述します。
641         * 初期値は、null(追加コマンドはない)です。
642         *
643         * @og.rev 5.7.8.1 (2014/07/18) 新規追加
644         *
645         * @param       cmd     ダウンロード時のコマンドを追加指定
646         * @see         #setCommand( String )
647         */
648        public void setAddDownCmnd( final String cmd ) {
649                addDownCmnd = nval( getRequestParameter( cmd ),addDownCmnd );
650        }
651
652        /**
653         * 【TAG】アップロード時のコマンドを追加指定できます(初期値:null)
654         *
655         * @og.tag
656         * アップロードリンクが表示される command は、"COPY|INSERT" のみです。
657         * これ以外の command で、アップロードリンクを表示させたい場合は、
658         * この、addUpldCmnd に、記述します。
659         * 初期値は、null(追加コマンドはない)です。
660         *
661         * @og.rev 5.7.8.1 (2014/07/18) 新規追加
662         *
663         * @param       cmd     アップロード時のコマンドを追加指定
664         * @see         #setCommand( String )
665         */
666        public void setAddUpldCmnd( final String cmd ) {
667                addUpldCmnd = nval( getRequestParameter( cmd ),addUpldCmnd );
668        }
669        
670        /**
671         * 【TAG】リンクアドレスにURLチェック用の確認キーを付加するかどうか[true/false]を指定します。
672         *
673         * @og.tag
674         * この属性は、URLCheckFilter(org.opengion.hayabusa.filter.URLCheckFilter)と合わせて使用します。
675         * trueが指定された場合、リンクURLのパラメーターに、URL確認用のパラメーターが出力されます。
676         * このパラメーターを、URLCheckFilterが復号化し、正式なアクセスであるかどうかの判定を行います。
677         * 
678         * この属性はjsp/fileDownloadに対してチェックをかける場合にtrueにする必要があります。
679         * 通常はシステムリソースのFILEUD_URL_CHECKで設定します。
680         *
681         * 初期値は、 "false"(確認キーを出力しない) です。
682         *
683         * @og.rev 5.9.32.1 (2018/05/08) 追加
684         *
685         * @param       flag 暗号化するかかどうか [true:暗号化する/false:しない]
686         * @see org.opengion.hayabusa.filter.URLCheckFilter
687         */
688        public void setUseURLCheck( final String flag ) {
689                useURLCheck = nval( getRequestParameter( flag ),useURLCheck );
690        }
691
692        /**
693         * このオブジェクトの文字列表現を返します。
694         * 基本的にデバッグ目的に使用します。
695         *
696         * @return このクラスの文字列表現
697         */
698        @Override
699        public String toString() {
700                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
701                                .println( "VERSION"             ,VERSION                )
702                                .println( "command"             ,command                )
703                                .println( "downloadImg" ,downloadImg    )
704                                .println( "downloadJsp" ,downloadJsp    )
705                                .println( "uploadImg"   ,uploadImg              )
706                                .println( "uploadJsp"   ,uploadJsp              )
707                                .println( "imgWidth"    ,imgWidth               )
708                                .println( "imgHeight"   ,imgHeight              )
709                                .println( "filename"    ,filename               )
710                                .println( "roles"               ,roles                  )
711                                .println( "target"              ,target                 )
712                                .println( "Other..."    ,getAttributes().getAttribute() )
713                                .fixForm().toString() ;
714        }
715}