    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 java.util.Set;                                                                                   // 6.4.3.4 (2016/03/11)
    019import java.util.regex.Matcher;                                                                 // 7.0.1.1 (2018/10/22)
    020import java.util.regex.Pattern;                                                                 // 7.0.1.1 (2018/10/22)
    021import java.util.Locale ;                                                                               // 8.0.0.0 (2021/08/31)
    022
    023import org.opengion.hayabusa.common.HybsSystemException;
    024import org.opengion.hayabusa.io.JsChartDataV3;
    025import org.opengion.fukurou.util.ArraySet;                                              // 6.4.3.4 (2016/03/11)
    026import org.opengion.fukurou.util.ToString;
    027import org.opengion.fukurou.util.ColorMap;                                              // 6.7.7.0 (2017/03/31)
    028import org.opengion.fukurou.util.StringUtil ;
    029
    030import static org.opengion.fukurou.util.StringUtil.nval ;
    031
    032/**
    033 * 設定された値をJsChartDataV3に設定し、
    034 * JsChartV3TagのJsChartDataV3リストに追加するタグです。
    035 *
    036 * @og.formSample
    037 * ●形式：&lt;og:jsChartDataV3 chartColumn="…" … /&gt;
    038 * ●body:なし
    039 *
    040 * ●Tag定義：
    041 * &lt;og:jsChartDataV3
    042 *      chartColumn     ○【TAG】ﾁｬｰﾄのｶﾗﾑ名を指定します(必須)。
    043 *      useAxis           【TAG】y軸表示を行うかどうか[true/false]を指定します[初期値:null(=false)]
    044 *      id                【TAG】y軸のid(自動採番 'y'+連番)
    045 *  ===================    data:datasets[idx]: の 要素。y[idx]Ds 変数の最上位にセットします
    046 *      label             【TAG】凡例の値を指定します(label)
    047 *      type              【TAG】複合ﾁｬｰﾄの種類を指定します[line/bar](type)
    048 *      fill              【TAG】線下を塗りつぶすかどうか[true/false]を指定します(fill[初期値:false])
    049 *      tension           【TAG】線の伸張を指定します。0で直線になります(tension[初期値:0.0])
    050 * (V3) hidden            【TAG】データを表示OFFの状態にするかどうか[true/false]を指定します(hidden[初期値:false]) 8.0.0.0 (2021/08/31) 新規追加
    051 *      backgroundColor   【TAG】ﾃﾞｰﾀの背景色を指定します(色,色番号,VIVID,PASTEL,V0～,P0～)(backgroundColor[初期値:自動])
    052 *      borderColor       【TAG】線の色を指定します(色,色番号,VIVID,PASTEL,V0～,P0～)(borderColor[初期値:自動])
    053 *      borderWidth       【TAG】線の幅を指定します(borderWidth[初期値:null(=3)])
    054 *      borderDash        【TAG】点線のスタイルを配列で指定します(borderDash[初期値:null(=[])])
    055 *      pointStyle        【TAG】点のスタイル(circle,triangle,rect,…)を指定します(pointStyle[初期値:null(=[])])
    056 *      pointRadius       【TAG】点の大きさを指定します(pointRadius[初期値:null(=3)])
    057 *      showLine          【TAG】ラインを表示するかどうか[true/false]を指定します(showLine[初期値:null(=true)])
    058 *      spanGaps          【TAG】データがないポイント間の処理方法[true/false]を指定します(spanGaps[初期値:null])
    059 *      pointBGColor      【TAG】ポイントの色を指定します(色,色番号,VIVID,PASTEL,V0～,P0～)(pointBackgroundColor[初期値:自動])
    060 *  ===================    options:scales:y: の 要素を指定する場合に、設定します
    061 *      position          【TAG】y軸の表示位置[left,right]を指定します(position[初期値:null(=left)])
    062 *      scaleType         【TAG】y軸のｽｹｰﾙﾀｲﾌﾟ[linear/category/time/…]を指定します(type[初期値:linear])
    063 *      categoryList      【TAG】y軸のﾒﾓﾘﾘｽﾄをCSV形式で指定します(scaleTypeがcategoryの場合)(labels)
    064 *      ylabel            【TAG】y軸に表示するﾗﾍﾞﾙ文字(title:text)
    065 *      beginAtZero       【TAG】y軸を０から書き始まるかどうか[true/false]を指定(beginAtZero[初期値:null(=false)])
    066 * (V3) grace             【TAG】y軸の最大、最小値から指定分スケールを大きくとる(grace[初期値:null])        8.0.0.0 (2021/08/31) 新規追加
    067 *      max               【TAG】y軸の最大値を指定します(scaleTypeがlinearの場合に有効)(max)
    068 *      min               【TAG】y軸の最小値を指定します(scaleTypeがlinearの場合に有効)(min)
    069 *  ===================    options:scales:y:ticks: の 要素を指定する場合に、設定します
    070 *      fontColor         【TAG】y軸のフォントの色(色,色番号,VIVID,PASTEL,V0～,P0～)(ticks:color[初期値:自動])
    071 *      scaleCallback     【TAG】y軸ｺｰﾙﾊﾞｯｸを指定します(ticks:callback)
    072 *      stepSize          【TAG】y軸のメモリ幅を指定します(scaleTypeがlinearの場合に有効)(ticks:stepSize)
    073 *  ===================    options:scales:y:grid: の 要素を指定する場合に、設定します
    074 *      gridColor         【TAG】grid:color属性( grid:{color:'red',} を生成)します(gridLinesと同時使用時は動作不定)
    075 *  ===================
    076 *      optDataset        【TAG】その他data:datasetのｵﾌﾟｼｮﾝを追加します
    077 *      optAxis           【TAG】その他options:scales:yのｵﾌﾟｼｮﾝを追加します
    078 *      optTicks          【TAG】その他options:scales:y:ticksのｵﾌﾟｼｮﾝを追加します
    079 * (V3) optTitle          【TAG】その他options:scales:y:titleのｵﾌﾟｼｮﾝを追加します   8.0.0.0 (2021/08/31) 新規追加
    080 * (V3) optGrid           【TAG】その他options:scales:y:gridのｵﾌﾟｼｮﾝを追加します    8.0.0.0 (2021/08/31) 新規追加
    081 *  ===================
    082 *      ticks             【廃止】optTicks を使用してください                                                8.0.0.0 (2021/08/31) 廃止
    083 *      gridLines         【廃止】optGrid を使用してください(旧 gridLines)                    8.0.0.0 (2021/08/31) 廃止
    084 *      optScaleLabel     【廃止】optTitle を使用してください(旧 scaleLabel)          8.0.0.0 (2021/08/31) 廃止
    085 *      optGridLines      【廃止】optGrid を使用してください(旧 gridLines)                    8.0.0.0 (2021/08/31) 廃止
    086 *  ===================
    087 *      caseKey           【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null)
    088 *      caseVal           【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null)
    089 *      caseNN            【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない)
    090 *      caseNull          【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない)
    091 *      caseIf            【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
    092 *      debug             【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)                                     // 7.0.1.1 (2018/10/22)
    093 *  /&gt;
    094 *
    095 * ●使用例
    096 * &lt;og:jsChartV3...&gt;
    097 *     &lt;og:jsChartDataV3
    098 *         chartColumn ="CLM1"
    099 *         label       ="ラベル"
    100 *         fill        ="true"
    101 *         tension     ="0"
    102 *         borderColor ="rbga(150,150,150,0.7)"
    103 *         borderWidth ="2"
    104 *     /&gt;
    105 * &lt;/og:jsChartV3&gt;
    106 *
    107 * @og.rev 8.0.0.0 (2021/08/31) Ver3対応 大幅見直し
    108 * @og.group 画面表示
    109 *
    110 * @version     8.0
    111 * @author   Kazuhiko Hasegawa
    112 * @since       JDK11.0
    113 */
    114public class JsChartDataV3Tag extends CommonTagSupport {
    115        /** このプログラムのVERSION文字列を設定します。{@VALUE} */
    116        private static final String VERSION = "8.0.0.0 (2021/08/31)" ;
    117        private static final long serialVersionUID = 800020210831L ;
    118
    119        private static final boolean    USE_QUOTE               = false;
    120        private static final boolean    NO_QUOTE                = true;         // IS_NUMBER か、!USE_QUOTE か、
    121
    122        private static final Set<String> SET_TYPE               = new ArraySet<>( "line","bar" );
    123        private static final Set<String> SET_PSTYLE             = new ArraySet<>( "circle","triangle","rect","rectRot","cross","crossRot","star","line","dash","rectRounded" );
    124        private static final Set<String> SET_POSITION   = new ArraySet<>( "left","right" );
    125        private static final Set<String> SET_SCALE              = new ArraySet<>( "linear","logarithmic","category","time","timeseries","realtime" );   // 8.0.0.0 (2021/08/31)
    126        private static final Set<String> SET_BOOLEAN    = new ArraySet<>( "true","false" );
    127
    128        private transient JsChartDataV3 jsData  = new JsChartDataV3();
    129
    130        private String  yAxisID                         ;       // 7.0.1.1 (2018/10/22) y軸のid(自動採番 'y'+連番)
    131
    132        // 8.0.0.0 (2021/08/31) chartJS V3 の初期値と同じになったので、直接登録します。
    133        private String  borderColor                     ;       // borderColor は、colorNo と競合するので、最後に判定します。
    134        private String  backgroundColor         ;       // backgroundColor が未設定の場合は、borderColor を使用します。
    135
    136//      private static final String D_TENSION   = "0.4";        // 7.0.1.1 (2018/10/22) 初期値
    137        private static final String D_TENSION   = "0.0";        // 8.0.0.0 (2021/08/31) 初期値変更(0.4 → 0.0)
    138
    139        /**
    140         * デフォルトコンストラクター
    141         *
    142         * @og.rev 6.9.7.0 (2018/05/14) PMD Each class should declare at least one constructor
    143         */
    144        public JsChartDataV3Tag() { super(); }          // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    145
    146        /**
    147         * Taglibの終了タグが見つかった時に処理する doEndTag() を オーバーライドします。
    148         *
    149         * @og.rev 6.7.6.0 (2017/03/17) タグの使用を決める共通属性の追加
    150         * @og.rev 6.7.7.0 (2017/03/31) backgroundColor が未設定の場合は、borderColor を使用します。
    151         * @og.rev 6.8.5.0 (2018/01/09) pointStyle , pointRadius , showLine 属性の追加。
    152         * @og.rev 7.0.1.1 (2018/10/22) rightAxis 属性の追加。
    153         *
    154         * @return 後続処理の指示
    155         */
    156        @Override
    157        public int doEndTag() {
    158                debugPrint();
    159                if( !useTag() ) { return EVAL_PAGE ; }                                  // 6.7.6.0 (2017/03/17)
    160
    161                final JsChartV3Tag jsChartTag = (JsChartV3Tag) findAncestorWithClass( this, JsChartV3Tag.class );
    162
    163                if( jsChartTag == null ) {
    164                        final String errMsg = "jsChart タグが見つかりませんでした。";
    165                        throw new HybsSystemException( errMsg );
    166                }
    167
    168                final int size = jsChartTag.getJsChartDataSize();               // 登録順で、現時点で持っている個数
    169                if( yAxisID == null ) { yAxisID = "y" + size ; }                // 指定しない場合は、y軸のid(自動採番 'y'+連番)
    170
    171                if( size == 0 ) { jsData.setUseAxis( true ); }                  // 要方法検討。false でもY軸が表示されるが不完全
    172                jsData.setId( yAxisID );
    173
    174                // borderColor と、backgroundColor の設定
    175                setBorderOrBackColor( jsChartTag.isOneColor() ? size : -1 );            // 7.0.1.3 (2018/11/12) 変数の集約
    176
    177                // 8.0.0.0 (2021/08/31) chartJS V3 の初期値と同じになったので、直接登録します。
    178//              // fill は、未設定時に、false をあえて設定する必要がある。
    179//              jsData.addDataset( "fill" , String.valueOf( fill ) , NO_QUOTE );        // 数値(boolean)
    180
    181                jsChartTag.addJsChartData( jsData );
    182
    183                return EVAL_PAGE;
    184        }
    185
    186        /**
    187         * タグリブオブジェクトをリリースします。
    188         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    189         *
    190         * @og.rev 6.7.7.0 (2017/03/31) jsDataのローカル変数化。
    191         * @og.rev 6.8.5.0 (2018/01/09) pointStyle , pointRadius , showLine 属性の追加。
    192         * @og.rev 7.0.1.1 (2018/10/22) rightAxis 属性の追加。
    193         * @og.rev 7.0.1.1 (2018/10/22) 初期値は、ﾃﾞﾌｫﾙﾄ(出力しない)に変更。
    194         * @og.rev 8.0.0.0 (2021/08/31) chartJS V3 の初期値と同じになったので、直接登録します。
    195         */
    196        @Override
    197        protected void release2() {
    198                super.release2();
    199                jsData                          = new JsChartDataV3();
    200
    201                yAxisID                         = null;         // 7.0.1.1 (2018/10/22) y軸のid(自動採番 'y'+連番)
    202
    203//              fill                            = false;        // 7.0.1.1 (2018/10/22) lineﾁｬｰﾄの下部塗りつぶし(初期値:falseが、chartJS の初期値と異なるので、後付する)
    204                borderColor                     = null;         // borderColor は、colorNo と競合するので、最後に判定します。
    205                backgroundColor         = null;         // backgroundColor が未設定の場合は、borderColor を使用します。
    206        }
    207
    208        /**
    209         * borderColorとbackgroundColor の設定
    210         *
    211         * borderColorとbackgroundColor は、どちらか一方が設定されている場合は、
    212         * もう片方も、そちらにあわせます。
    213         * どちらも設定されていない場合は、ﾁｬｰﾄの番号から、色コードを自動で割り当てます。
    214         * また、ｷｰﾜｰﾄﾞ PASTELとVIVID が指定された場合は、グラフごとに、色を変える配列を設定します。
    215         *
    216         * ※ 引数の先頭が $ の場合は、先に、JsChartV3Tag#varColumns などで、配列のオブジェクトを
    217         *    作成している場合に、そのまま使用するように指示します。なお $ は外して設定します。
    218         *
    219         * @og.rev 7.0.1.3 (2018/11/12) 色情報を返すメソッドを集約します。
    220         *
    221         * @param cnt 現在のﾁｬｰﾄの番号(マイナスの場合は、JavaScript配列形式で返します。)
    222         */
    223        private void setBorderOrBackColor( final int cnt ) {
    224                // 7.0.1.3 (2018/11/12) 色情報を返すメソッドを集約します。
    225                if( borderColor == null ) {                                     // borderColorが未設定
    226                        backgroundColor = makeColor( backgroundColor , cnt );
    227                        borderColor = backgroundColor;
    228                }
    229                else if( backgroundColor == null ) {            // backgroundColorが未設定
    230                        borderColor             = makeColor( borderColor         , cnt );
    231                        backgroundColor = borderColor;
    232                }
    233                else {
    234                        backgroundColor = makeColor( backgroundColor , cnt );
    235                        borderColor             = makeColor( borderColor         , cnt );
    236                }
    237
    238                jsData.addDataset( "borderColor"                , borderColor           , NO_QUOTE );   // 文字はすでにクオート付き、配列の場合はクオート不用
    239                jsData.addDataset( "backgroundColor"    , backgroundColor       , NO_QUOTE );   // 文字はすでにクオート付き、配列の場合はクオート不用
    240        }
    241
    242        /**
    243         * ﾊﾟﾗﾒｰﾀﾁｪｯｸ用ﾒｿｯﾄﾞ。
    244         *
    245         * @param trg           ターゲット
    246         * @param set           使用可能なキーワードのSet
    247         * @param trgStr        ターゲットの名称
    248         */
    249        private void checkPara( final String trg, final Set<String> set, final String trgStr ) {
    250                if( StringUtil.isNotNull( trg ) && !check( trg, set ) ) {                                               // 6.8.5.0 (2018/01/09)
    251                        final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE )
    252                                .append( "指定の" ).append( trgStr ).append( "は指定できません。" ).append( CR )
    253                                .append( trgStr ).append( "=[" ).append( trg ).append( ']' ).append( CR )
    254                                .append( set );         // org.opengion.fukurou.util.ArraySet の toStringメソッド
    255
    256                        throw new HybsSystemException( errMsg.toString() );
    257                }
    258        }
    259
    260        /**
    261         * 色情報を返します。
    262         *
    263         * 通常の、#XXXXXX形式の16bitRGB表記や、rgb(r,g,b)や、rgba(r,g,b,a) などが設定可能です。
    264         * 色の代わりに、ColorMapの色番号や色記号を指定できます。
    265         *
    266         * 特殊ｷｰﾜｰﾄﾞとして、VIVIDとPASTEL やビビッド、0～11 (V0～V11) , パステル、12～23 (P0～P11)
    267         * を指定できます。
    268         * CSV形式の場合、cnt で指定された番号の色を使用します。-1 の場合は、JavaScriptの配列文字列で返します。
    269         *
    270         * キーがnull の場合は、色番号から初期設定の値を返します。
    271         *
    272         * ※ 引数にrgbを含む場合は、無条件の元の値を返します。
    273         *    これは、ColorMap.getColorKey で、CSV分解してしまうからです。
    274         *
    275         * ※ 引数の先頭が $ の場合は、先に、JsChartV3Tag#varColumns などで、配列のオブジェクトを
    276         *    作成している場合に、そのまま使用するように指示します。なお $ は外して設定します。
    277         *
    278         * @og.rev 7.0.1.3 (2018/11/12) 色情報を返すメソッドを集約します。
    279         * @og.rev 8.0.0.0 (2021/08/31) 引数にrgbを含む場合は、無条件の元の値を返します。
    280         *
    281         * @param colKey        色を表すｷｰﾜｰﾄﾞ(色,色番号,VIVID,PASTEL,V0～,P0～)
    282         * @param cnt           CSV形式か、VIVID,PASTEL の場合、指定の番号の色を使用します。
    283         * @return 色文字列
    284         */
    285        private String makeColor( final String colKey, final int cnt ) {
    286                // cnt < 0 の場合、CSV形式なら、JavaScript配列で色を返します。
    287                final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE );
    288
    289                // 8.0.0.0 (2021/08/31) 引数にrgbを含む場合は、無条件の元の値を返します
    290                if( colKey != null && colKey.toUpperCase(Locale.JAPAN).contains( "RGB" ) ) {
    291                        buf.append( '\'' ).append( colKey ).append( '\'' );
    292                }
    293                else if( colKey != null && colKey.startsWith( "$" ) ) {
    294                        buf.append( colKey.substring(1) );                              // 先頭が $ で始まる場合は、ｷｰﾜｰﾄﾞそのものを戻す。
    295                }
    296                else if( cnt < 0 ) {
    297                        final String[] cols = ColorMap.getColorKeys( colKey );          // nullの場合は、ビビッドとパステルの全24色
    298                        if( cols.length == 1 ) {                // 配列が1の場合、配列にせず、値をそのまま設定します。
    299                                buf.append( '\'' ).append( cols[0] ).append( '\'' );
    300                        }
    301                        else {
    302                                buf.append( "['" ).append( String.join( "','", cols ) ).append( "']" );
    303                        }
    304                }
    305                else {
    306                        // 色順指定されているので、1色だけ返します。
    307                        final String[] cols = StringUtil.csv2Array( colKey );
    308                        if( cols.length == 0 ) {                // 元のcolKeyがnullかゼロ文字列
    309                                buf.append( '\'' ).append( ColorMap.getColorKey( cnt ) ).append( '\'' );                // cnt に応じた自動設定
    310                        }
    311                        else {
    312                                final String col = cols[cnt % cols.length];                                     // オーバーする場合は、繰返しになります。
    313                                buf.append( '\'' ).append( ColorMap.getColorKey( col , col ) ).append( '\'' );
    314                        }
    315                }
    316
    317                return buf.toString();
    318        }
    319
    320        /**
    321         * 【TAG】ﾁｬｰﾄのｶﾗﾑ名を指定します(必須)。
    322         *
    323         * @og.tag
    324         * ﾁｬｰﾄのｶﾗﾑ名を指定します(必須)。
    325         *
    326         * @param clm ﾁｬｰﾄのｶﾗﾑ名
    327         */
    328        public void setChartColumn( final String clm ) {
    329                jsData.setChartColumn( nval( getRequestParameter( clm ),null ) );
    330        }
    331
    332        /**
    333         * 【TAG】このﾃﾞｰﾀのy軸を表示するかどうか[true/false]を指定します(初期値:false)。
    334         *
    335         * @og.tag
    336         * true にセットした場合、jsChartTag で、yAxis に対して、一連の設定を行います。
    337         * 初期値(false)ですが、1つのデータセットは必ず表示されるようです。
    338         *
    339         * @og.rev 7.0.1.1 (2018/10/22) useAxis 属性の追加。
    340         *
    341         * @param use 右側のy軸表示するかどうか [true:表示する/false:表示しない]
    342         */
    343        public void setUseAxis( final String use ) {
    344                jsData.setUseAxis( nval( getRequestParameter( use ), false ) );
    345        }
    346
    347        /**
    348         * 【TAG】ﾃﾞｰﾀﾁｬｰﾄのIDを指定します。
    349         *
    350         * @og.tag
    351         * 指定しない場合は、y軸のid(自動採番 'y'+連番) になります。
    352         * options:scales:y の 要素の属性です。
    353         *
    354         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    355         *
    356         * @param   id 固有の名前
    357         */
    358        @Override
    359        public void setId( final String id ) {
    360                yAxisID  = nval( getRequestParameter( id ),null );
    361        }
    362
    363        //===================    data:datasets[idx]: の 要素。y[idx]Ds 変数の最上位にセットします
    364
    365        /**
    366         * 【TAG】凡例の値を指定します。
    367         *
    368         * @og.tag
    369         * data:datasets[idx]: の 要素
    370         *
    371         * @param lbl 凡例
    372         */
    373        public void setLabel( final String lbl ) {
    374                jsData.addDataset( "label" , nval( getRequestParameter( lbl ),null ) , USE_QUOTE );             // 文字
    375        }
    376
    377        /**
    378         * 【TAG】複合ﾁｬｰﾄの種類を指定します[line/bar]。
    379         *
    380         * @og.tag
    381         * data:datasets[idx]: の 要素
    382         *
    383         * 通常は、JsChartV3TagタグのchartTypeで指定しますが、複合グラフの場合は、個々のJsChartDataV3Tag でタイプを指定します。
    384         * なお、複合グラフ時には、JsChartV3TagタグのchartTypeを、"bar" にしておかないと、きちんと表示しないようです。
    385         *
    386         * @param type 種類 [line/bar]
    387         */
    388        public void setType( final String type ) {
    389                final String ctype = nval( getRequestParameter( type ),null );
    390
    391                checkPara( ctype, SET_TYPE, "type" );
    392                jsData.addDataset( "type" , ctype , USE_QUOTE );                // 文字
    393        }
    394
    395        /**
    396         * 【TAG】線下を塗りつぶすかどうか[true/false]を指定します(fill[初期値:false])。
    397         *
    398         * @og.tag
    399         * data:datasets[idx]: の 要素
    400         * フィル(線より下の塗りつぶし) を設定します。
    401         *
    402         * @og.rev 8.0.0.0 (2021/08/31) chartJS V3 の初期値と同じになったので、直接登録します。
    403         *
    404         * @param flag 塗りつぶすかどうか [true/false]
    405         */
    406        public void setFill( final String flag ) {
    407                // 8.0.0.0 (2021/08/31)  lineﾁｬｰﾄの下部塗りつぶし(初期値:falseが、chartJS V3 の初期値と同じになったので、後付する必要がなくなった。)
    408                final String fill =  nval( getRequestParameter( flag ),null );
    409                checkPara( fill, SET_BOOLEAN, "fill" );
    410                jsData.addDataset( "fill" , fill , NO_QUOTE );  // 数値(boolean)
    411        }
    412
    413        /**
    414         * 【TAG】線の伸張を指定します。0で直線になります(初期値:0.4 → 0.0)。
    415         *
    416         * @og.tag
    417         * data:datasets[idx]: の 要素
    418         * 伸張 を設定します。
    419         *
    420         * 8.0.0.0 (2021/08/31)
    421         *  以前のﾊﾞｰｼﾞｮﾝでは初期値は、0.4 でしたが、Ver3 では、0.0 になりました。
    422         *  互換性は考慮しませんので、必要な場合は、各自で設定してください。
    423         *
    424         * @og.rev 7.0.1.1 (2018/10/22) 初期値は、ﾃﾞﾌｫﾙﾄ(出力しない)に変更。
    425         * @og.rev 8.0.0.0 (2021/08/31) 初期値変更(0.4 → 0.0)
    426         *
    427         * @param tension 線の伸張
    428         */
    429        public void setTension( final String tension ) {
    430                jsData.addDataset( "tension" , nval( getRequestParameter( tension ),D_TENSION ) , NO_QUOTE );           // 数値
    431        }
    432
    433        /**
    434         * 【TAG】データを表示OFFの状態にするかどうか[true/false]を指定します(hidden[初期値:false])。
    435         *
    436         * @og.tag
    437         * data:datasets[idx]: の 要素
    438         * グラフ表示後に凡例をクリックすると表示がOFFします。これを初期状態に設定します。
    439         * 初回表示時に、グラフを非表示にしてあるので、必要都度表示することが可能になります。
    440         *
    441         * @param hide データを表示OFFかどうか [true/false]
    442         */
    443        public void setHidden( final String hide ) {
    444                final String hidden =  nval( getRequestParameter( hide ),null );
    445
    446                checkPara( hidden, SET_BOOLEAN, "hidden" );
    447                jsData.addDataset( "hidden" , hidden , NO_QUOTE );              // 数値(boolean)
    448        }
    449
    450        /**
    451         * 【TAG】ﾃﾞｰﾀの背景色を指定します(backgroundColor[初期値:自動])。
    452         *
    453         * @og.tag
    454         * data:datasets[idx]: の 要素
    455         * 色,色番号,VIVID,PASTEL,V0～,P0～ で指定します。
    456         * backgroundColor = "BLUE" とすると、すべての背景色を指定できます。
    457         * 配列で指定すると、データの順番に適用されます。
    458         * 例：backgroundColor = "['#ffaaaa','#ffffaa','#aaffaa','#aaaaff','#aaaaff']"
    459         *
    460         * 特殊ｷｰﾜｰﾄﾞとして、PASTELとVIVID を指定することで、パステルカラーやビビッドカラーの色ｺｰﾄﾞを指定できます。
    461         *
    462         * ※ 引数の先頭が $ の場合は、先に、JsChartV3Tag#varColumns などで、配列のオブジェクトを
    463         *    作成している場合に、そのまま使用するように指示します。なお $ は外して設定します。
    464         *
    465         * 背景色を指定しない場合、線の色(borderColor)を使用します。
    466         *
    467         * @og.rev 6.9.9.2 (2018/09/18) パステルカラーの色文字列のCSV形式文字列
    468         *
    469         * @param bgColor 背景色
    470         * @see         #setBorderColor(String)
    471         */
    472        public void setBackgroundColor( final String bgColor ) {
    473                backgroundColor = nval( getRequestParameter( bgColor ),null );
    474        }
    475
    476        /**
    477         * 【TAG】線の色を指定します(borderColor[初期値:自動])。
    478         *
    479         * @og.tag
    480         * data:datasets[idx]: の 要素
    481         * 色,色番号,VIVID,PASTEL,V0～,P0～ で指定します。
    482         * borderColor = "BLUE" とすると、すべての線の色を指定できます。
    483         * 配列で指定すると、データの順番に適用されます。
    484         * 例：borderColor = "['#ffaaaa','#ffffaa','#aaffaa','#aaaaff','#aaaaff']"
    485         *
    486         * 色の代わりに、ColorMapの色番号を指定したい場合は、colorNo を指定します。
    487         * 両方指定した場合は、borderColor が優先されます。
    488         * どちらも指定しない場合は、JsChartV3Tagに登録した順番に色コードで指定されます。
    489         *
    490         * ※ 引数の先頭が $ の場合は、先に、JsChartV3Tag#varColumns などで、配列のオブジェクトを
    491         *    作成している場合に、そのまま使用するように指示します。なお $ は外して設定します。
    492         *
    493         * 特殊ｷｰﾜｰﾄﾞとして、PASTELとVIVID を指定することで、パステルカラーやビビッドカラーの
    494         * 色ｺｰﾄﾞ配列を指定できます。
    495         *
    496         * @param color 線の色
    497         */
    498        public void setBorderColor( final String color ) {
    499                // colorNo で、初期値設定されている可能性があるので、nval の初期値は、borderColor にしておく。
    500                borderColor = nval( getRequestParameter( color ),borderColor );
    501        }
    502
    503        /**
    504         * 【TAG】線の幅を指定します(borderWidth[初期値:null(=3)])。
    505         *
    506         * @og.tag
    507         * data:datasets[idx]: の 要素
    508         *
    509         * @param width 線の幅
    510         */
    511        public void setBorderWidth( final String width ) {
    512                jsData.addDataset( "borderWidth" , nval( getRequestParameter( width ),null ) , NO_QUOTE );              // 数値
    513        }
    514
    515        /**
    516         * 【TAG】点線のスタイルを配列で指定します(borderDash[初期値:null(=[])])。
    517         *
    518         * @og.tag
    519         * data:datasets[idx]: の 要素
    520         *
    521         * ダッシュ線のスタイルは、配列で指定します。
    522         * borderDash="[5,2]" とすれば、線の長さが5px , 線と線の間が2px になります。
    523         *
    524         * @og.rev 7.0.1.3 (2018/11/12) 点線のスタイル追加
    525         *
    526         * @param dash 点線のスタイル
    527         */
    528        public void setBorderDash( final String dash ) {
    529                jsData.addDataset( "borderDash" , nval( getRequestParameter( dash ),null ) , NO_QUOTE );                // 配列
    530        }
    531
    532        /**
    533         * 【TAG】点のスタイル[circle,triangle,rect,…]を指定します(pointStyle[初期値:null(=[])])。
    534         *
    535         * @og.tag
    536         * data:datasets[idx]: の 要素
    537         * jsChartTag で、usePointStyle = "true" をセットした場合に有効になります。
    538         * 点のスタイルは、circle,triangle,rect,rectRot,cross,crossRot,star,line,dash,rectRounded
    539         *
    540         * @og.rev 6.8.5.0 (2018/01/09) 新規登録
    541         *
    542         * @param ptStyle 点のスタイル [circle,triangle,rect,rectRot,cross,crossRot,star,line,dash,rectRounded]
    543         */
    544        public void setPointStyle( final String ptStyle ) {
    545                final String pointStyle = nval( getRequestParameter( ptStyle ),null );
    546
    547                checkPara( pointStyle, SET_PSTYLE, "pointStyle" );
    548                jsData.addDataset( "pointStyle" , pointStyle , USE_QUOTE );             // 文字
    549        }
    550
    551        /**
    552         * 【TAG】点の大きさを指定します(pointRadius[初期値:null(=3)])。
    553         *
    554         * @og.tag
    555         * data:datasets[idx]: の 要素
    556         * jsChartTag で、usePointStyle = "true" をセットした場合に有効になります。
    557         *
    558         * @og.rev 6.8.5.0 (2018/01/09) 新規登録
    559         *
    560         * @param ptRadius 点の大きさを指定します。
    561         */
    562        public void setPointRadius( final String ptRadius ) {
    563                jsData.addDataset( "pointRadius" , nval( getRequestParameter( ptRadius ),null ) , NO_QUOTE );           // 数値
    564        }
    565
    566        /**
    567         * 【TAG】ラインを表示するかどうか[true/false]を指定します(showLine[初期値:null(=true)])。
    568         *
    569         * @og.tag
    570         * data:datasets[idx]: の 要素
    571         * jsChartTag で、usePointStyle = "true" をセットした場合に有効になります。
    572         * 初期値(null)は、showLine 属性を設定しませんが、chartJS 自体の初期値が true
    573         * なので、表示されます。
    574         *
    575         * @og.rev 6.8.5.0 (2018/01/09) 新規登録
    576         *
    577         * @param show ラインを表示するかどうか [true:表示する/false:表示しない]
    578         */
    579        public void setShowLine( final String show ) {
    580                jsData.addDataset( "showLine" , nval( getRequestParameter( show ),null ) , NO_QUOTE );          // Boolean
    581        }
    582
    583        /**
    584         * 【TAG】データがないポイント間の処理方法を指定します[true/false]を指定します(spanGaps[初期値:null])。
    585         *
    586         * @og.tag
    587         * data:datasets[idx]: の 要素
    588         * trueの場合、データがないかnullのポイント間に線が引かれます。
    589         * falseの場合、データがnullのポイントは、行に切れ目を作成します。
    590         *
    591         * @og.rev 7.0.1.2 (2018/11/04) 新規登録
    592         *
    593         * @param flag データがないポイント間の処理を行うかどうか [true/false]
    594         */
    595        public void setSpanGaps( final String flag ) {
    596                jsData.addDataset( "spanGaps" , nval( getRequestParameter( flag ),null ) , NO_QUOTE );          // Boolean
    597        }
    598
    599        /**
    600         * 【TAG】ポイントの色を指定します(pointBackgroundColor[初期値:自動])。
    601         *
    602         * @og.tag
    603         * data:datasets[idx]: の 要素
    604         * 色,色番号,VIVID,PASTEL,V0～,P0～ で指定します。
    605         * 点の塗りつぶしの色を指定します。属性名が長いので、短縮しています。
    606         * 単独文字列の場合は、すべての点を同じ色で塗ります。配列([]で囲う)の場合は、
    607         * 点の並び順に応じて、色付けを行います。
    608         *
    609         * 配列([]で囲う)か、const定義変数を想定していますので、前後にクオートを付けません。
    610         * 単独文字列を指定する場合は、"'red'" のように、クオートを付けてください。
    611         * 通常は、backgroundColorが使用されますので、単独文字で色指定は行う必要はありません。
    612         *
    613         * ポイントの色指定に、ColorMapの色コードは使えません。
    614         *
    615         * @og.rev 6.8.5.0 (2018/01/09) 新規登録
    616         *
    617         * @param cols 点の塗りつぶしの色(単独、配列)
    618         */
    619        public void setPointBGColor( final String cols ) {
    620                // 配列[]か、変数なので、クオート無しにします。
    621                jsData.addDataset( "pointBackgroundColor" , nval( getRequestParameter( cols ),null ) , NO_QUOTE );
    622        }
    623
    624        //===================    options:scales:y: の 要素を指定する場合に、設定します
    625
    626        /**
    627         * 【TAG】y軸の表示位置[left,right]を指定します(position[初期値:null(=left)])。
    628         *
    629         * @og.tag
    630         * options:scales:y: の 要素
    631         * 複合グラフ表示で、指定のデータのy軸を、右に表示したい場合は、right を指定します。
    632         * 初期値(null)は、左に表示されます。
    633         *
    634         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    635         *
    636         * @param pos y軸の表示位置 [left,right]
    637         */
    638        public void setPosition( final String pos ) {
    639                final String position = nval( getRequestParameter( pos ),null );
    640
    641                checkPara( position, SET_POSITION, "position" );
    642                jsData.addAxis( "position" , position , USE_QUOTE );            // 文字
    643        }
    644
    645        /**
    646         * 【TAG】y軸のｽｹｰﾙﾀｲﾌﾟ[linear/category/time/…]を指定します(type[初期値:linear])。
    647         *
    648         * @og.tag
    649         * options:scales:y: の 要素
    650         * 未指定(null)の場合は、linear になります。
    651         * ｽｹｰﾙﾀｲﾌﾟ[linear/logarithmic/category/time/timeseries/realtime]を指定します。
    652         *
    653         * realtime は、chartjs-plugin-streaming を使用時の縦スクロール時のみ適用可能です。
    654         *
    655         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    656         *
    657         * @param type y軸のｽｹｰﾙﾀｲﾌﾟ [linear/logarithmic/category/time/timeseries/realtime]
    658         */
    659        public void setScaleType( final String type ) {
    660                final String sType = nval( getRequestParameter( type ),null );
    661
    662                // プラグインなどで独自の type を指定することがあるため、警告だけにします。
    663                try {
    664                        checkPara( sType, SET_SCALE, "type" );
    665                }
    666                catch( final HybsSystemException ex ) {
    667                        System.err.println( ex.getMessage() );
    668                }
    669
    670                jsData.addAxis( "type" , sType , USE_QUOTE );           // 文字
    671        }
    672
    673        /**
    674         * 【TAG】y軸のﾒﾓﾘﾘｽﾄをCSV形式で指定します(scaleTypeがcategoryの場合に有効)。
    675         *
    676         * @og.tag
    677         * ※ 通常のCSVで指定します。
    678         * options:scales:y: の 要素の属性です。
    679         *
    680         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    681         *
    682         * @param categoryList y軸のﾒﾓﾘﾘｽﾄ
    683         */
    684        public void setCategoryList( final String categoryList ) {
    685                final String lbls = nval( getRequestParameter( categoryList ),null );
    686
    687                if( lbls != null ) {
    688                        // 「,」を「','」に変換して設定。(,前後の半角ｽﾍﾟｰｽは除去する)
    689                        final String regex = " *, *";
    690                        final Pattern pttn = Pattern.compile( regex );
    691                        final Matcher mtch = pttn.matcher( lbls );
    692
    693                        // y軸ｶﾃｺﾞﾘｰﾘｽﾄの設定
    694                        final String labels = "['" + mtch.replaceAll( "','" ) + "']" ;
    695
    696                        jsData.addAxis( "labels" , labels , NO_QUOTE );         // 配列なので、クオート不用
    697                }
    698        }
    699
    700        /**
    701         * 【TAG】y軸に表示するﾗﾍﾞﾙ文字(title:text)を指定します(初期値:null)。
    702         *
    703         * @og.tag
    704         * 横軸に表示する文字を指定します。
    705         * options:scales:yAxes:scaleLabel:labelString → options:scales:y:title:text の 要素の属性です。
    706         * title:{display:true,text:'ﾗﾍﾞﾙ文字',} がセットされます。
    707         *
    708         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    709         *
    710         * @param label y軸に表示するﾗﾍﾞﾙ文字
    711         */
    712        public void setYlabel( final String label ) {
    713                final String lbl = nval( getRequestParameter( label ),null );
    714                if( lbl != null ) {
    715                        final String scLbl = "display: true,text:'" + lbl + "'" ;
    716                        jsData.addAxis( JsChartDataV3.TITLE , scLbl );
    717                }
    718        }
    719
    720        /**
    721         * 【TAG】y軸を０から書き始まるかどうか[true/false]を指定します(beginAtZero[初期値:null(=false)])。
    722         *
    723         * @og.tag
    724         * <del>ticks と同時には使用できません。</del>
    725         * <del>初期値(null)は、０から書き始めます。</del>
    726         * 初期値(null)は、false と同じで、最小データから書き始めます。
    727         * options:scales:yAxes:ticks:beginAtZero → options:scales:y:beginAtZero の 要素の属性です。
    728         *
    729         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    730         *
    731         * @param atZero y軸を０から書き始まるかどうか [true/false]
    732         */
    733        public void setBeginAtZero( final String atZero ) {
    734                final String beginAtZero =  nval( getRequestParameter( atZero ),null );
    735
    736                checkPara( beginAtZero, SET_BOOLEAN, "beginAtZero" );
    737                jsData.addAxis( "beginAtZero" , beginAtZero , NO_QUOTE );               // 数値(boolean)
    738        }
    739
    740        /**
    741         * 【TAG】y軸の最大、最小値から指定分スケールを大きくとる(grace[初期値:null])。
    742         *
    743         * @og.tag
    744         * 最大値または最小値から指定した数値分、スケールを大きくとる。
    745         * '20%' のように最大値(最小値)に対する割合で示すことも可。
    746         * ここでは、割合を文字列で指定するのみとします。
    747         *
    748         * options:scales:y:grace の 要素の属性です。
    749         *
    750         * @og.rev 8.0.0.0 (2021/08/31) 新規追加
    751         *
    752         * @param size y軸を指定分スケールを大きくとる[初期値:null]
    753         */
    754        public void setGrace( final String size ) {
    755                final String grace =  nval( getRequestParameter( size ),null );
    756
    757                jsData.addAxis( "grace" , grace , USE_QUOTE );                  // 文字
    758        }
    759
    760        /**
    761         * 【TAG】y軸の最大値を指定します(scaleTypeがlinearの場合に有効)。
    762         *
    763         * @og.tag
    764         * options:scales:yAxes:ticks:max → options:scales:y:max の 要素の属性です。
    765         *
    766         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    767         *
    768         * @param max メモリの最大値
    769         */
    770        public void setMax( final String max ) {
    771                jsData.addAxis( "max" , nval( getRequestParameter( max ),null ) , NO_QUOTE );           // 数値
    772        }
    773
    774        /**
    775         * 【TAG】y軸の最小値を指定します(scaleTypeがlinearの場合に有効)。
    776         *
    777         * @og.tag
    778         * options:scales:yAxes:ticks:max → options:scales:y:max の 要素の属性です。
    779         *
    780         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    781         *
    782         * @param min メモリの最小値
    783         */
    784        public void setMin( final String min ) {
    785                jsData.addAxis( "min" , nval( getRequestParameter( min ),null ) , NO_QUOTE );           // 数値
    786        }
    787
    788        /**
    789         * 【TAG】y軸のフォントの色を指定(ticks:color[初期値:自動])。
    790         *
    791         * @og.tag
    792         * ticks と同時には使用できません。
    793         * options:scales:yAxes:ticks:fontColor → options:scales:y:ticks:color の 要素の属性です。
    794         *
    795         * ColorMapの色コード(色,色番号,VIVID,PASTEL,V0～,P0～)が使えます。
    796         *
    797         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    798         * @og.rev 7.0.1.3 (2018/11/12) 色情報を返すメソッドを集約します。
    799         *
    800         * @param fontColor y軸のフォントの色
    801         */
    802        public void setFontColor( final String fontColor ) {
    803                final String col = nval( getRequestParameter( fontColor ),null );
    804                if( col != null ) {
    805                        jsData.addTicks( "color" , ColorMap.getColorKey( col , col ) , USE_QUOTE );                     // 文字
    806                }
    807        }
    808
    809        /**
    810         * 【TAG】y軸ｺｰﾙﾊﾞｯｸを指定します(ticks:callback)。
    811         *
    812         * @og.tag
    813         * options:scales:y:ticks:callback: の 要素
    814         * y軸のメモリ編集用スケールバックを設定します。
    815         * callback="function(val,index){return val.toLocaleString() + '円';}"
    816         * のように登録します。
    817         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    818         *
    819         * @param callback y軸ｺｰﾙﾊﾞｯｸ
    820         */
    821        public void setScaleCallback( final String callback ) {
    822                jsData.addTicks( "callback" , nval( getRequestParameter( callback ),null ) , NO_QUOTE );        // ファンクションは、クオートしない
    823        }
    824
    825        /**
    826         * 【TAG】y軸のメモリ幅を指定します(scaleTypeがlinearの場合に有効)(ticks:stepSize)。
    827         *
    828         * @og.tag
    829         * options:scales:y:ticks:stepSize の 要素の属性です。
    830         *
    831         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    832         *
    833         * @param stepSize y軸のメモリ幅
    834         */
    835        public void setStepSize( final String stepSize ) {
    836                jsData.addTicks( "stepSize" , nval( getRequestParameter( stepSize ),null ) , NO_QUOTE );                // 数値
    837        }
    838
    839        /**
    840         * 【TAG】gridのcolor属性( grid:{color:'red',} を生成)を設定します(初期値:null)。
    841         *
    842         * @og.tag
    843         * options:scales:yAxes:gridLines:color → options:scales:y:grid:color の 要素の属性です。
    844         * この設定と、gridLinesﾊﾟﾗﾒｰﾀ を同時に設定した場合の動作は、不定です。
    845         * ※ 不定というのは、Tomcat上の属性の設定順で規定されるため、どちらの要素が使用されるのか、実装依存です。
    846         *
    847         * ColorMapの色コード(色,色番号,VIVID,PASTEL,V0～,P0～)が使えます。
    848         *
    849         * @og.rev 7.0.1.1 (2018/10/22) 属性の追加。
    850         * @og.rev 7.0.1.3 (2018/11/12) 色情報を返すメソッドを集約します。
    851         *
    852         * @param gridColor y軸のフォントの色
    853         */
    854        public void setGridColor( final String gridColor ) {
    855                final String col = nval( getRequestParameter( gridColor ),null );
    856                if( col != null ) {
    857                        final String color = "color:'" + ColorMap.getColorKey( col , col ) + "'" ;
    858                        jsData.addAxis( JsChartDataV3.GRID , color );
    859                }
    860        }
    861
    862        //========================================================================================
    863
    864        /**
    865         * 【TAG】その他data:datasetのｵﾌﾟｼｮﾝを追加します。
    866         *
    867         * @og.tag
    868         * その他data:datasetのｵﾌﾟｼｮﾝを追加します。
    869         *
    870         * @og.rev 7.0.1.2 (2018/11/04) 属性の追加。
    871         *
    872         * @param attri その他data:datasetのｵﾌﾟｼｮﾝ
    873         */
    874        public void setOptDataset( final String attri ) {
    875                jsData.addAxis( JsChartDataV3.DATASET , nval( getRequestParameter( attri ),null ) );
    876        }
    877
    878        /**
    879         * 【TAG】その他options:scales:yのｵﾌﾟｼｮﾝを追加します。
    880         *
    881         * @og.tag
    882         * options:scales:y の 要素の属性です。
    883         *  <del>※ chartJS上は、Axes(axisの複数形)と、Axis を使い分けていますが、属性は、axis で統一します。</del>
    884         *
    885         * @og.rev 7.0.1.2 (2018/11/04) 属性の追加。
    886         *
    887         * @param attri その他options:scales:yのｵﾌﾟｼｮﾝ
    888         */
    889        public void setOptAxis( final String attri ) {
    890                jsData.addAxis( JsChartDataV3.AXIS , nval( getRequestParameter( attri ),null ) );
    891        }
    892
    893        /**
    894         * 【TAG】その他options:scales:y:ticksのｵﾌﾟｼｮﾝを追加します。
    895         *
    896         * @og.tag
    897         * options:scales:y:ticks の 要素の属性です。
    898         *
    899         * @og.rev 7.0.1.2 (2018/11/04) 属性の追加。
    900         *
    901         * @param attri その他options:scales:y:ticksのｵﾌﾟｼｮﾝ
    902         */
    903        public void setOptTicks( final String attri ) {
    904                jsData.addAxis( JsChartDataV3.TICKS , nval( getRequestParameter( attri ),null ) );
    905        }
    906
    907        /**
    908         * 【TAG】その他options:scales:y:titleのｵﾌﾟｼｮﾝを追加します。
    909         *
    910         * @og.tag
    911         * options:scales:yAxes:scaleLabel → options:scales:y:title の 要素の属性です。
    912         *
    913         * @og.rev 7.0.1.2 (2018/11/04) 属性の追加。
    914         *
    915         * @param attri その他options:scales:y:titleのｵﾌﾟｼｮﾝ
    916         */
    917        public void setOptTitle( final String attri ) {
    918                jsData.addAxis( JsChartDataV3.TITLE , nval( getRequestParameter( attri ),null ) );
    919        }
    920
    921        /**
    922         * 【TAG】その他options:scales:y:gridのｵﾌﾟｼｮﾝを追加します。
    923         *
    924         * @og.tag
    925         * options:scales:yAxes:gridLines → options:scales:y:grid の 要素の属性です。
    926         *
    927         * @og.rev 7.0.1.2 (2018/11/04) 属性の追加。
    928         *
    929         * @param attri その他options:scales:y:gridのｵﾌﾟｼｮﾝ
    930         */
    931        public void setOptGrid( final String attri ) {
    932                jsData.addAxis( JsChartDataV3.GRID , nval( getRequestParameter( attri ),null ) );
    933        }
    934
    935        /**
    936         * このオブジェクトの文字列表現を返します。
    937         * 基本的にデバッグ目的に使用します。
    938         *
    939         * @return このクラスの文字列表現
    940         */
    941        @Override
    942        public String toString() {
    943                return ToString.title( this.getClass().getName() )
    944                        .println( "VERSIION"                    , VERSION       )
    945                        .println( "JsChartDataV3"               , jsData        )
    946                        .fixForm().toString();
    947        }
    948}