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