001package org.opengion.hayabusa.taglib; 002 003import java.util.ArrayList; 004import java.util.Arrays; 005import java.util.List; 006import java.util.Set; // 6.4.3.4 (2016/03/11) 007import java.util.Iterator; // 6.7.7.0 (2017/03/31) 008import java.util.regex.Matcher; 009import java.util.regex.Pattern; 010 011import org.opengion.hayabusa.db.DBTableModelSorter; 012import org.opengion.hayabusa.db.DBTableModel; 013import org.opengion.hayabusa.common.HybsSystem; 014import org.opengion.hayabusa.common.HybsSystemException; 015import org.opengion.hayabusa.db.DBColumn; // 6.8.3.1 (2017/12/01) 016 017import org.opengion.hayabusa.io.JsChartData; 018import org.opengion.fukurou.util.ArraySet; // 6.4.3.4 (2016/03/11) 019import org.opengion.fukurou.util.ToString; 020import org.opengion.fukurou.util.StringUtil; // 6.8.3.1 (2017/12/01) 021import static org.opengion.fukurou.util.StringUtil.nval ; 022 023/** 024 * JsChart は、JavascriptのjsChart用のスクリプトを出力するクラスです。 025 * 複数の JsChartData オブジェクトを合成することも、ここで行っています。 026 * ChartJSを利用しているため、標準属性以外の項目をセットする場合はoptionAttributesで行ってください。 027 * 例えばアニメーションをOFFにする場合はanimation:falseをセットします。 028 * 029 * 出力されるスクリプトでは、idを指定しない場合はhybscanvas[tableId]が利用されます。 030 * 複数のグラフを同一画面で出力する場合はidかtableIdを変えてください。 031 * チャートオブジェクトはchart_[id]という名前で作成されるため、ajax等でコントロールが必要な場合は利用してください。 032 * 033 * @og.formSample 034 * ●形式:<og:column chartType="…" ... /> 035 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{$#064;XXXX} を解析します) 036 * 037 * ●Tag定義: 038 * <og:jsChart 039 * chartType ○【TAG】チャートの種類を指定します[line/bar/horizontalBar/radar/polarArea/pie/doughnut](必須)。 040 * labelColumn ○【TAG】ラベルのカラム名を指定します(表示名称)(必須)。 041 * id 【TAG】canvasタグのidを指定します(初期値:hybscanvas)。 042 * height 【TAG】チャートの高さを指定します(初期値:400)。 043 * width 【TAG】チャートの幅を指定します(初期値:400)。 044 * title 【TAG】タイトルを指定します。 045 * titlePosition 【TAG】タイトルの表示位置[top/right/bottom/left]を指定します(初期値:top)。 046 * legendDisplay 【TAG】凡例を表示するか[true/false]を指定します。 047 * legendPosition 【TAG】凡例の表示位置[top/right/bottom/left]を指定します(初期値:top)。 048 * barWidthPer 【TAG】棒線の横幅を指定します(初期値:0.8, typeがbar,horizontalBarの場合に有効)。 049 * onClick 【TAG】チャートクリック時のイベントを指定します。 050 * plugins 【TAG】プラグイン定義された関数を指定します。 // 6.9.9.2 (2018/09/18) 051 * usePointStyle 【TAG】点のスタイル属性を使用するかどうか[true/false]を指定します(初期値:null)。 // 6.8.5.0 (2018/01/09) 052 * =================== 053 * xscaleType 【TAG】x軸のスケールタイプ[category/linear]を指定します(初期値:category)。 6.9.9.3 (2018/09/25) time 廃止 054 * xlabel 【TAG】x軸のラベルを指定します。 055 * xscaleCallback 【TAG】x軸コールバックを指定します。 056 * xbeginAtZero 【TAG】x軸を0から書き始まるかどうか(初期値:true) // 6.8.5.0 (2018/01/09) 057 * xmax 【TAG】x軸の最大値を指定します(xscaleTypeがlinearの場合に有効)。 058 * xmin 【TAG】x軸の最小値を指定します(xscaleTypeがlinearの場合に有効)。 059 * xstepSize 【TAG】x軸のメモリ幅を指定します(xscaleTypeがlinearの場合に有効)。 060 * =================== 061 * timeUnit 【廃止】x軸のタイムの単位[year/quarter/month/week/day/hour/minute/second/millsecond]を指定します(xscaleTypeがtimeの場合に有効。指定しない場合は自動)。 062 * timeUnitStepSize 【廃止】x軸のタイムの単位幅を指定します。(xscaleTypeがtimeの場合に有効) 063 * timeSetFormat 【廃止】x軸の設定するタイムのフォーマットを指定します(xscaleTypeがtimeの場合に有効)。 064 * timeLblFormat 【廃止】x軸の表示するタイムのフォーマットを指定します(xscaleTypeがtimeの場合に有効)。 065 * timeMax 【廃止】x軸のタイムの最大値を指定します(xscaleTypeがtimeの場合に有効)。 066 * timeMin 【廃止】x軸のタイムの最小値を指定します(xscaleTypeがtimeの場合に有効)。 067 * =================== 068 * yscaleType 【TAG】y軸のスケールタイプ[linear/category]を指定します(初期値:linear)。 069 * ylabel 【TAG】y軸のラベルを指定します。 070 * yscaleCallback 【TAG】y軸コールバックを指定します。 071 * ybeginAtZero 【TAG】y軸を0から書き始まるかどうか(初期値:true)(円形の場合もこの値) // 6.8.5.0 (2018/01/09) 072 * max 【TAG】y軸の最大値を指定します(yscaleTypeがlinearの場合に有効)。 073 * min 【TAG】y軸の最小値を指定します(yscaleTypeがlinearの場合に有効)。 074 * stepSize 【TAG】y軸のメモリ幅を指定します(yscaleTypeがlinearの場合に有効)。 075 * ycategoryList 【TAG】y軸のメモリリストをカンマ区切りで指定します(yscaleTypeがcategoryの場合に有効) 076 * =================== 077 * markValues 【TAG】マーカーラインの設定値をCSV形式で複数指定します // 6.8.5.0 (2018/01/09) 078 * markColors 【TAG】マーカーラインの色をCSV形式で複数指定します // 6.8.5.0 (2018/01/09) 079 * markLbls 【TAG】マーカーラインのラベルをCSV形式で複数指定します(未指定時はラベルを表示しません) // 6.8.5.0 (2018/01/09) 080 * markAdjust 【TAG】マーカーラインのラベル表示位置の上下方向を調整します(+でラインの下側、-で上側に位置を移動します。初期値:-6)。 // 6.8.5.0 (2018/01/09) 081 * =================== 082 * useZoom 【TAG】ズーム処理を使用するかどうか[true/false]を指定します。 // 6.8.5.0 (2018/01/09) 083 * =================== 084 * widthEventColumn 【TAG】横幅を動機に設定するカラムのIDを指定します。 085 * heightEventColumn 【TAG】縦幅を動的に設定するカラムのIDを指定します。 086 * minEventColumn 【TAG】minを動的に設定するカラムのIDを指定します。 087 * maxEventColumn 【TAG】maxを動的に設定するカラムのIDを指定します。 088 * =================== 089 * useZeroDataOmit 【TAG】データが0の場合、使用しない(除外する)かどうかを指定します[true:0データを除外する](初期値:false) 090 * useRenderer 【TAG】データ出力でレンデラを利用するかどうか(初期値:false) 091 * sortColumn 【TAG】検索結果をこのカラムでソートしなおします(初期値:null)。 092 * optionAttributes 【TAG】optionsの属性に、その他オプションを追加指定します。 093 * chartAttributes 【TAG】chartの属性に、TLDで未定義の属性を追加指定します。 // 6.9.9.2 (2018/09/18) 094 * tableid 【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID 095 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session) 096 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 097 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 098 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 099 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 100 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 101 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 102 * > ... Body ... 103 * </og:jsChart> 104 * 105 * ●使用例 106 * <og:jsChart 107 * chartType = "[line/bar/horizontalBar/radar/polarArea/pie/doughnut]" 108 * labelColumn = "LDATA" 109 * id = "hybscanvas" 110 * height = "400" 111 * width = "400" 112 * title = "タイトル" 113 * titlePosition = "top" [top/right/bottom/left] 114 * ylabel = "給料" 115 * xlabel = "名称" 116 * legendPosition = "right" [top/right/bottom/left] 117 * legendDisplay = "true" [true/false] 118 * xsclaeCallback = "function(value){return value + ' 様';}" 119 * ysclaeCallback = "function(value){return value.toLocaleString();}" 120 * xscaleType = "linear" 121 * max = "1000000" 122 * min = "100000" 123 * stepSize = "10000" 124 * barWidthPer = "0.4" 125 * > 126 * <og:jsChartData ... /> 127 * </og:jsChart> 128 * 129 * @og.group 画面表示 130 * 131 * @version 5.9.17.2 2017/02/08 132 * @author T.OTA 133 * @since JDK7.0 134 * 135 */ 136public class JsChartTag extends CommonTagSupport { 137 //* このプログラムのVERSION文字列を設定します。{@value} */ 138 private static final String VERSION = "6.9.9.3 (2018/09/25)" ; 139 private static final long serialVersionUID = 699320180925L ; 140 141 /** chartType 引数に渡す事の出来る タイプ 折れ線 {@value} **/ 142 public static final String CTYPE_LINE = "line"; 143 /** chartType 引数に渡す事の出来る タイプ 棒線 {@value} **/ 144 public static final String CTYPE_BAR = "bar"; 145 /** chartType 引数に渡す事の出来る タイプ 横棒線 {@value} **/ 146 public static final String CTYPE_HBAR = "horizontalBar"; 147 /** chartType 引数に渡す事の出来る タイプ レイダー {@value} **/ 148 public static final String CTYPE_RADAR = "radar"; 149 /** chartType 引数に渡す事の出来る タイプ ポーラエリア {@value} **/ 150 public static final String CTYPE_PA = "polarArea"; 151 /** chartType 引数に渡す事の出来る タイプ 円 {@value} **/ 152 public static final String CTYPE_PIE = "pie"; 153 /** chartType 引数に渡す事の出来る タイプ ドーナツ {@value} **/ 154 public static final String CTYPE_DOUGHNUT = "doughnut"; 155 /** chartType 引数に渡す事の出来る タイプ リスト {@value} */ 156 157 private static final Set<String> CTYPE_SET = new ArraySet<>( CTYPE_LINE, CTYPE_BAR, CTYPE_HBAR, CTYPE_RADAR, CTYPE_PA, CTYPE_PIE, CTYPE_DOUGHNUT ); 158 159 /** chartType が円形のリスト */ 160 private static final String[] CTYPE_CI = new String[] { CTYPE_RADAR, CTYPE_PA, CTYPE_PIE, CTYPE_DOUGHNUT }; 161 162 private static final String TYPE_CATEGORY = "category"; 163// private static final String TYPE_TIME = "time"; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 164 private static final String TYPE_LINEAR = "linear"; 165 166 private static final Set<String> SET_POSITION = new ArraySet<>( "top", "right", "bottom", "left" ); 167// private static final Set<String> SET_TIMEUNIT = new ArraySet<>( "year", "quarter", "month", "week", "day", "hour", "minute", "second", "millsecond" ); // 6.9.9.3 (2018/09/25) 168// private static final Set<String> SET_XSCALE = new ArraySet<>( TYPE_CATEGORY, TYPE_TIME, TYPE_LINEAR ); // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 169 private static final Set<String> SET_XSCALE = new ArraySet<>( TYPE_CATEGORY, TYPE_LINEAR ); 170 private static final Set<String> SET_YSCALE = new ArraySet<>( TYPE_LINEAR, TYPE_CATEGORY ); 171 private static final Set<String> SET_BOOLEAN = new ArraySet<>( "true", "false" ); 172 173 private static final String CANVAS_NAME = "hybscanvas"; 174 175 private static final String MARK_DEF_COLOR = "BLUE"; // 6.8.5.0 (2018/01/09) マーカーラインの色の初期値 176 private static final String MARK_DEF_ADJUST = "-6"; // 6.8.5.0 (2018/01/09) マーカーラインの位置調整の初期値 177 178 // 変数宣言 179 // 6.9.8.0 (2018/05/28) FindBugs:直列化可能クラスの非 transient で非直列化可能なインスタンスフィールド 180 private final transient List<JsChartData> jsChartData = new ArrayList<JsChartData>() ; // 6.7.5.0 (2017/03/10) jsChartDataのリスト 181 182 private String chartType ; // チャートタイプ(必須) 183 private String labelColumn ; // ラベルカラム(必須) 184 private String id ; // canvasタグのid 185 private String height = "400"; // canvasタグのheight 186 private String width = "400"; // canvasタグのwidth 187 private String title ; // タイトル 188 private String titlePosition ; // タイトル位置 189 private String legendPosition ; // 凡例位置 190 private String legendDisplay ; // 凡例表示フラグ 191 private String barWidthPer = "0.8"; // 棒線の横幅(パーセント) 192 private String onClick ; // クリックイベント 193 private String plugins ; // 6.9.9.2 (2018/09/18) プラグイン定義された関数を指定します。 194 private String usePointStyle ; // 6.8.5.0 (2018/01/09) 点のスタイル属性を使用するかどうか(初期値:false) 195 private String xlabel ; // x軸ラベル 196 private String xscaleCallback ; // x軸のメモリ編集用コールバック 197 private String xscaleType = TYPE_CATEGORY ; // x軸のスケールタイプ 198 private boolean xbeginAtZero = true; // 6.8.5.0 (2018/01/09) x軸を0から書き始まるかどうか(初期値:true) 199 private String xmax ; // x軸の最大値(リニアスケール用) 200 private String xmin ; // x軸の最小値(リニアスケール用) 201 private String xstepSize ; // x軸のメモリ幅(リニアスケール用) 202// private String timeUnit ; // 時間の単位(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 203// private String timeUnitStepSize ; // 時間のメモリ幅(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 204// private String timeSetFormat ; // 時間の入力フォーマット(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 205// private String timeLblFormat ; // 時間の表示フォーマット(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 206// private String timeMax ; // 最大の時間(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 207// private String timeMin ; // 最小の時間(タイムスケール用) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 208 private String ylabel ; // y軸ラベル 209 private String yscaleCallback ; // y軸のメモリ編集用コールバック 210 private String yscaleType = TYPE_LINEAR; // y軸のスケールタイプ 211 private String stepSize ; // y軸のメモリ幅(リニアスケール用) 212 private String ycategoryList ; // y軸のカテゴリーリスト(カテゴリースケール用) 213 private boolean ybeginAtZero = true; // 6.8.5.0 (2018/01/09) y軸を0から書き始まるかどうか(初期値:true)(円形の場合もこの値) 214 private String max ; // y軸の最大値(リニアスケール用) 215 private String min ; // y軸の最小値(リニアスケール用) 216 private String tableId = HybsSystem.TBL_MDL_KEY; // テーブルid 217 private String markValues ; // 6.8.5.0 (2018/01/09) マーカーラインの設定値をCSV形式で複数指定します 218 private String markColors ; // 6.8.5.0 (2018/01/09) マーカーラインの色をCSV形式で複数指定します 219 private String markLbls ; // 6.8.5.0 (2018/01/09) マーカーラインのラベルをCSV形式で複数指定します(未指定時はラベルを表示しません) 220 private String markAdjust ; // 6.8.5.0 (2018/01/09) マーカーラインのラベル表示位置の上下方向を調整します(初期値:-6)。 221 private boolean useZoom ; // 6.8.5.0 (2018/01/09) ズーム処理を使用するかどうか(初期値:false) 222 private String widthEventColumn ; // 横幅の動的参照カラム 2017/03/28 ADD 223 private String heightEventColumn ; // 縦幅の動的参照カラム 2017/03/28 ADD 224 private String minEventColumn ; // 最小値の動的参照カラム 2017/03/28 ADD 225 private String maxEventColumn ; // 最大値の動的参照カラム 2017/03/28 ADD 226 private boolean useZeroDataOmit ; // 6.7.7.0 (2017/03/31) データが0の場合、使用しない(除外する)かどうか 227 private boolean useRenderer ; // 6.7.9.0 (2017/04/28) useRenderer 追加 228 private String sortColumn ; // 6.8.0.0 (2017/06/02) 検索結果をこのカラムでソートしなおします(初期値:null)。 229 private String optionAttributes ; // オプション 230 private String chartAttributes ; // 6.9.9.2 (2018/09/18) chartの属性に、TLDで未定義の属性を追加指定します。 231 232 /** 233 * デフォルトコンストラクター 234 * 235 * @og.rev 6.9.7.0 (2018/05/14) PMD Each class should declare at least one constructor 236 */ 237 public JsChartTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 238 239 /** 240 * タグリブオブジェクトをリリースします。 241 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 242 * 243 * @og.rev 6.7.5.0 (2017/03/10) jsChartData属性の初期化もれ 244 * @og.rev 5.9.19.0 (2017/04/07) T.OTA 61200-170316-02 チャートサイズ・max・minの動的変更対応 245 * @og.rev 6.7.7.0 (2017/03/31) useZeroDataOmit属性の追加 246 * @og.rev 6.7.9.0 (2017/04/28) useRenderer 追加 247 * @og.rev 6.8.0.0 (2017/06/02) sortColumn 追加 248 * @og.rev 6.8.3.0 (2017/11/27) useEqValOmit属性の追加 249 * @og.rev 6.8.5.0 (2018/01/09) xbeginAtZero,ybeginAtZero,markValues,markColors,markLbls,markAdjust,rangeMin,rangeMax,usePointStyle属性の追加 250 * @og.rev 6.9.9.2 (2018/09/18) plugins,chartAttributes属性の追加 251 * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 252 */ 253 @Override 254 protected void release2() { 255 super.release2(); 256 jsChartData.clear(); // 6.7.5.0 (2017/03/10) 257 chartType = null; 258 id = null; 259 height = "400"; 260 width = "400"; 261 labelColumn = null; 262 title = null; 263 titlePosition = null; 264 legendPosition = null; 265 legendDisplay = null; 266 barWidthPer = "0.8"; 267 onClick = null; 268 plugins = null; // 6.9.9.2 (2018/09/18) プラグイン定義された関数を指定します。 269 usePointStyle = null; // 6.8.5.0 (2018/01/09) 点のスタイル属性を使用するかどうか 270 xlabel = null; 271 xscaleCallback = null; 272 xscaleType = TYPE_CATEGORY; 273 xbeginAtZero = true; // 6.8.5.0 (2018/01/09) x軸を0から書き始まるかどうか(初期値:true) 274 xmax = null; 275 xmin = null; 276 xstepSize = null; 277// timeUnit = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 278// timeUnitStepSize = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 279// timeSetFormat = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 280// timeLblFormat = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 281// timeMax = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 282// timeMin = null; // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 283 ylabel = null; 284 yscaleCallback = null; 285 yscaleType = TYPE_LINEAR; 286 ycategoryList = null; 287 ybeginAtZero = true; // 6.8.5.0 (2018/01/09) y軸を0から書き始まるかどうか(初期値:true)(円形の場合もこの値) 288 max = null; 289 min = null; 290 stepSize = null; 291 tableId = HybsSystem.TBL_MDL_KEY; 292 markValues = null; // 6.8.5.0 (2018/01/09) マーカーラインの設定値をCSV形式で複数指定します 293 markColors = null; // 6.8.5.0 (2018/01/09) マーカーラインの色をCSV形式で複数指定します 294 markLbls = null; // 6.8.5.0 (2018/01/09) マーカーラインのラベルをCSV形式で複数指定します(未指定時はラベルを表示しません) 295 markAdjust = null; // 6.8.5.0 (2018/01/09) マーカーラインのラベル表示位置の上下方向を調整します(初期値:-6)。 296 useZoom = false; // 6.8.5.0 (2018/01/09) ズーム処理を使用するかどうか(初期値:false) 297 widthEventColumn = null; // 5.9.19.0 298 heightEventColumn = null; // 5.9.19.0 299 maxEventColumn = null; // 5.9.19.0 300 minEventColumn = null; // 5.9.19.0 301 useZeroDataOmit = false; // 6.7.7.0 (2017/03/31) データが0の場合、使用しない(除外する)かどうか 302 useRenderer = false; // 6.7.9.0 (2017/04/28) useRenderer 追加 303 sortColumn = null; // 6.8.0.0 (2017/06/02) 検索結果をこのカラムでソートしなおします(初期値:null)。 304 optionAttributes = null; 305 chartAttributes = null; // 6.9.9.2 (2018/09/18) chartの属性に、TLDで未定義の属性を追加指定します。 306 } 307 308 /** 309 * Taglibの開始タグが見つかった時に処理する doStartTag() を オーバーライドします。 310 * 311 * @og.rev 6.7.5.0 (2017/03/10) タグの使用を決める共通属性の追加 312 * 313 * @return 後続処理の指示 314 */ 315 @Override 316 public int doStartTag() { 317 if( !useTag() ) { return SKIP_BODY ; } // 6.7.5.0 (2017/03/10) 318 319 // チェック処理の実行 320 checkData(); 321 322 return EVAL_BODY_BUFFERED; // Bodyを評価する 323 } 324 325 /** 326 * チェック処理。 327 */ 328 private void checkData() { 329 // xscaleTypeに「linear」、yscaleTypeに「category」を指定した場合は、エラー 330 if( TYPE_LINEAR.equals( xscaleType ) && TYPE_CATEGORY.equals( yscaleType ) ) { 331 final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE ) 332 .append( "指定のスケールタイプの組み合わせは実行できません。" ) 333 .append( CR ) 334 .append( "xscaleType:" ).append( xscaleType ).append( " yscaleType:" ).append( yscaleType ); 335 336 throw new HybsSystemException( errMsg.toString() ); 337 } 338 } 339 340 /** 341 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 342 * 343 * @og.rev 6.7.5.0 (2017/03/10) タグの使用を決める共通属性の追加 344 * 345 * @return 後続処理の指示 346 */ 347 @Override 348 public int doEndTag() { 349 debugPrint(); 350 if( !useTag() ) { return EVAL_PAGE ; } // 6.7.5.0 (2017/03/10) 351 352 id = (id==null ? CANVAS_NAME + tableId : id ); // id指定なしの場合はCANVAS_NAME+tableId 353 354 // jsChart出力 355 jspPrint( jsChartOutput() ); 356 357 return EVAL_PAGE; 358 } 359 360 /** 361 * jsChart出力用 362 * jsChartTag と jsChartData を使用して、jsChart情報を出力します。 363 * 364 * @og.rev 5.9.19.0 (2017/04/07) T.OTA 61200-170316-02 チャートサイズ・max・minの動的変更対応 365 * @og.rev 6.7.7.0 (2017/03/31) チャートデータで、ゼロ、null カラムを非表示にします。 366 * @og.rev 6.7.9.0 (2017/04/28) useRenderer 追加 367 * @og.rev 6.8.0.0 (2017/06/02) sortColumn 追加 368 * @og.rev 6.8.3.0 (2017/11/27) useZeroDataOmit属性で、nullOmit属性もセットします。 369 * @og.rev 6.8.3.0 (2017/11/27) useEqValOmit属性の追加 370 * @og.rev 6.8.3.1 (2017/12/01) 不要なデータを出力しないようにします。 371 * @og.rev 5.9.27.0 2017/12/01 T.OTA 61200-170831-04 max,minの小数点対応 372 * @og.rev 6.8.5.0 (2018/01/09) xbeginAtZero,ybeginAtZero,markValues,markColors,markLbls,markAdjust,rangeMin,rangeMax,usePointStyle属性の追加 373 * @og.rev 6.9.9.2 (2018/09/18) chart.jsが2.4.0から2.7.2にバージョンアップにより、廃止された属性対応 374 * @og.rev 6.9.9.2 (2018/09/18) plugins,chartAttributes属性の追加 375 * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 376 * 377 * @return jsChert用文字列 378 */ 379 private String jsChartOutput() { 380 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 381 382 // 各JavaScriptの変数名 383 final String qd = "qd_" + id; //queryData 384 final String cd = "cd_" + id; //chartData 385 final String myChart = "chart_"+id; 386 final String lblClm = labelColumn + id; 387 388 // JSON形式でテーブル情報を取得 389 // テーブル情報の取得 390 // 6.8.0.0 (2017/06/02) sortColumn 追加 391 DBTableModel table = (DBTableModel)getObject( tableId ) ; 392 if( !StringUtil.isNull( sortColumn ) ) { // 6.8.5.0 (2018/01/09) 393 final int clmNo = table.getColumnNo( sortColumn,false ); // エラーを出さない。 394 395 final DBTableModelSorter temp = new DBTableModelSorter(); 396 temp.setModel( (DBTableModel)getObject( tableId ) ); 397 temp.sortByColumn( clmNo,true ); // 順方向のソート 398 table = temp; 399 } 400 401// final int rowCount = table.getRowCount(); // 6.9.2.0 (2018/03/05) 402 403 // ゼロデータを使用しない設定 404 if( useZeroDataOmit ) { 405 final Iterator<JsChartData> itr = jsChartData.iterator(); // 個々のグラフ 406 while( itr.hasNext() ) { 407 final JsChartData jcData = itr.next(); 408 final String chtClm = jcData.getChartColumn(); 409 final int clmNo = table.getColumnNo( chtClm, false ); // エラーを出さない。 410 411 // 6.8.3.1 (2017/12/01) ループ処理の判定は、ChartColumn のみでよい。 412 boolean isRemove = true; 413 if( clmNo >= 0 ) { 414 for( int row=0; row<table.getRowCount(); row++ ) { 415 final String val = table.getValue( row,clmNo ); 416 if( !StringUtil.isNull( val ) && !"0".equals( val ) && !"0.0".equals( val ) && !"0.00".equals( val ) ) { // 6.8.5.0 (2018/01/09) 417 isRemove = false; 418 break; // 判定処理打ち切り 419 } 420 } 421 } 422 if( isRemove ) { 423 itr.remove(); // すべてが、ゼロ、null カラムを、削除します。 424 } 425 } 426 } 427 428 // 6.8.3.1 (2017/12/01) 不要なデータを出力しないようにします。 429 final int clmSize = jsChartData.size(); // JsChartTag の 値部分のみの配列 430 431 final int[] clmNos = new int[clmSize]; 432 final int lblNos = table.getColumnNo( labelColumn, false ); // エラーを出さない。 6.9.2.0 (2018/03/05) 433 final DBColumn dbClm = table.getDBColumn( lblNos ); // 6.9.2.0 (2018/03/05) 434 435 // jsChartDataタグの変数宣言 436 for( int i=0; i<clmSize; i++ ) { 437 final String chtClm = jsChartData.get(i).getChartColumn(); 438 clmNos[i] = table.getColumnNo( chtClm, false ); // エラーを出さない。 439 } 440 441 // canvasタグの設定 442 rtn.append( "<canvas class=\"" ).append( CANVAS_NAME ) 443 .append( "\" id=\"" ).append( id ) 444 .append( "\" width=\"" ).append( width ) 445 .append( "\" height=\"" ).append( height ) 446 .append( "\"><!-- --></canvas>" ) 447 448 // 6.8.3.1 (2017/12/01) 不要なデータを出力しないようにします。 449 .append( "<script>var " ).append( qd ).append( "={\"DATA\":[" ); // query情報の取得(JSON) 450 451 final boolean isYcateType = TYPE_CATEGORY.equals( yscaleType ); // 6.8.5.0 (2018/01/09) yscaleType が category かどうか。 452 final boolean isXlinerType = TYPE_LINEAR.equals( xscaleType ); // 6.8.5.0 (2018/01/09) xscaleType が linear かどうか。 453 454 // 6.9.9.3 (2018/09/25) linear のデータも、category と同じにする。 455 // if( isXlinerType ) { 456 // // 何か、isXlinerType はうまく動かない 457 // final String[] clmNms = table.getNames(); 458 // for( int row=0; row<table.getRowCount(); row++ ) { 459 // // ラベル部の出力 460 // rtn.append( "{\"" ).append( clmNms[lblNos] ).append( "\":\"" ).append( table.getValue( row,lblNos ) ).append( '"' ); 461 // // データ部の出力 462 // for( final int clm : clmNos ) { 463 // final String val = table.getValue( row,clm ); 464 // rtn.append( ",\"" ).append( clmNms[clm] ).append( "\":\"" ).append( val ).append( '"' ); 465 // } 466 // rtn.append( "}," ); // 最後に 467 // } 468 // rtn.append( "]};" ).append( CR ); 469 // } 470 // else { 471 for( int row=0; row<table.getRowCount(); row++ ) { 472 // ラベル部の出力 473 final String lval = table.getValue( row,lblNos ); 474 final String lblVal = useRenderer ? StringUtil.jsonFilter( dbClm.getRendererValue(row,lval) ) : lval ; 475 rtn.append( '[' ).append( '"' ).append( lblVal ).append( '"' ); 476 // データ部の出力 477 for( final int clm : clmNos ) { 478 final String val = table.getValue( row,clm ); 479 rtn.append( ',' ); 480 if( isYcateType ) { // 6.8.5.0 (2018/01/09) yscaleType が category 481 rtn.append( '"' ).append( val ).append( '"' ); 482 } 483 else { 484 rtn.append( val ); 485 } 486 } 487 rtn.append( "]," ); 488 } 489 rtn.append( "]};" ).append( CR ); 490 // } 491 492 // jsChartDataタグの変数宣言 493 for( int i=0; i<clmSize; i++ ) { 494 rtn.append( " var " ).append( jsChartData.get( i ).getChartColumn() ).append( "=[];" ); 495 } 496 rtn.append( "var " ).append( lblClm ).append( "=[];" ) 497 498 // query情報をjsChartDataの変数に入れ替え 499 .append( "for(var i=0; i < ").append( qd ).append( ".DATA.length; i++){" ); 500 for( int i=0; i<clmSize; i++ ) { 501 final String chtClm = jsChartData.get( i ).getChartColumn(); 502 // 6.9.9.3 (2018/09/25) linear のデータも、category と同じにする。 503 // // x軸がlinearスケールの場合 504 // if( isXlinerType ) { 505 // // {x:ラベル, y:値}の形式で値を設定 506 // rtn.append( chtClm ).append( "[i]={x:" ).append( qd ).append( ".DATA[i]." ).append( labelColumn ) 507 // .append( ",y:" ).append( qd ).append( ".DATA[i]." ).append( chtClm ).append( "};" ); 508 // } 509 // else { 510 // その他は値を設定 511 rtn.append( chtClm ).append( "[i]=" ).append(qd).append( ".DATA[i][" ).append( i+1 ).append( "];" ); 512 // } 513 } 514 // if( isXlinerType ) { 515 // rtn.append( lblClm ).append( "[i]=").append( qd ).append( ".DATA[i]." ).append( labelColumn ).append( ";}" ); 516 // } 517 // else { 518 rtn.append( lblClm ).append( "[i]=").append( qd ).append( ".DATA[i][0];}" ); 519 // } 520 521 // y軸にカテゴリースケールを設定した場合 522 if( isYcateType ) { 523 rtn.append( "var ycateList=[];" ); 524 if( !StringUtil.isNull( ycategoryList ) ) { // 6.8.5.0 (2018/01/09) 525 // 「,」を「','」に変換して設定。(,前後の半角スペースは除去する) 526 final String regex = " *, *"; 527 final Pattern pttn = Pattern.compile( regex ); 528 529 final Matcher mtch = pttn.matcher( ycategoryList ); 530 // y軸カテゴリーリストの設定 531 rtn.append( "ycateList=['" ).append( mtch.replaceAll( "','" ) ).append( "'];" ); 532 } 533 } 534 535 // jsChartDataの設定 536 rtn.append( "var ").append( cd ).append( "={labels:" ).append( lblClm ); 537 // y軸にカテゴリースケールを設定した場合 538 if( isYcateType ) { 539 rtn.append( ",yLabels:ycateList" ); 540 } 541 rtn.append( ",datasets:[" ); 542 for( int i=0; i<clmSize; i++ ) { 543 if( i != 0 ) { 544 rtn.append( ',' ); 545 } 546 rtn.append( jsChartData.get( i ).getParameter() ); 547 } 548 rtn.append( "]};" ) 549 550 // jsChartの生成 551 .append( "var " ).append( myChart ).append( "=new Chart(" ).append( id ) 552 .append( ",{type:'" ).append( chartType ) 553 .append( "',data:" ).append( cd ); 554// .append( ",options:{responsive:false" ); // レスポンシブ OFF 555 556 // 6.9.9.2 (2018/09/18) plugins,chartAttributes属性の追加 557 if( !StringUtil.isNull( plugins ) ) { 558 rtn.append( ",plugins: [" ).append( plugins ).append( ']' ); 559 } 560 if( !StringUtil.isNull( chartAttributes ) ) { 561 rtn.append( ',' ).append( chartAttributes ); 562 } 563 564 rtn.append( ",options:{responsive:false" ); // レスポンシブ OFF 565 566 // クリックイベントの設定 567 // clickLink 変数を使用する場合、内部でマスタデータを使用します。キーとして、渡しておく必要があります。 568 if( !StringUtil.isNull( onClick ) ) { // 6.8.5.0 (2018/01/09) 569 rtn.append( ",onClick:function(event,obj){" ).append( onClick ).append( '}' ) 570 .append( ",master:" ).append( qd ).append( ".DATA" ); // 6.9.9.2 (2018/09/18) 571 } 572 573 // タイトル属性の設定 574 if( !StringUtil.isNull( title ) ) { // 6.8.5.0 (2018/01/09) 575 rtn.append( ",title:{display:true" ); 576 setProp( rtn, ",text:'" , title , "'" ); 577 setProp( rtn, ",position:'", titlePosition, "'" ); 578 rtn.append( '}' ); 579 } 580 581 // 凡例属性の設定 582 if( !StringUtil.isNull( legendDisplay ) ) { // 6.8.5.0 (2018/01/09) 583 rtn.append( ",legend:{" ); 584 setProp( rtn, "display:" , legendDisplay ); 585 setProp( rtn, ",position:'", legendPosition, "'" ); 586 rtn.append( '}' ); 587 } 588 589 // 点のスタイル属性の設定 590 setProp( rtn, ",usePointStyle:" , usePointStyle ); // 6.8.5.0 (2018/01/09) 591 592 // chartTypeの円形チェック 593 final List<String> list = Arrays.asList( CTYPE_CI ); 594 if( list.contains( chartType ) ) { 595 // 6.9.9.2 (2018/09/18) chart.jsが2.4.0から2.7.2にバージョンアップにより、廃止された属性対応 596 // scale属性は、使用しません。 597// // 円形の場合はscale属性に値を設定 598// rtn.append( ",scale:{ticks:{beginAtZero:" ).append( ybeginAtZero ); // 6.8.5.0 (2018/01/09) 599// setProp( rtn, ",max:" , max ); 600// setProp( rtn, ",min:" , min ); 601// setProp( rtn, ",stepSize:" , stepSize ); 602// rtn.append( "}}" ); 603 } 604 else { 605 // 円形以外の場合はscales属性に設定 606 rtn.append( ",scales:{" ); 607 if( CTYPE_HBAR.equals( chartType ) ) { 608 // 横棒線の場合はx軸の設定 609 rtn.append( "xAxes" ); 610 } 611 else { 612 // それ以外はy軸の設定 613 rtn.append( "yAxes" ); 614 } 615 rtn.append( ":[{type:'" ).append( yscaleType ).append( '\'' ); 616 // y軸にカテゴリースケールを設定した場合 617 if( isYcateType ) { 618 rtn.append( ",position:'left'" ); 619 } 620 if( !StringUtil.isNull( ylabel ) ) { // 6.8.5.0 (2018/01/09) 621 rtn.append( ",scaleLabel:{display:true" ) 622 .append( ",labelString:'" ).append( ylabel ).append( "'}" ); 623 } 624 rtn.append( ",ticks:{beginAtZero:" ).append( ybeginAtZero ); // 6.8.5.0 (2018/01/09) 625 setProp( rtn, ",max:" , max ); 626 setProp( rtn, ",min:" , min ); 627 setProp( rtn, ",stepSize:" , stepSize ); 628 setProp( rtn, ",callback:" , yscaleCallback ); 629 rtn.append( "}}]," ); 630 631 if( CTYPE_HBAR.equals( chartType ) ) { 632 // 横棒線の場合はy軸の設定 633 rtn.append( "yAxes" ); 634 } 635 else { 636 // それ以外はx軸の設定 637 rtn.append( "xAxes" ); 638 } 639 rtn.append( ":[{type:'" ).append( xscaleType ).append( '\'' ); 640 641 setProp( rtn, ",categoryPercentage:", barWidthPer ); 642 // x軸にリニアスケールを設定した場合(これは残す) 643 if( isXlinerType ) { 644 rtn.append( ",position:'bottom'" ); 645 } 646 // チャートタイプが横棒線の場合 647 if( CTYPE_HBAR.equals( chartType ) ){ 648 rtn.append( ",position:'left'" ); 649 } 650 651 if( !StringUtil.isNull( xlabel ) ) { // 6.8.5.0 (2018/01/09) 652 rtn.append( ",scaleLabel:{display:true," ) 653 .append( "labelString:'" ).append( xlabel ).append( "'}" ); 654 } 655// // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 656// // 固定値がないので、先頭カンマが使えない。 657// rtn.append( ",time:{" ); 658// setProp( rtn, "format:'", timeSetFormat, "'," ); 659// // timeLblFormatが指定されている場合、全てのdisplayFormatsにtimeLblFormatを設定する 660// if( !StringUtil.isNull( timeLblFormat ) ) { // 6.8.5.0 (2018/01/09) 661// rtn.append( "displayFormats:{year:'" ).append( timeLblFormat ) 662// .append( "',quarter:'" ).append( timeLblFormat ) 663// .append( "',month:'" ).append( timeLblFormat ) 664// .append( "',week:'" ).append( timeLblFormat ) 665// .append( "',day:'" ).append( timeLblFormat ) 666// .append( "',hour:'" ).append( "',minute:'" ).append( timeLblFormat ) 667// .append( "',second:'" ).append( timeLblFormat ) 668// .append( "',millisecond:''}," ); 669// } 670// setProp( rtn, "max:" , timeMax , "," ); 671// setProp( rtn, "min:" , timeMin , "," ); 672// setProp( rtn, "unit:" , timeUnit , "," ); 673// setProp( rtn, "unitStepSize:" , timeUnitStepSize , "," ); 674// rtn.append( "}" ); 675 676 // 固定値がないので、先頭カンマが使えない。 677 rtn.append( ",ticks:{" ); 678 setProp( rtn, "callback:", xscaleCallback , "," ); 679 // x軸にリニアスケールを設定した場合(これは残す) 680 if( isXlinerType ) { 681 setProp( rtn, "beginAtZero:" , String.valueOf( xbeginAtZero ) , "," ); // 6.8.5.0 (2018/01/09) 682 setProp( rtn, "max:" , xmax , "," ); 683 setProp( rtn, "min:" , xmin , "," ); 684 setProp( rtn, "stepSize:" , xstepSize , "," ); 685 } 686 rtn.append( "}}]}" ); 687 688 // 6.8.5.0 (2018/01/09) markValues,markColors,markLbls,markAdjust 属性対応 689 final String[] mkVals = StringUtil.csv2Array( markValues ); 690 final int vCnt = mkVals.length; 691 if( vCnt > 0 ) { 692 final String[] mkCols = StringUtil.csv2Array( markColors , ',' , vCnt , MARK_DEF_COLOR ); 693 final String[] mkLbls = StringUtil.csv2Array( markLbls , ',' , vCnt ); 694 final String[] mkAjst = StringUtil.csv2Array( markAdjust , ',' , vCnt , MARK_DEF_ADJUST ); 695 696 rtn.append( ",annotation:{annotations:[" ); 697 for( int i=0; i<vCnt; i++ ) { 698 rtn.append( "{type:'line',scaleID:'y-axis-0',mode:'horizontal',borderWidth:2" ); 699 setProp( rtn, ",value:" , mkVals[i] ); 700 setProp( rtn, ",borderColor:'" , mkCols[i] , "'" ); 701 if( !mkLbls[i].isEmpty() ) { 702 rtn.append( ",label:{enabled:'true',position:'left',backgroundColor:'rgba(0,0,0,0)',fontSize:10" ); 703 setProp( rtn, ",yAdjust:" , mkAjst[i] ); 704 setProp( rtn, ",content:'" , mkLbls[i] , "'" ); 705 setProp( rtn, ",fontColor:'", mkCols[i] , "'" ); 706 rtn.append( '}' ); 707 } 708 rtn.append( "}," ); 709 } 710 rtn.append( "]}" ); 711 } 712 713 // 6.8.5.0 (2018/01/09) ズーム処理を使用するかどうか 714 if( useZoom ) { 715 rtn.append( ",pan:{enabled:true,mode:'xy'},zoom:{enabled:true,drag:false,mode:'xy'}" ); 716 } 717 } 718 setProp( rtn, ",", optionAttributes ); 719 720 rtn.append( "}});" ); 721 722 // イベント設定用 5.9.19.0 723 // 5.9.27.0 (2017/12/01) MODIFY イベントにkeyupを追加 724 // widthEventColumn設定 725 if( !StringUtil.isNull( widthEventColumn ) ) { // 6.8.5.0 (2018/01/09) 726 rtn.append( "$(document).delegate('#" ).append( widthEventColumn ).append( "','mouseup keyup',function(){" ) 727 .append( "var width=$(this).val();" ) 728 .append( "$('#" ).append( id ).append( "').attr('width',width);" ) 729 .append( myChart ).append( ".chart.width=width;" ) 730 .append( myChart ).append( ".update();" ) 731 .append( "});" ) 732 .append( "$(function(){" ) 733 .append( "var chartWidth=$('#" ).append( id ).append("').attr('width');" ) 734 .append( "$('#" ).append( widthEventColumn ).append( "').val(chartWidth);" ) // 初期値を設定 735 .append( "});" ); 736 } 737 // heightEventColumn設定 738 if( !StringUtil.isNull( heightEventColumn ) ) { // 6.8.5.0 (2018/01/09) 739 rtn.append( "$(document).delegate('#" ).append( heightEventColumn ).append( "','mouseup keyup',function(){" ) 740 .append( "var height=$(this).val();" ) 741 .append( "$('#" ).append( id ).append( "').attr('height',height);" ) 742 .append( myChart ).append( ".chart.height=height;" ) 743 .append( myChart ).append( ".update();" ) 744 .append( "});") 745 .append( "$(function(){") 746 .append( "var chartHeight=$('#" ).append( id ).append("').attr('height');" ) 747 .append( "$('#" ).append( heightEventColumn ).append( "').val(chartHeight);" ) // 初期値を設定 748 .append( "});" ); 749 } 750 // minEventColumn設定 751 if( !StringUtil.isNull( minEventColumn ) ) { // 6.8.5.0 (2018/01/09) 752 rtn.append( "$(document).delegate('#" ).append( minEventColumn ).append( "','mouseup keyup',function(){" ) 753 // 5.9.27.0 (2017/12/01) MODIFY IntからFloat型に変更 754 .append( "var min=parseFloat($(this).val());") 755 .append( myChart ).append( ".options.scales.yAxes[0].ticks.min = min;" ) 756 .append( myChart ).append( ".update();") 757 .append( "});" ) 758 .append( "$(function(){" ) 759 .append( "var chartMax=" ).append( myChart ).append( ".scales['y-axis-0'].max;" ) 760 .append( "var chartMin=" ).append( myChart ).append( ".scales['y-axis-0'].min;" ) 761 .append( "$('#" ).append( minEventColumn ).append( "').val(chartMin);" ) // 初期値を設定 762 .append( "$('#" ).append( minEventColumn ).append( "').attr({'max':chartMax});" ) // 初期値を設定 763 .append( "$('#" ).append( minEventColumn ).append( "').attr({'min':chartMin});" ) // 初期値を設定 764 .append( "});" ); 765 } 766 // maxEventColumn設定 767 if( !StringUtil.isNull( maxEventColumn ) ) { // 6.8.5.0 (2018/01/09) 768 rtn.append( "$(document).delegate('#").append( maxEventColumn ).append( "','mouseup keyup',function(){" ) 769 // 5.9.27.0 (2017/12/01) MODIFY IntからFloat型に変更 770 .append( "var max=parseFloat($(this).val());") 771 .append( myChart ).append( ".options.scales.yAxes[0].ticks.max = max;") 772 .append( myChart ).append( ".update();") 773 .append( "});") 774 .append( "$(function(){" ) 775 .append( "var chartMax=" ).append( myChart ).append( ".scales['y-axis-0'].max;" ) 776 .append( "var chartMin=" ).append( myChart ).append( ".scales['y-axis-0'].min;" ) 777 .append( "$('#" ).append( maxEventColumn ).append( "').val(chartMax);" ) // 初期値を設定 778 .append( "$('#" ).append( maxEventColumn ).append( "').attr({'max':chartMax});" ) // 初期値を設定 779 .append( "$('#" ).append( maxEventColumn ).append( "').attr({'min':chartMin});" ) // 初期値を設定 780 .append( "});" ); 781 } 782 783 // 6.9.2.0 (2018/03/05) ズーム処理を使用する場合、クダブルクリックで元に戻すためのイベントを発生させます。 784 if( useZoom ) { 785 rtn.append( "window.onload=function(){$('#").append( id ).append( "').dblclick(function(){window." ) 786 .append( myChart ).append( ".resetZoom();});}" ); 787 } 788 789 rtn.append( "</script>" ); 790 791 return rtn.toString(); 792 } 793 794 /** 795 * setに値が存在する場合、sbにstr + setの形で値を追加する。 796 * 797 * @param sb ベースとなるStringBuilder 798 * @param str 文字列1 799 * @param set 文字列2 800 */ 801 private void setProp( final StringBuilder sb, final String str, final String set ) { 802 if( !StringUtil.isNull( set ) ) { // 6.8.5.0 (2018/01/09) 803 sb.append( str ).append( set ); 804 } 805 } 806 807 /** 808 * setに値が存在する場合、sbにstr + set + endの形で値を追加する。 809 * 810 * @param sb ベースとなるStringBuilder 811 * @param str 文字列1 812 * @param set 文字列2 813 * @param end 文字列3 814 */ 815 private void setProp( final StringBuilder sb, final String str, final String set, final String end ) { 816 if( !StringUtil.isNull( set ) ) { // 6.8.5.0 (2018/01/09) 817 sb.append( str ).append( set ).append( end ); 818 } 819 } 820 821 /** 822 * パラメータチェック用メソッド。 823 * 824 * @param trg ターゲット 825 * @param set 使用可能なキーワードのSet 826 * @param trgStr ターゲットの名称 827 */ 828 private void checkPara( final String trg, final Set<String> set, final String trgStr ) { 829 if( !StringUtil.isNull( trg ) && !check( trg, set ) ) { // 6.8.5.0 (2018/01/09) 830 final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE ) 831 .append( "指定の" ).append( trgStr ).append( "は指定できません。" ).append( CR ) 832 .append( trgStr ).append( "=[" ).append( trg ).append( ']' ).append( CR ); 833 for( final String lst : set ) { 834 errMsg.append( " | " ).append( lst ); 835 } 836 throw new HybsSystemException( errMsg.toString() ); 837 } 838 } 839 840 /** 841 * 【TAG】チャートの種類を指定します[line/bar/horizontalBar/radar/polarArea/pie/doughnut](必須)。 842 * 843 * @og.tag 844 * 845 * @param cType チャートタイプ [line/bar/horizontalBar/radar/polarArea/pie/doughnut] 846 */ 847 public void setChartType( final String cType ) { 848 chartType = getRequestParameter( cType ); 849 850 if( !StringUtil.isNull( chartType ) && !check( chartType, CTYPE_SET ) ) { 851 final StringBuilder errMsg = new StringBuilder( BUFFER_MIDDLE ) 852 .append( "指定のチャートタイプは実行できません。" ).append( CR ) 853 .append( "chartType=[" ).append( chartType ).append( ']' ).append( CR ); 854 for( final String lst : CTYPE_SET ) { 855 errMsg.append( " | " ).append( lst ); 856 } 857 throw new HybsSystemException( errMsg.toString() ); 858 } 859 } 860 861 /** 862 * 【TAG】canvasタグのidを指定します(初期値:hybscanvas)。 863 * 864 * @og.tag 865 * canvasタグのidに設定します。 866 * 867 * @param id canvasタグのid 868 */ 869 @Override 870 public void setId( final String id ) { 871 this.id = nval( getRequestParameter( id ),this.id ); 872 } 873 874 /** 875 * 【TAG】チャートの高さを指定します(初期値:400)。 876 * 877 * @og.tag 878 * canvasタグの高さに設定します。 879 * 880 * @param hei 設定する高さ 881 */ 882 public void setHeight( final String hei ) { 883 height = nval( getRequestParameter( hei ),height ); 884 } 885 886 /** 887 * 【TAG】チャートの幅を指定します(初期値:400)。 888 * 889 * @og.tag 890 * canvasタグの横幅を設定します。 891 * 892 * @param wid 設定する横幅 893 */ 894 public void setWidth( final String wid ) { 895 width = nval( getRequestParameter( wid ),width ); 896 } 897 898 /** 899 * 【TAG】ラベルのカラム名を指定します(表示名称)(必須)。 900 * 901 * @og.tag 902 * 903 * @param lblclm ラベルカラム 904 */ 905 public void setLabelColumn( final String lblclm ) { 906 labelColumn = nval( getRequestParameter( lblclm ),labelColumn ); 907 } 908 909 /** 910 * 【TAG】タイトルを指定します。 911 * 912 * @og.tag 913 * 914 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 915 * 916 * @param title タイトル 917 */ 918 public void setTitle( final String title ) { 919// this.title = getRequestParameter( title ); 920 this.title = nval( getRequestParameter( title ),this.title ); 921 } 922 923 /** 924 * 【TAG】タイトルの表示位置[top/right/bottom/left]を指定します(初期値:top)。 925 * 926 * @og.tag 927 * 928 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 929 * 930 * @param titlePosition タイトルの表示位置 931 */ 932 public void setTitlePosition( final String titlePosition ) { 933// this.titlePosition = getRequestParameter( titlePosition ); 934 this.titlePosition = nval( getRequestParameter( titlePosition ),this.titlePosition ); 935 936 checkPara( this.titlePosition, SET_POSITION, "titlePosition" ); 937 } 938 939 /** 940 * 【TAG】x軸のラベルを指定します。 941 * 942 * @og.tag 943 * 944 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 945 * 946 * @param xlabel x軸のラベル 947 */ 948 public void setXlabel( final String xlabel ) { 949// this.xlabel = getRequestParameter( xlabel ); 950 this.xlabel = nval( getRequestParameter( xlabel ),this.xlabel ); 951 } 952 953 /** 954 * 【TAG】y軸のラベルを指定します。 955 * 956 * @og.tag 957 * 958 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 959 * 960 * @param ylabel y軸のラベル 961 */ 962 public void setYlabel( final String ylabel ) { 963// this.ylabel = getRequestParameter( ylabel ); 964 this.ylabel = nval( getRequestParameter( ylabel ),this.ylabel ); 965 } 966 967 /** 968 * 【TAG】凡例の表示位置[top/right/bottom/left]を指定します(初期値:top)。 969 * 970 * @og.tag 971 * 972 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 973 * 974 * @param legendPosition 凡例の表示位置 975 */ 976 public void setLegendPosition( final String legendPosition ) { 977// this.legendPosition = getRequestParameter( legendPosition ); 978 this.legendPosition = nval( getRequestParameter( legendPosition ),this.legendPosition ); 979 980 checkPara( this.legendPosition, SET_POSITION, "legendPosition" ); 981 } 982 983 /** 984 * 【TAG】凡例を表示するか[true/false]を指定します。 985 * 986 * @og.tag 987 * 988 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 989 * 990 * @param legendDisplay 凡例を表示するか [true/false] 991 */ 992 public void setLegendDisplay( final String legendDisplay ) { 993// this.legendDisplay = getRequestParameter( legendDisplay ); 994 this.legendDisplay = nval( getRequestParameter( legendDisplay ),this.legendDisplay ); 995 996 checkPara( this.legendDisplay, SET_BOOLEAN, "legendDisplay" ); 997 } 998 999 /** 1000 * 【TAG】x軸コールバックを指定します。 1001 * 1002 * @og.tag 1003 * x軸のメモリ編集用スケールバックを設定します。 1004 * 1005 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1006 * 1007 * @param xscaleCallback x軸コールバック 1008 */ 1009 public void setXscaleCallback( final String xscaleCallback ) { 1010// this.xscaleCallback = getRequestParameter( xscaleCallback ); 1011 this.xscaleCallback = nval( getRequestParameter( xscaleCallback ),this.xscaleCallback ); 1012 } 1013 1014 /** 1015 * 【TAG】y軸コールバックを指定します。 1016 * 1017 * @og.tag 1018 * y軸のメモリ編集用スケールバックを設定します。 1019 * 1020 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1021 * 1022 * @param yscaleCallback y軸コールバック 1023 */ 1024 public void setYscaleCallback( final String yscaleCallback ) { 1025// this.yscaleCallback = getRequestParameter( yscaleCallback ); 1026 this.yscaleCallback = nval( getRequestParameter( yscaleCallback ),this.yscaleCallback ); 1027 } 1028 1029 /** 1030 * 【TAG】x軸のスケールタイプ[category/linear]を指定します(初期値:category)。 1031 * 1032 * @og.tag 1033 * 1034 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1035 * 1036 * @param xscaleType x軸のスケールタイプ 1037 */ 1038 public void setXscaleType( final String xscaleType ) { 1039// this.xscaleType = getRequestParameter( xscaleType ); 1040 this.xscaleType = nval( getRequestParameter( xscaleType ) , this.xscaleType ); 1041 1042 checkPara( this.xscaleType, SET_XSCALE, "xscaleType" ); 1043 } 1044 1045 /** 1046 * 【TAG】x軸を0から書き始まるかどうか(初期値:true)。 1047 * 1048 * @og.tag 1049 * 1050 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1051 * 1052 * @param xZero x軸のゼロ開始 1053 */ 1054 public void setXbeginAtZero( final String xZero ) { 1055 xbeginAtZero = nval( getRequestParameter( xZero ) , xbeginAtZero ) ; 1056 } 1057 1058 /** 1059 * 【TAG】y軸を0から書き始まるかどうか(初期値:true)(円形の場合もこの値)。 1060 * 1061 * @og.tag 1062 * 1063 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1064 * 1065 * @param yZero x軸のゼロ開始 1066 */ 1067 public void setYbeginAtZero( final String yZero ) { 1068 ybeginAtZero = nval( getRequestParameter( yZero ) , ybeginAtZero ) ; 1069 } 1070 1071 /** 1072 * 【TAG】y軸のスケールタイプ[linear/category]を指定します(初期値:linear)。 1073 * 1074 * @og.tag 1075 * 1076 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1077 * 1078 * @param yscaleType y軸のスケールタイプ 1079 */ 1080 public void setYscaleType( final String yscaleType ) { 1081// this.yscaleType = getRequestParameter( yscaleType ); 1082 this.yscaleType = nval( getRequestParameter( yscaleType ) , this.yscaleType ); 1083 1084 checkPara( this.yscaleType, SET_YSCALE, "yscaleType" ); 1085 } 1086 1087 /** 1088 * 【TAG】y軸のメモリリストをカンマ区切りで指定します(xscaleTypeがcategoryの場合に有効)。 1089 * 1090 * @og.tag 1091 * 1092 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1093 * 1094 * @param ycategoryList y軸のメモリリスト 1095 */ 1096 public void setYcategoryList( final String ycategoryList ) { 1097// this.ycategoryList = getRequestParameter( ycategoryList ); 1098 this.ycategoryList = nval( getRequestParameter( ycategoryList ),this.ycategoryList ); 1099 } 1100 1101 /** 1102 * 【TAG】x軸の最大値を指定します(xscaleTypeがlinearの場合に有効)。 1103 * 1104 * @og.tag 1105 * 1106 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1107 * 1108 * @param xmax x軸の最大値 1109 */ 1110 public void setXmax( final String xmax ) { 1111// this.xmax = getRequestParameter( xmax ); 1112 this.xmax = nval( getRequestParameter( xmax ),this.xmax ); 1113 } 1114 1115 /** 1116 * 【TAG】x軸の最小値を指定します(xscaleTypeがlinearの場合に有効)。 1117 * 1118 * @og.tag 1119 * 1120 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1121 * 1122 * @param xmin x軸の最小値 1123 */ 1124 public void setXmin( final String xmin ) { 1125// this.xmin = getRequestParameter( xmin ); 1126 this.xmin = nval( getRequestParameter( xmin ),this.xmin ); 1127 } 1128 1129 /** 1130 * 【TAG】x軸のメモリ幅を指定します(xscaleTypeがlinearの場合に有効)。 1131 * 1132 * @og.tag 1133 * 1134 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1135 * 1136 * @param xstepSize x軸のメモリ幅 1137 */ 1138 public void setXstepSize( final String xstepSize ) { 1139// this.xstepSize = getRequestParameter( xstepSize ); 1140 this.xstepSize = nval( getRequestParameter( xstepSize ),this.xstepSize ); 1141 } 1142 1143 /** 1144 * 【TAG】棒線の横幅を指定します(初期値:0.8, typeがbar,horizontalBarの場合に有効)。 1145 * 1146 * @og.tag 1147 * 1148 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1149 * 1150 * @param barWidthPer 棒線の横幅 1151 */ 1152 public void setBarWidthPer( final String barWidthPer ) { 1153// this.barWidthPer = getRequestParameter( barWidthPer ); 1154 this.barWidthPer = nval( getRequestParameter( barWidthPer ) , this.barWidthPer ); 1155 } 1156 1157 /** 1158 * jsChartData情報をリストに追加します。 1159 * 1160 * @og.rev 6.7.5.0 (2017/03/10) リストの初期化方法を変更します。 1161 * 1162 * @param jsData jsChartData情報 1163 */ 1164 protected void addJsChartData( final JsChartData jsData ) { 1165 jsChartData.add( jsData ); 1166 } 1167 1168 /** 1169 * 登録済みのjsChartData情報の個数を返します。 1170 * 1171 * @og.rev 6.7.7.0 (2017/03/31) 新規追加 1172 * 1173 * @return 登録済みのjsChartData情報の個数 1174 */ 1175 protected int getJsChartDataSize() { 1176 return jsChartData.size(); 1177 } 1178 1179// /** 1180// * 【TAG】x軸のタイムの単位[year/quarter/month/week/day/hour/minute/second/millsecond]を指定します。 1181// * 1182// * @og.tag 1183// * (xscaleTypeがtimeの場合に有効。指定しない場合は自動) 1184// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1185// * 1186// * @param timeUnit x軸のタイムの単位 1187// */ 1188// public void setTimeUnit( final String timeUnit ) { 1189// this.timeUnit = getRequestParameter( timeUnit ); 1190// 1191// checkPara( this.timeUnit, SET_TIMEUNIT, "timeUnit" ); 1192// } 1193 1194// /** 1195// * 【TAG】x軸のタイムの単位幅を指定します(xscaleTypeがtimeの場合に有効)。 1196// * 1197// * @og.tag 1198// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1199// * 1200// * @param timeUnitStepSize x軸のタイムの単位幅 1201// */ 1202// public void setTimeUnitStepSize( final String timeUnitStepSize ) { 1203// this.timeUnitStepSize = getRequestParameter( timeUnitStepSize ); 1204// } 1205 1206// /** 1207// * 【TAG】x軸の設定するタイムのフォーマットを指定します(xscaleTypeがtimeの場合に有効)。 1208// * 1209// * @og.tag 1210// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1211// * 1212// * @param timeSetFormat x軸の設定するタイムのフォーマット 1213// */ 1214// public void setTimeSetFormat( final String timeSetFormat ) { 1215// this.timeSetFormat = getRequestParameter( timeSetFormat ); 1216// } 1217 1218// /** 1219// * 【TAG】x軸の表示するタイムのフォーマットを指定します(xscaleTypeがtimeの場合に有効)。 1220// * 1221// * @og.tag 1222// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1223// * 1224// * @param timeLblFormat x軸の表示するタイムのフォーマット 1225// */ 1226// public void setTimeLblFormat( final String timeLblFormat ) { 1227// this.timeLblFormat = getRequestParameter( timeLblFormat ); 1228// } 1229 1230// /** 1231// * 【TAG】x軸のタイムの最大値を指定します(xscaleTypeがtimeの場合に有効)。 1232// * 1233// * @og.tag 1234// * 1235// * @param timeMax x軸のタイムの最大値 1236// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1237// */ 1238// public void setTimeMax( final String timeMax ) { 1239// this.timeMax = getRequestParameter( timeMax ); 1240// } 1241 1242// /** 1243// * 【TAG】x軸のタイムの最小値を指定します(xscaleTypeがtimeの場合に有効)。 1244// * 1245// * @og.tag 1246// * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1247// * 1248// * @param timeMin x軸のタイムの最小値 1249// */ 1250// public void setTimeMin( final String timeMin ) { 1251// this.timeMin = getRequestParameter( timeMin ); 1252// } 1253 1254 /** 1255 * 【TAG】y軸の最大値を指定します(xscaleTypeがlinearの場合に有効)。 1256 * 1257 * @og.tag 1258 * 1259 * @param max メモリの最大値 1260 */ 1261 public void setMax( final String max ) { 1262 this.max = nval( getRequestParameter( max ) , this.max ); 1263 } 1264 1265 /** 1266 * 【TAG】y軸の最小値を指定します(xscaleTypeがlinearの場合に有効)。 1267 * 1268 * @og.tag 1269 * 1270 * @param min メモリの最小値 1271 */ 1272 public void setMin( final String min ) { 1273 this.min = nval( getRequestParameter( min ) , this.min ); 1274 } 1275 1276 /** 1277 * 【TAG】y軸のメモリ幅を指定します(xscaleTypeがlinearの場合に有効)。 1278 * 1279 * @og.tag 1280 * 1281 * @param stepSize y軸のメモリ幅 1282 */ 1283 public void setStepSize( final String stepSize ) { 1284 this.stepSize = nval( getRequestParameter( stepSize ) , this.stepSize ); 1285 } 1286 1287 /** 1288 * 【TAG】チャートクリック時のイベントを指定します。 1289 * 1290 * @og.tag 1291 * 下記の値が引数として渡されます。 1292 * 1293 * event:イベント情報 1294 * obj:クリックされたオブジェクトの情報 1295 * 1296 * @param click チャートクリック時のイベントを指定 1297 */ 1298 public void setOnClick( final String click ) { 1299 onClick = nval( getRequestParameter( click ),onClick ); 1300 } 1301 1302 /** 1303 * 【TAG】プラグイン定義された関数を指定します。 1304 * 1305 * @og.tag 1306 * プラグインは、plugins: [pinFunc], 形式で追加されます。 1307 * この属性での指定時は、[]は、不要で、カンマ区切りの関数名を並べます。 1308 * 外部に、var pinFunc = { afterDatasetsDraw: function(chart, options) { ・・・ } }; 1309 * 形式のプラグインを指定することで、個別に読ませることが可能です。 1310 * なお、すべてのチャートに、同一のプラグインを指定する場合は、この属性ではなく、 1311 * Chart.plugins.register({ afterDatasetsDraw: function(chart, options) { ・・・ } }); 1312 * 形式で、プラグイン登録 1313 * 1314 * @og.rev 6.9.9.2 (2018/09/18) プラグイン定義された関数を指定します。 1315 * 1316 * @param attri 追加属性の値 1317 */ 1318 public void setPlugins( final String attri ) { 1319 plugins = nval( getRequestParameter( attri ),plugins ); 1320 } 1321 1322 /** 1323 * 【TAG】点のスタイル属性を使用するかどうか[true/false]を指定します(初期値:false)。 1324 * 1325 * @og.tag 1326 * 具体的なスタイルは、jsChartDataタグで、指定します。 1327 * 複数データの場合、片方だけ指定したい場合は、usePointStyle="true" にしておき、 1328 * jsChartDataタグ側で、指定したいほうだけ、pointStyle属性を設定してください。 1329 * 1330 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1331 * 1332 * @param usePstyle 点のスタイル属性を使用するかどうか [true:使用する/false:使用しない] 1333 */ 1334 public void setUsePointStyle( final String usePstyle ) { 1335 usePointStyle = nval( getRequestParameter( usePstyle ),usePointStyle ); 1336 } 1337 1338 /** 1339 * 【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID。 1340 * 1341 * @og.tag 1342 * 1343 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1344 * 1345 * @param tableId テーブルID 1346 */ 1347 public void setTableId( final String tableId ) { 1348// this.tableId = getRequestParameter( tableId ); 1349 this.tableId = nval( getRequestParameter( tableId ) , this.tableId ); 1350 } 1351 1352 /** 1353 * 【TAG】マーカーラインの設定値をCSV形式で複数指定します。 1354 * 1355 * @og.tag 1356 * annotation オプションに値を設定します。 1357 * X軸に平行に固定値の線を引きます。線の値を、CSV形式で指定します。 1358 * type: 'line',scaleID: 'y-axis-0',mode: 'horizontal',borderWidth: 2 固定です。 1359 * 1360 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1361 * 1362 * @param mkVals マーカーラインの設定値(CSV形式) 1363 */ 1364 public void setMarkValues( final String mkVals ) { 1365 markValues = nval( getRequestParameter( mkVals ) , markValues ); 1366 } 1367 1368 /** 1369 * 【TAG】マーカーラインの色をCSV形式で複数指定します。 1370 * 1371 * @og.tag 1372 * annotation オプションに値を設定します。 1373 * X軸に平行に固定値の線を引きます。線の色を、CSV形式で指定します。 1374 * markValues が指定されており、markColorsが指定されていない場合は、青色(BLUE)になります。 1375 * 1376 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1377 * 1378 * @param mkCols マーカーラインの色(CSV形式) 1379 */ 1380 public void setMarkColors( final String mkCols ) { 1381 markColors = nval( getRequestParameter( mkCols ) , markColors ); 1382 } 1383 1384 /** 1385 * 【TAG】マーカーラインのラベルをCSV形式で複数指定します。 1386 * 1387 * @og.tag 1388 * annotations の label 属性 の content 属性に値をセットします。 1389 * label 属性は、enabled: 'true',position: 'left',backgroundColor: 'rgba(0,0,0,0)', 1390 * fontSize: 10, は固定で、fontColor は、markColors 属性で指定した 1391 * マーカーラインの色を使用します。 1392 * 1393 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1394 * 1395 * @param mklbls マーカーラインのラベル(CSV形式) 1396 */ 1397 public void setMarkLbls( final String mklbls ) { 1398 markLbls = nval( getRequestParameter( mklbls ) , markLbls ); 1399 } 1400 1401 /** 1402 * 【TAG】マーカーラインのラベル表示位置の上下方向を調整します(初期値:-6)。 1403 * 1404 * @og.tag 1405 * annotation オプションに値を設定します。 1406 * annotations の label 属性の yAdjust に値をセットします。 1407 * これは、ラインに対するラベルの位置を表します。+で、下側、-で上側に表示します。 1408 * 初期値は、-6 で、ラインの上側に来るように調整しています。 1409 * 1410 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1411 * 1412 * @param mkAjst マーカーラインのラベル表示位置の上下方向調整 1413 */ 1414 public void setMarkAdjust( final String mkAjst ) { 1415 markAdjust = nval( getRequestParameter( mkAjst ) , markAdjust ); 1416 } 1417 1418 /** 1419 * 【TAG】ズーム処理を使用するかどうか[true/false]を指定します。 1420 * 1421 * @og.tag 1422 * annotation オプションにpan と zoom を設定します。 1423 * これは、chartjs-plugin-zoom.js を使用します。 1424 * 初期値は、false:使用しないです。 1425 * 1426 * <ul> 1427 * <li>ホイールでxy軸の拡大、縮小 </li> 1428 * <li>canvasをクリックでzoomリセット </li> 1429 * <li>クリックした状態で移動で、パン動作 </li> 1430 * <li>数値(日付)スケールの方向のみ可能 </li> 1431 * </ul> 1432 * 1433 * @og.rev 6.8.5.0 (2018/01/09) 新規追加 1434 * 1435 * @param zoom ズーム処理を使用するかどうか [true:使用する/false:使用しない] (初期値:false)。 1436 */ 1437 public void setUseZoom( final String zoom ) { 1438 useZoom = nval( getRequestParameter( zoom ) , useZoom ); 1439 } 1440 1441 /** 1442 * 【TAG】横幅の動的設定カラムを設定します。 1443 * 1444 * @og.tag 1445 * 1446 * @og.rev 5.9.19.0 (2017/04/07) 追加 1447 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1448 * 1449 * @param widthEventColumn 横幅の動的設定カラム 1450 */ 1451 public void setWidthEventColumn( final String widthEventColumn ) { 1452// this.widthEventColumn = getRequestParameter( widthEventColumn ); 1453 this.widthEventColumn = nval( getRequestParameter( widthEventColumn ),this.widthEventColumn ); 1454 } 1455 1456 /** 1457 * 【TAG】縦幅の動的設定カラムを設定します。 1458 * 1459 * @og.tag 1460 * 1461 * @og.rev 5.9.19.0 (2017/04/07) 追加 1462 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1463 * 1464 * @param heightEventColumn 縦幅の動的設定カラム 1465 */ 1466 public void setHeightEventColumn( final String heightEventColumn ) { 1467 this.heightEventColumn = getRequestParameter( heightEventColumn ); 1468 this.heightEventColumn = nval( getRequestParameter( heightEventColumn ),this.heightEventColumn ); 1469 } 1470 1471 /** 1472 * 【TAG】minの動的設定カラムを設定します。 1473 * 1474 * @og.tag 1475 * 1476 * @og.rev 5.9.19.0 (2017/04/07) 追加 1477 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1478 * 1479 * @param minEventColumn minの動的設定カラム 1480 */ 1481 public void setMinEventColumn( final String minEventColumn ) { 1482// this.minEventColumn = getRequestParameter( minEventColumn ); 1483 this.minEventColumn = nval( getRequestParameter( minEventColumn ),this.minEventColumn ); 1484 } 1485 1486 /** 1487 * 【TAG】maxの動的設定カラムを設定します。 1488 * 1489 * @og.tag 1490 * 1491 * @og.rev 5.9.19.0 (2017/04/07) 追加 1492 * @og.rev 6.9.9.3 (2018/09/25) nvalを入れて、初期値を設定します。 1493 * 1494 * @param maxEventColumn maxの動的設定カラム 1495 */ 1496 public void setMaxEventColumn( final String maxEventColumn ) { 1497// this.maxEventColumn = getRequestParameter( maxEventColumn ); 1498 this.maxEventColumn = nval( getRequestParameter( maxEventColumn ),this.maxEventColumn ); 1499 } 1500 1501 /** 1502 * 【TAG】データが0の場合、使用しない(除外する)かどうかを指定します[true:0データを除外する](初期値:false)。 1503 * 1504 * @og.tag 1505 * JSON データを作成して、JsChartに渡しますが、このフラグを true に設定すると 1506 * 0 または、null(空文字列)のデータを出力しません。 6.8.3.0 (2017/11/27) 1507 * グラフ系で、0 が、ありえない値として設定されている場合に、使用すると、 1508 * 出力するデータ量を抑えることが出来ます。 1509 * 1510 * @og.rev 6.7.7.0 (2017/03/31) useZeroDataOmit属性の追加 1511 * 1512 * @param useZeroOmit データが0の場合、使用しないかどうか 1513 */ 1514 public void setUseZeroDataOmit( final String useZeroOmit ) { 1515 this.useZeroDataOmit = nval( getRequestParameter( useZeroOmit ) , this.useZeroDataOmit ); 1516 } 1517 1518// /** 1519// * 【TAG】データを、間引いて表示します。(初期値:0:間引かない)。 1520// * 1521// * @og.tag 1522// * データ量が非常に多いと、JavaScriptの表示が遅くなります。 1523// * そこで、指定のデータ量を間引きます。 1524// * 単純に間引くと、重要なデータが消失する可能性があるため、間引いている間の 1525// * データは、最大値と最小値の2つの配列に設定し、そのデータを表示します。 1526// * yscaleType が category か、xscaleType が linear の場合は、間引き処理は行いません。 1527// * マイナスを指定すると、自動設定になります。 1528// * 自動設定は、{@og.value #AUTO_SKIP_MIN_COUNT} 以上の行数の場合、 1529// * {@og.value #AUTO_SKIP_SIZE} になるように、間引き件数を決めます。 1530// * 初期値は、0:間引かないです。 1531// * 1532// * @og.rev 6.9.2.0 (2018/03/05) skipDataNum 属性の追加 1533// * 1534// * @param skipDataNum データを、間引く数 1535// * @see #AUTO_SKIP_MIN_COUNT 1536// * @see #AUTO_SKIP_SIZE 1537// */ 1538// public void setSkipDataNum( final String skipDataNum ) { 1539// this.skipDataNum = nval( getRequestParameter( skipDataNum ) , this.skipDataNum ); 1540// } 1541 1542 /** 1543 * 【TAG】JSON出力で、値出力にレンデラを利用するかどうかを指定します。 1544 * 1545 * @og.tag 1546 * JSONのデータのレンデラー変換を行うかどうか。 1547 * 数値部分にはレンデラー変換は行いません。ラベル文字に行います。 1548 * 指定しない場合は使用しない(false)です。 1549 * 1550 * @og.rev 6.7.9.0 (2017/04/28) useRenderer 追加 1551 * 1552 * @param usernd レンデラーを利用するかどうか 1553 */ 1554 public void setUseRenderer( final String usernd ) { 1555 this.useRenderer = nval( getRequestParameter( usernd ) , this.useRenderer ); 1556 } 1557 1558 /** 1559 * 【TAG】検索結果をこのカラムでソートし直します(初期値:null)。 1560 * 1561 * @og.tag 1562 * query で検索した結果を、JsChartで利用する場合、チャート上のソート順と、 1563 * リストや、別のチャートでの表示準が異なる場合に、このカラムで、ソートしなおします。 1564 * 通常は、labelColumn と同じ値でソートすることで、X軸の順番に表示されます。 1565 * 1566 * @og.rev 6.8.0.0 (2017/06/02) sortColumn 追加 1567 * 1568 * @param sortClm このカラムでソートし直す 1569 */ 1570 public void setSortColumn( final String sortClm ) { 1571 sortColumn = nval( getRequestParameter( sortClm ) , sortColumn ); 1572 } 1573 1574 /** 1575 * 【TAG】optionsの属性に、その他オプションを追加指定します。 1576 * 1577 * @og.tag 1578 * optionsの属性に、その他オプションを追加指定します。 1579 * 1580 * @param attri オプションの値 1581 */ 1582 public void setOptionAttributes( final String attri ) { 1583 optionAttributes = nval( getRequestParameter( attri ),optionAttributes ); 1584 } 1585 1586 /** 1587 * 【TAG】chartの属性に、TLDで未定義の属性を追加指定します。 1588 * 1589 * @og.tag 1590 * chartの属性に、TLDで未定義の属性を追加指定します。 1591 * これは、TLDで未定義の属性を、chart.js で使用する場合に、引数の属性をそのまま、追加します。 1592 * 1593 * @og.rev 6.9.9.2 (2018/09/18) chartの属性に、TLDで未定義の属性を追加指定します。 1594 * 1595 * @param attri 追加属性の値 1596 */ 1597 public void setChartAttributes( final String attri ) { 1598 chartAttributes = nval( getRequestParameter( attri ),chartAttributes ); 1599 } 1600 1601 /** 1602 * このオブジェクトの文字列表現を返します。 1603 * 基本的にデバッグ目的に使用します。 1604 * 1605 * @og.rev 2017/03/28 widthEventColumn,heightEventColumn,minEventColumn,maxEventColumnを追加 1606 * @og.rev 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1607 * 1608 * @return このクラスの文字列表現 1609 */ 1610 @Override 1611 public String toString() { 1612 return ToString.title( this.getClass().getName() ) 1613 .println( "VERSION" , VERSION ) 1614 .println( "id" , id ) 1615 .println( "tableId" , tableId ) 1616 .println( "chartType" , chartType ) 1617 .println( "width" , width ) 1618 .println( "height" , height ) 1619 .println( "max" , max ) 1620 .println( "min" , min ) 1621 .println( "stepSize" , stepSize ) 1622 .println( "barWidthPer" , barWidthPer ) 1623// .println( "timeUnit" , timeUnit ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1624// .println( "timeUnitStepSize" , timeUnitStepSize ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1625// .println( "timeLblFormat" , timeLblFormat ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1626// .println( "timeSetFormat" , timeSetFormat ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1627// .println( "timeMax" , timeMax ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1628// .println( "timeMin" , timeMin ) // 6.9.9.3 (2018/09/25) xscaleType の time 属性廃止。 1629 .println( "title" , title ) 1630 .println( "titlePosition" , titlePosition ) 1631 .println( "xlabel" , xlabel ) 1632 .println( "ylabel" , ylabel ) 1633 .println( "legendPosition" , legendPosition ) 1634 .println( "legendDisplay" , legendDisplay ) 1635 .println( "yscaleCallback" , yscaleCallback ) 1636 .println( "xscaleCallback" , xscaleCallback ) 1637 .println( "xscaleType" , xscaleType ) 1638 .println( "xmax" , xmax ) 1639 .println( "xmin" , xmin ) 1640 .println( "xstepSize" , xstepSize ) 1641 .println( "yscaleType" , yscaleType ) 1642 .println( "ycategoryList" , ycategoryList ) 1643 .println( "widthEventColumn" , widthEventColumn ) // 2017/03/28 追加 1644 .println( "heightEventColumn" , heightEventColumn ) // 2017/03/28 追加 1645 .println( "minEventColumn" , minEventColumn ) // 2017/03/28 追加 1646 .println( "maxEventColumn" , maxEventColumn ) // 2017/03/28 追加 1647 .println( "optionAttributes" , optionAttributes ) 1648 .fixForm().toString(); 1649 } 1650}