    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.fukurou.util.StringUtil;
    019import org.opengion.fukurou.util.TagBuffer;
    020
    021/**
    022 * 明細棒グラフで、バー部のヘッダーに、進捗率を示す線を表示します。
    023 *
    024 * iHead タグは、ガントの ヘッダー部に使用されます。
    025 * 進捗率を示す線は、２本あり、デフォルトでは、中間点と最大値になります。
    026 * グラフの右に、何かを表示する場合は、幅(width)を指定する必要があります。
    027 *
    028 * @og.formSample
    029 * ●形式：&lt;og:iHead  ... /&gt;
    030 * ●body：なし
    031 * ●前提：headタグで、adjustEvent="Bar" を指定してください。
    032 *
    033 * ●Tag定義：
    034 *   &lt;og:iHead
    035 *       width              【TAG】グラフ部分の横幅を[px]で指定します。
    036 *       leftVal            【TAG】左線のヘッダ部分の文字を指定します（初期値：最大桁の半分）
    037 *       leftLoc            【TAG】左線のヘッダ部文字（及び線）の位置を左からの割合で指定します。
    038 *       leftBorderStyle    【TAG】左線のスタイルを指定します(初期値=dotted gray 1px)。
    039 *       adjustLeft         【TAG】左線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。
    040 *       rightVal           【TAG】右線のヘッダ部分の文字を指定します（初期値：最大桁）
    041 *       rightLoc           【TAG】右線のヘッダ部文字（及び線）の位置を左からの割合で指定します。
    042 *       rightBorderStyle   【TAG】右線のスタイルを指定します(初期値=dotted gray 1px)。
    043 *       adjustRight        【TAG】右線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。
    044 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    045 *   /&gt;
    046 *
    047 * ●使用例
    048 *    &lt;og:view
    049 *        viewFormType = "HTMLCustomTable"
    050 *        command      = "{&#064;command}"
    051 *        writable     = "false"
    052 *        useScrollBar = "false"
    053 *        headerSkipCount="10"
    054 *    &gt;
    055 *      &lt;og:thead rowspan="2"&gt;
    056 *        &lt;tr&gt;
    057 *          &lt;td rowspan="2"&gt;[NOORDER]&lt;/td&gt;
    058 *          &lt;td rowspan="2"&gt;
    059 *              &lt;og:iHead width="150px"
    060 *                      leftVal ="now"      leftLoc ="0.8"  leftBorderStyle ="solid red 1px"    adjustLeft ="15px"
    061 *                      rightVal="Target"   rightLoc="1.0"  rightBorderStyle="dashed red 2px"   adjustRight="-15px"
    062 *              /&gt;
    063 *          &lt;td rowspan="2"&gt;[SINTYOKU]&lt;/td&gt;
    064 *        &lt;/tr&gt;
    065 *      &lt;/og:thead&gt;
    066 *      &lt;og:tbody rowspan="2"&gt;
    067 *          &lt;td rowspan="2"&gt;[NOORDER]&lt;/td&gt;
    068 *          &lt;td rowspan="2"&gt;
    069 *              &lt;iBar id="B0_[I]" type="0" value="[SINTYOKU]" baseVal="[KNORDER]" /&gt;
    070 *              &lt;iBar id="B1_[I]" type="1" value="[KNORDER_G]" color="[COLOR]" text="[KNORDER]" /&gt;
    071 *              &lt;br/&gt;
    072 *              &lt;iBar id="B2_[I]" type="1" value="[KNJISK_G],[KNMIKM_G]" color="black,green" /&gt;
    073 *              &lt;iBar id="B3_[I]" type="2" value="[KNJISK_G],[KNMIKM_G]" baseVal="[KNORDER_G]" color="green" /&gt;
    074 *          &lt;td rowspan="2"&gt;[SINTYOKU]&lt;/td&gt;
    075 *      &lt;/og:tbody&gt;
    076 *    &lt;/og:view&gt;
    077 *
    078 * @og.rev 5.6.3.2 (2013/04/12) 新規作成
    079 * @og.group 画面部品
    080 *
    081 * @version  5.0
    082 * @author       Kazuhiko Hasegawa
    083 * @since    JDK6.0,
    084 */
    085public class ViewIHeadTag extends CommonTagSupport {
    086        /** このプログラムのVERSION文字列を設定します。   {@value} */
    087        private static final String VERSION = "5.6.3.2 (2013/04/12)" ;
    088
    089        private static final long serialVersionUID = 563220130412L ;
    090
    091        private TagBuffer tag = new TagBuffer( "iHead" ) ;
    092
    093        /**
    094         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    095         *
    096         * @return      後続処理の指示
    097         */
    098        @Override
    099        public int doEndTag() {
    100                debugPrint();           // 4.0.0 (2005/02/28)
    101
    102                jspPrint( tag.makeTag() );
    103
    104                return EVAL_PAGE ;              // ページの残りを評価する。
    105        }
    106
    107        /**
    108         * タグリブオブジェクトをリリースします。
    109         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    110         *
    111         */
    112        @Override
    113        protected void release2() {
    114                super.release2();
    115                tag = new TagBuffer( "iHead" );
    116        }
    117
    118        /**
    119         * 【TAG】グラフ部分の横幅を[px]で指定します。
    120         *
    121         * @og.tag
    122         * 指定しない場合は残りの横幅全てとなります。
    123         * グラフの右側に何かを表示したい場合は指定する必要があります。
    124         * 単位(px)は設定不要です。それ以外の単位は設定できません。
    125         *
    126         * @param   width グラフ部分の横幅
    127         */
    128        public void setWidth( final String width ) {
    129                // JavaScript 側の都合で、px 単位は、削除します。
    130                String tmpW = StringUtil.nval( getRequestParameter( width ),null ) ;
    131                if( tmpW != null && tmpW.endsWith("px") ) {
    132                        tmpW = tmpW.substring( 0,tmpW.length()-2 );
    133                }
    134
    135                tag.add( "width",tmpW );
    136        }
    137
    138        /**
    139         * 【TAG】左線のヘッダ部分の文字を指定します（初期値：最大桁の半分）。
    140         *
    141         * @og.tag
    142         * 左線のヘッダ部分に表示する文字を指定します。
    143         * 左線は、中間データ、または、途中経過を意味しますので、その様な単語にします。
    144         * なにも指定しない場合は、右側が最大桁以下を切り捨てした値となり、左側はその半分の値です。
    145         * leftValに関しては、0.4,0.4のように複数の値をカンマ区切りで書く事が可能です。
    146         *
    147         * @param   leftVal 左線のヘッダ部分の文字
    148         */
    149        public void setLeftVal( final String leftVal ) {
    150                tag.add( "leftVal",StringUtil.nval( getRequestParameter( leftVal ),null ) );
    151        }
    152
    153        /**
    154         * 【TAG】左線のヘッダ部文字（及び線）の位置を左からの割合(少数)で指定します。
    155         *
    156         * @og.tag
    157         * グラフ幅全体を1として、左からの割合で指定します。(左が0.3で右が0.9など）
    158         * leftLocに関しては、0.4,0.4のように複数の値をカンマ区切りで書く事が可能です。
    159         *
    160         * @param   leftLoc 左線のヘッダ部文字（及び線）の位置の割合(少数)
    161         */
    162        public void setLeftLoc( final String leftLoc ) {
    163                tag.add( "leftLoc",StringUtil.nval( getRequestParameter( leftLoc ),null ) );
    164        }
    165
    166        /**
    167         * 【TAG】左線のスタイルを指定します(初期値=dotted gray 1px)。
    168         *
    169         * @og.tag
    170         * グラフに引かれる左線のスタイルを指定します。
    171         * 初期値は、dotted gray 1px です。
    172         *
    173         * @param   leftBorderStyle 左線のヘッダ部文字（及び線）の位置の割合(少数)
    174         */
    175        public void setLeftBorderStyle( final String leftBorderStyle ) {
    176                tag.add( "leftBorderStyle",StringUtil.nval( getRequestParameter( leftBorderStyle ),null ) );
    177        }
    178
    179        /**
    180         * 【TAG】左線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。
    181         *
    182         * @og.tag
    183         * 左右の文字が重なる可能性がある場合に利用します。
    184         * 10と指定すると、10マイナスされて文字が上方向にずれます。
    185         * 負の数を指定すると、文字が下方向にずれます。
    186         * 単位(px)は設定不要です。それ以外の単位は設定できません。
    187         *
    188         * @param   adjustLeft 文字の上下位置指定
    189         */
    190        public void setAdjustLeft( final String adjustLeft ) {
    191                // JavaScript 側の都合で、px 単位は、削除します。
    192                String tmpA = StringUtil.nval( getRequestParameter( adjustLeft ),null ) ;
    193                if( tmpA != null && tmpA.endsWith("px") ) {
    194                        tmpA = tmpA.substring( 0,tmpA.length()-2 );
    195                }
    196
    197                tag.add( "adjustLeft",tmpA );
    198        }
    199
    200        /**
    201         * 【TAG】右線のヘッダ部分の文字を指定します（初期値：最大桁）。
    202         *
    203         * @og.tag
    204         * 右線のヘッダ部分に表示する文字を指定します。
    205         * 右線は、最終データ、または、最大データを意味しますので、その様な単語にします。
    206         * なにも指定しない場合は、右側が最大桁以下を切り捨てした値となり、左側はその半分の値です。
    207         *
    208         * @param   rightVal 左線のヘッダ部分の文字
    209         */
    210        public void setRightVal( final String rightVal ) {
    211                tag.add( "rightVal",StringUtil.nval( getRequestParameter( rightVal ),null ) );
    212        }
    213
    214        /**
    215         * 【TAG】右線のヘッダ部文字（及び線）の位置を左からの割合(少数)で指定します。
    216         *
    217         * @og.tag
    218         * グラフ幅全体を1として、左からの割合で指定します。(左が0.3で右が0.9など）
    219         *
    220         * @param   rightLoc 右線のヘッダ部文字（及び線）の位置の割合(少数)
    221         */
    222        public void setRightLoc( final String rightLoc ) {
    223                tag.add( "rightLoc",StringUtil.nval( getRequestParameter( rightLoc ),null ) );
    224        }
    225
    226        /**
    227         * 【TAG】右線のスタイルを指定します(初期値=dotted gray 1px)。
    228         *
    229         * @og.tag
    230         * グラフに引かれる右線のスタイルを指定します。
    231         * 初期値は、dotted gray 1px です。
    232         *
    233         * @param   rightBorderStyle 左線のヘッダ部文字（及び線）の位置の割合(少数)
    234         */
    235        public void setRightBorderStyle( final String rightBorderStyle ) {
    236                tag.add( "rightBorderStyle",StringUtil.nval( getRequestParameter( rightBorderStyle ),null ) );
    237        }
    238
    239        /**
    240         * 【TAG】右線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。
    241         *
    242         * @og.tag
    243         * 左右の文字が重なる可能性がある場合に利用します。
    244         * 10と指定すると、10マイナスされて文字が上方向にずれます。
    245         * 負の数を指定すると、文字が下方向にずれます。
    246         * 単位(px)は設定不要です。それ以外の単位は設定できません。
    247         *
    248         * @param   adjustRight 文字の上下位置指定
    249         */
    250        public void setAdjustRight( final String adjustRight ) {
    251                // JavaScript 側の都合で、px 単位は、削除します。
    252                String tmpA = StringUtil.nval( getRequestParameter( adjustRight ),null ) ;
    253                if( tmpA != null && tmpA.endsWith("px") ) {
    254                        tmpA = tmpA.substring( 0,tmpA.length()-2 );
    255                }
    256
    257                tag.add( "adjustRight",tmpA );
    258        }
    259
    260        /**
    261         * タグの名称を、返します。
    262         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
    263         *
    264         * @return  タグの名称
    265         */
    266        @Override
    267        protected String getTagName() {
    268                return "iHead" ;
    269        }
    270
    271        /**
    272         * このオブジェクトの文字列表現を返します。
    273         * 基本的にデバッグ目的に使用します。
    274         *
    275         * @return このクラスの文字列表現
    276         */
    277        @Override
    278        public String toString() {
    279                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
    280                                .println( "VERSION"             ,VERSION        )
    281                                .println( "tag"                 ,tag.makeTag()  )
    282                                .println( "Other..."    ,getAttributes().getAttribute() )
    283                                .fixForm().toString() ;
    284        }
    285}