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