    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 * ●形式：&lt;og:excelFile action="…" fileURL="…" ･･･ &gt; lt;og:excelImageFileParam … /&gt; &lt;/og:excelFile&gt;
    033 * ●body：あり
    034 *
    035 * ●Tag定義：
    036 *  &lt;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 *  /&gt;
    058 *
    059 * ●使用例
    060 *    ・【entry.jsp】
    061 *         &lt;og:excelFile file1="input.xls" file2="input.xls" addTitleSheet="Title" &gt;
    062 *            &lt;og:excelImageFileParam
    063 *               fileURL    = "{&#064;USER.ID}"
    064 *               imageFile  = "test.png"
    065 *               sheetName  = "Sheet1"
    066 *               rowNo      = "5"
    067 *               colID      = "G"
    068 *            /&gt;
    069 *         &lt;/og:tableUpdate&gt;
    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) または、２文字目が、
    154         * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、
    155         * fileURL = "{&#064;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（第１シート） です。
    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}