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