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.common.HybsSystemException; 020import org.opengion.fukurou.util.StringUtil ; 021import org.opengion.fukurou.util.ToString; 022 023import static org.opengion.fukurou.util.StringUtil.nval ; 024 025/** 026 * ExcelImageFileParamTag は、ExcelFileTagの画像挿入のパラメーターを渡す為のタグクラスです。 027 * 028 * ExcelFileTag は、EXCELを加工するための 入力、出力を備えたタグで、 029 * addImageFile 属性に相当するパラメータを複数指定するためのタグです。 030 * 031 * @og.formSample 032 * ●形式:<og:excelFile action="…" fileURL="…" ・・・ > lt;og:excelImageFileParam … /> </og:excelFile> 033 * ●body:あり 034 * 035 * ●Tag定義: 036 * <og:excelImageFileParam 037 * fileURL 【TAG】画像ファイルのディレクトリを指定します (初期値:FILE_URL[=filetemp/]) 038 * imageFile ○【TAG】挿入するイメージファイル名 039 * sheetName 【TAG】挿入するシート名(null=先頭シート) 040 * sheetNo 【TAG】挿入するシート番号(初期値:0) 041 * rowNo 【TAG】挿入する行(開始)(初期値:0) 042 * colNo 【TAG】挿入する列(開始)(初期値:0) 043 * colId 【TAG】挿入する列記号(A,B,C…)(開始)(null=先頭列) 044 * rowEndNo 【TAG】挿入する行(終了-含まず)(初期値:0) 045 * colEndNo 【TAG】挿入する列(終了-含まず)(初期値:0) 046 * colEndId 【TAG】挿入する列記号(A,B,C…)(終了-含まず)(null=先頭列) 047 * dx1 【TAG】開始セルのX軸座標のオフセット(ピクセル)(初期値:0) 048 * dy1 【TAG】開始セルのY軸座標のオフセット(ピクセル)(初期値:0) 049 * dx2 【TAG】終了セルのX軸座標のオフセット(ピクセル)(初期値:0) 050 * dy2 【TAG】終了セルのY軸座標のオフセット(ピクセル)(初期値:0) 051 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 052 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 053 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 054 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 055 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 056 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 057 * /> 058 * 059 * ●使用例 060 * ・【entry.jsp】 061 * <og:excelFile file1="input.xls" file2="input.xls" addTitleSheet="Title" > 062 * <og:excelImageFileParam 063 * fileURL = "{@USER.ID}" 064 * imageFile = "test.png" 065 * sheetName = "Sheet1" 066 * rowNo = "5" 067 * colID = "G" 068 * /> 069 * </og:tableUpdate> 070 * 071 * @og.rev 7.2.9.0 (2020/10/12) 新規作成 072 * @og.group その他部品 073 * 074 * @version 7.2 075 * @author Kazuhiko Hasegawa 076 * @since JDK11.0, 077 */ 078public class ExcelImageFileParamTag extends CommonTagSupport { 079 /** このプログラムのVERSION文字列を設定します。 {@value} */ 080 private static final String VERSION = "7.2.9.0 (2020/10/12)" ; 081 private static final long serialVersionUID = 729020201012L ; 082 083 private String fileURL = HybsSystem.sys( "FILE_URL" ); // 【TAG】画像ファイルのディレクトリを指定します (初期値:FILE_URL[=filetemp/]) 084 private String imageFile ; // 【TAG】挿入するイメージファイル名 085 private String sheetName ; // 【TAG】挿入するシート名(null=先頭シート) 086 private int sheetNo = -1; // 【TAG】挿入するシート番号(初期値:0) 087 private int rowNo ; // 【TAG】挿入する行(開始)(初期値:0) 088 private int colNo = -1; // 【TAG】挿入する列(開始)(初期値:0) 089 private int rowEndNo ; // 【TAG】挿入する行(終了-含まず)(初期値:0) 090 private int colEndNo = -1; // 【TAG】挿入する列(終了-含まず)(初期値:0) 091 private int dx1 ; // 【TAG】開始セルのX軸座標のオフセット(ピクセル)(初期値:0) 092 private int dy1 ; // 【TAG】開始セルのY軸座標のオフセット(ピクセル)(初期値:0) 093 private int dx2 ; // 【TAG】終了セルのX軸座標のオフセット(ピクセル)(初期値:0) 094 private int dy2 ; // 【TAG】終了セルのY軸座標のオフセット(ピクセル)(初期値:0) 095 096 /** 097 * デフォルトコンストラクター 098 * 099 */ 100 public ExcelImageFileParamTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 101 102 /** 103 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 104 * 105 * @return 後続処理の指示 106 */ 107 @Override 108 public int doEndTag() { 109 debugPrint(); 110 if( !useTag() || imageFile == null ) { return EVAL_PAGE ; } // 6.3.4.0 (2015/08/01) 111 112 final ExcelFileTag excelTag = (ExcelFileTag)findAncestorWithClass( this,ExcelFileTag.class ); 113 if( excelTag == null ) { 114 final String errMsg = "<b>" + getTagName() + "タグは、ExcelFileTagの内側(要素)に記述してください。</b>"; 115 throw new HybsSystemException( errMsg ); 116 } 117 118 final String directory = HybsSystem.url2dir( fileURL ); 119 final String fname = StringUtil.urlAppend( directory,imageFile ); 120 121 excelTag.addImgFile( fname,sheetName,sheetNo,rowNo,colNo,rowEndNo,colEndNo,dx1,dy1,dx2,dy2 ) ; 122 123 return EVAL_PAGE ; 124 } 125 126 /** 127 * タグリブオブジェクトをリリースします。 128 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 129 */ 130 @Override 131 protected void release2() { 132 super.release2(); // 3.5.6.0 (2004/06/18) 追加(抜けていた) 133 fileURL = HybsSystem.sys( "FILE_URL" ); // 【TAG】画像ファイルのディレクトリを指定します (初期値:FILE_URL[=filetemp/]) 134 imageFile = null ; // 【TAG】挿入するイメージファイル名 135 sheetName = null ; // 【TAG】挿入するシート名(null=先頭シート) 136 sheetNo = -1 ; // 【TAG】挿入するシート番号(初期値:0) 137 rowNo = 0 ; // 【TAG】挿入する行(開始)(初期値:0) 138 colNo = -1 ; // 【TAG】挿入する列(開始)(初期値:0) 139 rowEndNo = 0 ; // 【TAG】挿入する行(終了-含まず)(初期値:0) 140 colEndNo = -1 ; // 【TAG】挿入する列(終了-含まず)(初期値:0) 141 dx1 = 0 ; // 【TAG】開始セルのX軸座標のオフセット(ピクセル)(初期値:0) 142 dy1 = 0 ; // 【TAG】開始セルのY軸座標のオフセット(ピクセル)(初期値:0) 143 dx2 = 0 ; // 【TAG】終了セルのX軸座標のオフセット(ピクセル)(初期値:0) 144 dy2 = 0 ; // 【TAG】終了セルのY軸座標のオフセット(ピクセル)(初期値:0) 145 } 146 147 /** 148 * 【TAG】画像ファイルのディレクトリを指定します 149 * (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。 150 * 151 * @og.tag 152 * この属性で指定されるディレクトリからイメージファイルを取得します。 153 * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、2文字目が、 154 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 155 * fileURL = "{@USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、 156 * さらに、各個人ID別のフォルダを作成して、そこから取得します。 157 * (初期値:システム定数のFILE_URL[={@og.value SystemData#FILE_URL}])。 158 * 159 * @param url 画像ファイルのディレクトリ名 160 * @see org.opengion.hayabusa.common.SystemData#FILE_URL 161 */ 162 public void setFileURL( final String url ) { 163 final String furl = nval( getRequestParameter( url ),null ); 164 if( furl != null ) { 165 fileURL = StringUtil.urlAppend( fileURL,furl ); 166 } 167 } 168 169 /** 170 * 【TAG】挿入するイメージファイル名をセットします(初期値:null)。 171 * 172 * @og.tag ファイル名が存在しない場合は、何も実行しません。 173 * 174 * @param fname イメージファイル名 175 */ 176 public void setImageFile( final String fname ) { 177 imageFile = nval( getRequestParameter( fname ),imageFile ); 178 } 179 180 /** 181 * 【TAG】挿入するシート名を設定します(初期値:指定なし)。 182 * 183 * @og.tag 184 * EXCELファイルに画像を挿入する場合のシート名を指定します。 185 * sheetNo と sheetName が同時に指定された場合は、sheetNo が優先されます。 186 * エラーにはならないのでご注意ください。 187 * 初期値は、指定なしです。 188 * 189 * @param sheet EXCELファイルのシート名 190 * @see #setSheetNo( String ) 191 */ 192 public void setSheetName( final String sheet ) { 193 sheetName = nval( getRequestParameter( sheet ),sheetName ); 194 } 195 196 /** 197 * 【TAG】挿入するシート番号を指定します(初期値:0)。 198 * 199 * @og.tag 200 * EXCELファイルに画像を挿入する場合のシート番号を指定します 201 * シート番号は、0 から始まる数字で表します。 202 * 203 * sheetNo と sheetName が同時に指定された場合は、sheetNo が優先されます。 204 * エラーにはならないのでご注意ください。 205 * 初期値は、0(第1シート) です。 206 * 207 * @param sheet EXCELファイルのシート番号(0から始まる) 208 * @see #setSheetName( String ) 209 */ 210 public void setSheetNo( final String sheet ) { 211 sheetNo = nval( getRequestParameter( sheet ),sheetNo ); 212 } 213 214 /** 215 * 【TAG】挿入する行番号(開始)を指定します(初期値:0)。 216 * 217 * @og.tag 218 * EXCELファイルに画像を挿入する場合の左上端(アンカーの位置)の行番号を指定します 219 * 行番号は、0 から始まる数字で表します。 220 * 初期値は、0(先頭行) です。 221 * 222 * @param row 挿入する行番号(開始) 223 * @see #setColNo( String ) 224 */ 225 public void setRowNo( final String row ) { 226 rowNo = nval( getRequestParameter( row ),rowNo ); 227 } 228 229 /** 230 * 【TAG】挿入する列番号(開始)を指定します(初期値:0)。 231 * 232 * @og.tag 233 * EXCELファイルに画像を挿入する場合の左上端(アンカーの位置)の列番号を指定します 234 * 列番号は、0 から始まる数字で表します。 235 * 初期値は、0(左先頭列) です。 236 * 237 * colNo と colID が同時に指定された場合は、colNo が優先されます。 238 * エラーにはならないのでご注意ください。 239 * 240 * @param col 挿入する列番号(開始) 241 * @see #setRowNo( String ) 242 */ 243 public void setColNo( final String col ) { 244 colNo = nval( getRequestParameter( col ),colNo ); 245 } 246 247 /** 248 * 【TAG】挿入する列記号(A,B,C…)(開始)を指定します(初期値:0)。 249 * 250 * @og.tag 251 * EXCELファイルに画像を挿入する場合の左上端(アンカーの位置)の列記号(A,B,C…)を指定します 252 * 列記号は、A から始まる英字で表します。 253 * 初期値は、未指定です。 254 * 255 * colNo と colID が同時に指定された場合は、colNo が優先されます。 256 * エラーにはならないのでご注意ください。 257 * 258 * @param col 挿入する列記号(A,B,C…)(開始) 259 * @see #setColNo( String ) 260 */ 261 public void setColId( final String col ) { 262 final String colId = nval( getRequestParameter( col ),null ); 263 if( colId != null && colNo < 0 ) { // colNo の初期値は、-1。 +1 して、26 かける処理をしているので、辻褄合わせ 264 for( int i=0; i<colId.length(); i++ ) { 265 final char ch = colId.charAt(i); 266 if( 'A' <= ch && ch <= 'Z' ) { colNo = (colNo+1)*26 + ch-'A'; } 267 } 268 } 269 } 270 271 /** 272 * 【TAG】挿入する行番号(終了-含まず)を指定します(初期値:0)。 273 * 274 * @og.tag 275 * EXCELファイルに画像を挿入する場合の右下端の行番号を指定します 276 * 行番号は、0 から始まる数字で表します。 277 * 初期値は、0(未指定) です。 278 * 279 * @param row 挿入する行番号(終了-含まず) 280 * @see #setColEndNo( String ) 281 */ 282 public void setRowEndNo( final String row ) { 283 rowEndNo = nval( getRequestParameter( row ),rowEndNo ); 284 } 285 286 /** 287 * 【TAG】挿入する列番号(終了-含まず)を指定します(初期値:0)。 288 * 289 * @og.tag 290 * EXCELファイルに画像を挿入する場合の右下端の列番号を指定します 291 * 列番号は、0 から始まる数字で表します。 292 * 初期値は、0(未指定) です。 293 * 294 * colNo と colID が同時に指定された場合は、colNo が優先されます。 295 * エラーにはならないのでご注意ください。 296 * 297 * @param col 挿入する列番号(終了-含まず) 298 * @see #setRowEndNo( String ) 299 */ 300 public void setColEndNo( final String col ) { 301 colEndNo = nval( getRequestParameter( col ),colEndNo ); 302 } 303 304 /** 305 * 【TAG】挿入する列記号(A,B,C…)(終了-含まず)を指定します(初期値:0)。 306 * 307 * @og.tag 308 * EXCELファイルに画像を挿入する場合の右下端の列記号(A,B,C…)を指定します 309 * 列記号は、A から始まる英字で表します。 310 * 初期値は、未指定です。 311 * 312 * colEndNo と colID が同時に指定された場合は、colEndNo が優先されます。 313 * エラーにはならないのでご注意ください。 314 * 315 * @param col 挿入する列記号(A,B,C…)(終了-含まず) 316 * @see #setColEndNo( String ) 317 */ 318 public void setColEndId( final String col ) { 319 final String colId = nval( getRequestParameter( col ),null ); 320 if( colId != null && colEndNo < 0 ) { // colEndNo の初期値は、-1。 +1 して、26 かける処理をしているので、辻褄合わせ 321 for( int i=0; i<colId.length(); i++ ) { 322 final char ch = colId.charAt(i); 323 if( 'A' <= ch && ch <= 'Z' ) { colEndNo = (colEndNo+1)*26 + ch-'A'; } 324 } 325 } 326 } 327 328 /** 329 * 【TAG】開始セルのX軸座標のオフセット(ピクセル)を指定します(初期値:0)。 330 * 331 * @og.tag 332 * 開始セルのX軸座標のオフセット(ピクセル)を指定します(初期値:0)。 333 * 初期値は、0(未指定) です。 334 * 335 * @param dx 開始セルのX軸座標のオフセット(ピクセル) 336 */ 337 public void setDx1( final String dx ) { 338 dx1 = nval( getRequestParameter( dx ),dx1 ); 339 } 340 341 /** 342 * 【TAG】開始セルのY軸座標のオフセット(ピクセル)を指定します(初期値:0)。 343 * 344 * @og.tag 345 * 開始セルのY軸座標のオフセット(ピクセル)を指定します(初期値:0)。 346 * 初期値は、0(未指定) です。 347 * 348 * @param dy 開始セルのY軸座標のオフセット(ピクセル) 349 */ 350 public void setDy1( final String dy ) { 351 dy1 = nval( getRequestParameter( dy ),dy1 ); 352 } 353 354 /** 355 * 【TAG】終了セルのX軸座標のオフセット(ピクセル)を指定します(初期値:0)。 356 * 357 * @og.tag 358 * 終了セルのX軸座標のオフセット(ピクセル)を指定します(初期値:0)。 359 * 初期値は、0(未指定) です。 360 * 361 * @param dx 終了セルのX軸座標のオフセット(ピクセル) 362 */ 363 public void setDx2( final String dx ) { 364 dx2 = nval( getRequestParameter( dx ),dx2 ); 365 } 366 367 /** 368 * 【TAG】終了セルのY軸座標のオフセット(ピクセル)を指定します(初期値:0)。 369 * 370 * @og.tag 371 * 終了セルのY軸座標のオフセット(ピクセル)を指定します(初期値:0)。 372 * 初期値は、0(未指定) です。 373 * 374 * @param dy 終了セルのY軸座標のオフセット(ピクセル) 375 */ 376 public void setdy2( final String dy ) { 377 dy2 = nval( getRequestParameter( dy ),dy2 ); 378 } 379 380 /** 381 * このオブジェクトの文字列表現を返します。 382 * 基本的にデバッグ目的に使用します。 383 * 384 * @return このクラスの文字列表現 385 * @og.rtnNotNull 386 */ 387 @Override 388 public String toString() { 389 return ToString.title( this.getClass().getName() ) 390 .println( "VERSION" ,VERSION ) 391 .println( "fileURL" ,fileURL ) 392 .println( "imageFile" ,imageFile ) 393 .println( "sheetName" ,sheetName ) 394 .println( "sheetNo" ,sheetNo ) 395 .println( "rowNo" ,rowNo ) 396 .println( "colNo" ,colNo ) 397 .println( "rowEndNo" ,rowEndNo ) 398 .println( "colEndNo" ,colEndNo ) 399 .println( "dx1" ,dx1 ) 400 .println( "dy1" ,dy1 ) 401 .println( "dx2" ,dx2 ) 402 .println( "dy2" ,dy2 ) 403 .fixForm().toString() ; 404 } 405}