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 */
016 package org.opengion.hayabusa.io;
017
018 import org.opengion.fukurou.util.StringUtil;
019 import org.opengion.hayabusa.common.HybsSystem;
020 import org.opengion.hayabusa.common.HybsSystemException;
021 import org.opengion.hayabusa.db.DBTableModel;
022
023 import java.util.List;
024 import java.util.ArrayList;
025 import java.util.Arrays;
026 import java.awt.Color;
027 import java.sql.Connection;
028 import java.sql.SQLException;
029 import java.text.NumberFormat;
030 import java.text.DecimalFormat; // 5.5.2.1 (2012/05/07)
031 import java.text.DecimalFormatSymbols; // 5.5.2.1 (2012/05/07)
032 import java.text.FieldPosition; // 5.5.2.1 (2012/05/07)
033
034 import org.jfree.data.general.Dataset;
035 import org.jfree.data.general.DefaultValueDataset;
036 import org.jfree.data.general.ValueDataset;
037 import org.jfree.chart.plot.ValueMarker;
038 import org.jfree.chart.axis.NumberAxis;
039 import org.jfree.chart.axis.NumberTickUnit;
040 import org.jfree.chart.renderer.category.CategoryItemRenderer;
041 import org.jfree.chart.renderer.category.BarRenderer;
042 import org.jfree.chart.renderer.category.LineAndShapeRenderer;
043 import org.jfree.chart.labels.CategoryItemLabelGenerator;
044 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
045 import org.jfree.chart.urls.CategoryURLGenerator;
046 import org.jfree.ui.RectangleInsets;
047 import org.jfree.ui.TextAnchor;
048
049 import org.jfree.chart.plot.MeterPlot; // 5.7.8.0 (2014/07/04)
050 import org.jfree.chart.plot.ThermometerPlot; // 5.7.8.0 (2014/07/04)
051 import org.jfree.chart.plot.CompassPlot; // 5.7.8.0 (2014/07/04)
052 import org.jfree.chart.plot.Plot; // 5.7.8.0 (2014/07/04)
053 import java.awt.BasicStroke; // 5.7.8.0 (2014/07/04)
054 import org.jfree.data.Range; // 5.7.8.0 (2014/07/04)
055 import org.jfree.chart.plot.MeterInterval; // 5.7.8.0 (2014/07/04)
056 import org.jfree.chart.plot.DialShape; // 5.7.8.0 (2014/07/04)
057
058 /**
059 * ChartDataset は、Dataset および、JFreeChart の個別属?を管?て???タ管?ラスです?
060 * JFreeChart のグラフ合成機?のための、?別のグラフ描画属?を管?て?す?
061 * ??、引数の???JFreeChart の?ブジェクトへの変換なども行って?す?
062 *
063 * @version 0.9.0 2007/06/21
064 * @author Kazuhiko Hasegawa
065 * @since JDK1.1,
066 */
067 public class ChartDataset {
068
069 private Dataset dataset = null; // Dataset オブジェク?
070 private String query = null; // 実行クエリー
071 private String chartType = null; // チャート?種?
072 private String needleType = null; // Needleの種?
073 private boolean baseLegend = true; // シリーズ単位?凡?の表示可否
074 private String valueLabel = null;
075 private double[] markValues = null; // doubleの配?
076 private Color[] markColors = new Color[] { Color.RED }; // Colorの配?
077 private Color[] markOverColors = null; // 4.0.3.0 (2008/01/07) マ?カーラインの?色
078 private boolean useMarkAnchor = true; // 4.1.1.0 (2008/02/04) 設定?をラベル表示するかど?
079 private int dynamicOCNo = -1; // 4.1.1.0 (2008/02/04) 動的なマ?カーラインの基準シリーズ番号
080 private int dynamicOCadrs = -1; // 4.1.1.0 (2008/02/21) 動的なマ?カーラインの基準番号
081 private String lowerBound = null; // double
082 private String upperBound = null; // double
083 private String tickSize = null; // double 4.0.3.0 (2008/01/07)
084 private boolean useGradient = false;
085 private boolean shapesVisible = true;
086 private Color[] shapeColors = null; // 4.0.3.0 (2008/01/07) ??タ毎にShapeを?り替える時?色??
087 private String shapeScale = null; // 4.1.1.0 (2008/02/04) 基本形 Shape の表示倍率(double)
088 private boolean useDottedLine = false;
089 private Color[] seriesColors = null; // シリーズに対応した色??
090 private boolean isLabelsVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のラベルを表示するかど?
091 private boolean isMarksVisible = true; // 4.0.2.0 (2007/12/20) (縦軸)のマ?カーを表示するかど?
092 private boolean isItemValVisible= false; // 4.1.1.0 (2008/02/04) ??タの値(itemText)を表示するかど?
093 private boolean isItemLastVisible= false; // 4.1.2.0 (2008/03/12) ??タの値(itemText)で??み表示するかど?
094 private boolean useItemLabelSep = true; // 4.1.2.0 (2008/03/12) ??タの値(itemText)の表示に桁区??を使用するかど?
095 private String barWidth = null; // 4.0.3.0 (2008/01/07) バ??double)
096 private String maxBarWidth = null; // 4.0.2.0 (2007/12/20) バ????値(0.0??.0)
097 private String itemMargin = null; // 4.0.2.0 (2007/12/20) バ?アイ?のマ?ジン(0.0??.0)
098 private String visibleLimit = null; // 4.0.3.0 (2008/01/07) 表示下限値(これ以下???タは未表示)
099 private String valueInset = null; // 4.0.3.0 (2008/01/07) 縦軸表示領域INSET値
100 private double domainMargin = 0.0; // 4.1.1.0 (2008/02/14) グラフ?書き?し位置の調整比率
101
102 private String timeFormatType = null; // 5.5.2.1 (2012/05/07) 時刻の表示方?E1/E2/E3/H1/H2/H3)
103 private boolean useVerticalLabels = false; // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書?false/縦書?true)
104
105 /**
106 * Connection と query ??から、Dataset オブジェクトを作?します?
107 *
108 * setChartType( String ) で?されたチャートタイプに応じて、Datasetオブジェク?
109 * を構築します?
110 * Dataset クラスは?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX の??
111 * ChartFactory クラスのチャートタイプ変換表に基づ?求めます?
112 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です?
113 * ※ Value は、conn ?sql を使用して?せん。?は、markValues を使用して?す?
114 * これは、現状の暫定方法であり、今後?変わる可能性があります?
115 *
116 * @og.rev 4.0.0.0 (2007/11/28) new Double(double) ?Double.valueOf(double) 変更
117 *
118 * @param conn Datasetの取得?のコネクション
119 * @param sql 取得するクエリー??
120 * @throws SQLException ??タベ?ス実行エラーが発生した??
121 */
122 public void makeDataset( final Connection conn,final String sql ) throws SQLException {
123 dataset = ChartFactory.newDataset( conn,sql,chartType );
124 query = sql ;
125
126 // 暫定的対応?本当?、SQL を実行してそ?値をセ?すべ?
127 if( dataset instanceof DefaultValueDataset ) {
128 if( markValues != null && markValues.length > 0 ) {
129 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
130 }
131 else {
132 String errMsg = "markValues が指定されて?せん?;
133 throw new HybsSystemException( errMsg );
134 }
135 }
136 }
137
138 /**
139 * DBTableModelオブジェクトから?Dataset オブジェクトを作?します?
140 *
141 * setChartType( String ) で?されたチャートタイプに応じて、Datasetオブジェク?
142 * を構築します?
143 *
144 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です?
145 * ※ Value は、DBTableModel を使用して?せん。?は、markValues を使用して?す?
146 * これは、現状の暫定方法であり、今後?変わる可能性があります?
147 *
148 * @og.rev 5.3.0.0 (2010/12/01) 新規追?
149 *
150 * @param table Datasetの取得?の??ブルモ?
151 */
152 public void makeDataset( final DBTableModel table ) {
153 dataset = ChartFactory.newDataset( table,chartType );
154
155 // 暫定的対応?本当?、SQL を実行してそ?値をセ?すべ?
156 if( dataset instanceof DefaultValueDataset ) {
157 if( markValues != null && markValues.length > 0 ) {
158 ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
159 }
160 else {
161 String errMsg = "markValues が指定されて?せん?;
162 throw new HybsSystemException( errMsg );
163 }
164 }
165 }
166
167 /**
168 * NumberAxis オブジェクトを作?します?
169 *
170 * NumberAxis オブジェクト?、Value(縦軸)の属?を設定する為に使用され?
171 * オブジェクトです?
172 * これに、各種属?を設定して、?を返します?
173 * 属?としては、isLineVisible、isLabelsVisible、isMarksVisible?
174 * range(lowerBound、upperBound) です?
175 *
176 * @og.rev 4.0.2.0 (2007/12/20) 新規追?
177 * @og.rev 4.0.3.0 (2008/01/07) 縦軸レンジを?別設定?チック??
178 * @og.rev 4.1.1.0 (2008/02/04) HybsNumberAxis 採用
179 * @og.rev 4.1.1.0 (2008/02/04) setAxisLineVisible を?isMarksVisible 値で設定する?
180 * @og.rev 5.5.2.1 (2012/05/07) timeFormatType 、useVerticalLabels 属?を追?る?
181 *
182 * @return 縦軸の属?(NumberAxisオブジェク?
183 */
184 protected NumberAxis makeNumberAxis() {
185 NumberAxis axis = new HybsNumberAxis( valueLabel );
186
187 // 縦軸レンジ??軸設?
188 if( lowerBound != null ) {
189 axis.setLowerBound( Double.parseDouble( lowerBound ) );
190 }
191
192 if( upperBound != null ) {
193 axis.setUpperBound( Double.parseDouble( upperBound ) );
194 }
195
196 if( tickSize != null ) {
197 axis.setTickUnit( new NumberTickUnit( Double.parseDouble( tickSize ) ) );
198 }
199
200 axis.setTickLabelsVisible( isLabelsVisible );
201 axis.setTickMarksVisible ( isMarksVisible );
202 axis.setAxisLineVisible ( isMarksVisible ); // 4.1.1.0 (2008/02/04)
203
204 if( valueInset != null ) {
205 double rightInset = Double.parseDouble( valueInset );
206 RectangleInsets base = axis.getTickLabelInsets();
207 RectangleInsets inset = new RectangleInsets(
208 base.getUnitType(), // UnitType unitType
209 base.getTop(), // double top
210 base.getLeft(), // double left
211 base.getBottom(), // double bottom
212 base.getRight() + rightInset // double right
213 );
214 axis.setTickLabelInsets( inset ) ;
215 }
216
217 // 5.5.2.1 (2012/05/07) 時刻の表示方?E1/E2/E3/H1/H2/H3)
218 if( timeFormatType != null ) {
219 axis.setNumberFormatOverride( new HybsTimeFormat( timeFormatType ) );
220 }
221
222 // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書?false/縦書?true)
223 if( useVerticalLabels ) {
224 axis.setVerticalTickLabels( true ); // 処?には冗長?
225 }
226
227 return axis;
228 }
229
230 /**
231 * 検索を行う クエリー??を返します?
232 *
233 * これは、makeDataset( Connection ,String ) メソ?で?した?
234 * sql 属?の設定?そ?も?です?
235 *
236 * @return 取得するクエリー??
237 */
238 public String getQuery() { return query; }
239
240 /**
241 * Dataset オブジェクトを取得します?
242 *
243 * makeDataset( Connection,String ) で、予めオブジェクトを構築しておく
244 * ?があります?
245 * Dataset クラスは?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX の??
246 * ChartFactory クラスのチャートタイプ変換表に基づ?求めます?
247 * 現状は、Category , Pie , XY の?種類と、Value が指定可能です?
248 *
249 * @return Datasetオブジェク?
250 * @see #makeDataset( Connection ,String )
251 */
252 protected Dataset getDataset() { return dataset; }
253
254 /**
255 * Dataset オブジェクトを作?する時?チャートタイプを?します?
256 *
257 * チャートタイ?は、外部からチャートを?する?に便利なように、キー?
258 * されて?す?こ?キーに基づ?、ChartFactory クラスの
259 * チャートタイプ変換表に基づ?、レン?ー????タセ?を作?します?
260 *
261 * @param type チャートタイ?
262 */
263 public void setChartType( final String type ) {
264 if( type != null && type.length() > 0 ) {
265 chartType = type;
266 }
267 }
268
269 /**
270 * Dataset オブジェクトを作?する時?Needleタイプを?します?
271 *
272 * Needleタイ?は、MeterPlot,Compassチャートを使用する場合に?します?
273 *
274 * MeterPlot
275 * org.jfree.chart.plot.DialShape の?キ??ー??として、CHORD,CIRCLE,PIE が指定可能です?
276 * 初期値は、CIRCLE です?
277 *
278 * Compass
279 * org.jfree.chart.needle.MeterNeedle の?キ??ー??として、下記??種類が?可能です?
280 * ??、Arrow,Line,Long,Pin,Plum,Pointer,Ship,Wind,Arrow,MiddlePin と???です?
281 * 初期値は、Pointer です?
282 *
283 * 0 = ArrowNeedle;
284 * 1 = LineNeedle;
285 * 2 = LongNeedle;
286 * 3 = PinNeedle;
287 * 4 = PlumNeedle;
288 * 5 = PointerNeedle;
289 * 6 = ShipNeedle;
290 * 7 = WindNeedle;
291 * 8 = ArrowNeedle;
292 * 9 = MiddlePinNeedle;
293 *
294 * @og.rev 5.7.8.0 (2014/07/04) 新規追?
295 *
296 * @param type Needleタイ?
297 */
298 public void setNeedleType( final String type ) {
299 if( type != null && type.length() > 0 ) {
300 needleType = type;
301 }
302 }
303
304 /**
305 * Dataset オブジェクトを作?する時?チャートタイプを取得します?
306 *
307 * チャートタイ?は、外部からチャートを?する?に便利なように、キー?
308 * されて?す?こ?キーに基づ?、ChartFactory クラスの
309 * チャートタイプ変換表に基づ?、レン?ー????タセ?を作?します?
310 *
311 * @return チャートタイ?
312 */
313 protected String getChartType() { return chartType; }
314
315 /**
316 * シリーズ単位?凡?の表示可否を設定します?
317 *
318 * @param baseLeg シリーズ単位?凡?の表示可否
319 */
320 public void setBaseLegend( final boolean baseLeg ) {
321 baseLegend = baseLeg;
322 }
323
324 /**
325 * Renderer 関連の共通インターフェースを返します?
326 *
327 * setChartType( String )で設定された、チャートタイプに応じた?レン?ー?
328 * 返します?
329 * 対応表は、ChartFactory クラスに持って?す?
330 * 基本?は、チャートタイ?は、この、レン?ー名称から決定して?す?
331 *
332 * @og.rev 4.1.1.0 (2008/02/04) useDynamicOC , isItemValVisible , shapeScale 属?追?
333 * @og.rev 4.1.1.0 (2008/02/04) クリ?ブル・マップ?設定を移動?serNo 引数追?
334 * @og.rev 4.1.1.0 (2008/02/04) 返す型を CategoryItemRenderer に変更
335 * @og.rev 4.1.1.0 (2008/02/16) HybsStackedBarRenderer に domainMargin を設?
336 * @og.rev 4.1.1.0 (2008/02/19) Shapes の設定をこちらに移動?
337 * @og.rev 4.1.2.0 (2008/03/12) isItemLastVisible の設?
338 *
339 * @param serNo シリアルNo
340 * @param urlGen CategoryURLGeneratorオブジェク?
341 *
342 * @return レン?ーの共通インターフェース
343 * @see org.jfree.chart.renderer.category.CategoryItemRenderer
344 * @see org.jfree.chart.renderer.xy.XYItemRenderer
345 */
346 protected CategoryItemRenderer getRenderer( final int serNo , final CategoryURLGenerator urlGen ) {
347 TypeRenderer typeRen = ChartFactory.getTypeRenderer( chartType );
348 CategoryItemRenderer rend = (CategoryItemRenderer)typeRen.getRenderer();
349
350 // 4.1.1.0 (2008/02/19) LineAndShapeRenderer オブジェクト?場合?設?
351 if( rend instanceof LineAndShapeRenderer ) {
352 LineAndShapeRenderer lsRend = (LineAndShapeRenderer)rend;
353
354 // シェー?四?表示。serNo ??表示は、?別に行います?
355 lsRend.setBaseShapesVisible( shapesVisible );
356 if( serNo >= 0 ) {
357 lsRend.setSeriesShapesVisible( serNo,true );
358 }
359
360 // 4.1.1.0 (2008/02/04) 繰返しshapeの開始番号(初期値:??
361 ShapeList shapeList = new ShapeList();
362 for( int i=0; i<shapeList.size(); i++ ) {
363 lsRend.setSeriesShape( i,shapeList.getShape(i) );
364 }
365 }
366
367 // 4.0.3.0 (2008/01/07) HybsLineRenderer 特別処?
368 if( rend instanceof HybsLineRenderer ) {
369 HybsLineRenderer hyRend = (HybsLineRenderer)rend ;
370 if( shapeColors != null ) {
371 hyRend.setShapeColors( shapeColors );
372 }
373
374 // 4.1.1.0 (2008/02/04) shapeの大きさの倍率(初期値:null)
375 hyRend.setShapeScale( shapeScale );
376
377 // 縦軸マ?カーの?時Shape色??未使用時? null)
378 if( markOverColors != null ) {
379 hyRend.setValueMarkOverColors( getValueMarkOverColors(),dynamicOCNo );
380 }
381
382 // 表示下限値(これ以下???タは未表示)の値(double)を指?
383 if( visibleLimit != null ) {
384 hyRend.setVisibleLimit( Double.valueOf( visibleLimit ) );
385 }
386 }
387
388 // 4.0.2.0 (2007/12/20) BarRenderer オブジェクト?場合にマ?ジン等を設定します?
389 if( rend instanceof BarRenderer ) {
390 BarRenderer barRend = (BarRenderer)rend ;
391
392 // 棒?間を表示領域を1として小数点以下?数値で?設定す?0.0??.0)
393 if( itemMargin != null ) {
394 double margin = Double.parseDouble( itemMargin );
395 barRend.setItemMargin( margin ) ;
396 }
397
398 // 棒??設定す?示領域を1として小数点以下?数値で?設定す?0.0??.0)
399 if( maxBarWidth != null ) {
400 barRend.setMaximumBarWidth( Double.parseDouble( maxBarWidth ) ) ;
401 }
402 }
403
404 // 4.1.1.0 (2008/02/16) HybsStackedBarRenderer オブジェクト?場合に domainMargin を設定します?
405 if( rend instanceof HybsStackedBarRenderer ) {
406 HybsStackedBarRenderer stBarRend = (HybsStackedBarRenderer)rend ;
407
408 stBarRend.setDomainMargin( domainMargin ) ;
409 }
410
411 // シリーズ単位?凡?の表示可否
412 rend.setBaseSeriesVisibleInLegend( baseLegend );
413
414 // 4.1.1.0 (2008/02/04) ??タの値(itemText)を表示するかど?
415 if( isItemValVisible ) {
416 // 4.1.2.0 (2008/03/12) 桁区??を使用するかど?
417 NumberFormat numForm = NumberFormat.getInstance();
418 numForm.setGroupingUsed( useItemLabelSep );
419
420 CategoryItemLabelGenerator labelGen
421 = new StandardCategoryItemLabelGenerator(
422 StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
423 numForm
424 );
425 rend.setBaseItemLabelGenerator( labelGen );
426
427 if( serNo >= 0 ) {
428 rend.setSeriesItemLabelsVisible( serNo,true );
429 }
430 else {
431 rend.setBaseItemLabelsVisible( true );
432 }
433 // 4.1.1.0 (2008/02/04) 動的なマ?カーラインを使用する場合?
434 // ??番号は閾値なので、表示しません?
435 if( dynamicOCNo >= 0 ) {
436 rend.setSeriesItemLabelsVisible( dynamicOCNo,false ); // 閾値
437 }
438
439 // 4.1.2.0 (2008/03/12) isItemLastVisible の設?
440 if( isItemLastVisible && rend instanceof HybsDrawItem ) {
441 ((HybsDrawItem)rend).setItemLabelLastVisible( true ) ;
442 }
443 }
444
445 // クリ?ブル・マッ?
446 if( urlGen != null ) {
447 if( serNo >= 0 ) {
448 rend.setSeriesItemURLGenerator( serNo,urlGen );
449 }
450 else {
451 rend.setBaseItemURLGenerator( urlGen );
452 }
453 }
454
455 return rend;
456 }
457
458 /**
459 * 縦軸の表示名称を指定します?
460 *
461 * @param valLbl 縦軸の表示名称
462 */
463 public void setValueLabel( final String valLbl ) {
464 if( valLbl != null && valLbl.length() > 0 ) {
465 valueLabel = valLbl;
466 }
467 }
468
469 /**
470 * 縦軸の表示名称を取得します?
471 *
472 * @return 縦軸の表示名称
473 */
474 protected String getValueLabel() { return valueLabel; }
475
476 /**
477 * マ?カーラインの設定?配?を指定します?
478 *
479 * ??値にマ?カーラインを引きます?
480 * 色は、setMarkColor( String ) で?します?
481 * markColors と、あわせて設定する?があります?
482 * markColorsが??されて???合?、Color.RED で マ?カーされます?
483 * dynamicOCNo を使用する場合?、そのValues の並びの?に?
484 * "G" と???を設定して下さ??
485 * 例?000,G 基準1??000の直線?基準2?、グラ?と?意味?
486 *
487 * @og.rev 4.1.1.0 (2008/02/21) 基準ラインにグラフを使用する場合?位置??
488 *
489 * @param mkVal マ?カーラインの設定?配?
490 * @see #setMarkColors( String[] )
491 */
492 public void setMarkValues( final String[] mkVal ) {
493 if( mkVal != null && mkVal.length > 0 ) {
494 int size = mkVal.length;
495 markValues = new double[size];
496 for( int i=0; i<size; i++ ) {
497 if( "G".equals( mkVal[i] ) ) {
498 dynamicOCadrs = i;
499 markValues[i] = 0.0;
500 }
501 else {
502 markValues[i] = Double.parseDouble( mkVal[i] );
503 }
504 }
505 }
506 }
507
508 /**
509 * マ?カーラインの色を?列指定します?
510 *
511 * マ?カーラインとは、縦軸設定?ラインの事で、縦軸の設定?(markValues)に
512 * 横方向にラインを付与します?こ?ラインの色を?カンマ区?形式で
513 * ?します?
514 * markValues と、あわせて設定する?があります?
515 * 個数が異なる?合?、markValues が優先され?無??場合?、Color.REDで
516 * 表示されます?
517 *
518 * <pre>
519 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
520 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE)
521 * #XXXXXX形式?16bitRGB表?でも指定可能です?
522 * </pre>
523 *
524 * @param mkCol マ?カーラインの色配?
525 * @see java.awt.Color#BLACK
526 * @see #setMarkValues( String[] )
527 */
528 public void setMarkColors( final String[] mkCol ) {
529 if( mkCol != null && mkCol.length > 0 ) {
530 int size = mkCol.length;
531 markColors = new Color[size];
532 for( int i=0; i<size; i++ ) {
533 markColors[i] = StringUtil.getColorInstance( mkCol[i] );
534 }
535 }
536 }
537
538 /**
539 * マ?カーライン描画時に、その設定?を表示します?
540 *
541 * マ?カーラインの縦軸の設定?(markValues)に、設定?をラベル表示します?
542 * 位置は、TextAnchor.BASELINE_LEFT 固定です?
543 * 初期値は、表示する(true)です?
544 *
545 * @og.rev 4.1.1.0 (2008/02/04) 新規追?
546 *
547 * @param useAnchor true:設定?を表示する?
548 */
549 public void setUseMarkAnchor( final boolean useAnchor ) {
550 useMarkAnchor = useAnchor ;
551 }
552
553 /**
554 * マ?カーラインの?時?Shape色をカンマ区?形式で??します?
555 *
556 * HybsLine でのみ使用可能です?
557 * マ?カーラインを使用する場合に、そのラインを?な?、?る色を指定します?
558 * こ?色の??、?ーカーラインの色??ーカーラインの設定?の個数?1に
559 * なります?つまり?色?:設定??:色?:設定??:色??となります?
560 * 色??、設定??より小さ??合に使用され、色??、設定??より大きく?
561 * 設定??より小さ??合?色??、設定??より大きい場合になります?
562 *
563 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します?
564 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
565 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます?
566 * また?#XXXXXX形式?16bitRGB表?でも指定可能です?
567 * markValues と、あわせて設定する?があります?
568 * どちらかが??されて???合?、?ーカー表示されません?
569 * <pre>
570 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
571 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE)
572 * #XXXXXX形式?16bitRGB表?でも指定可能です?
573 * </pre>
574 *
575 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
576 *
577 * @param ovCol マ?カーラインの?時?Shape色
578 * @see java.awt.Color#BLACK
579 */
580 public void setMarkOverColors( final String[] ovCol ) {
581 if( ovCol != null && ovCol.length > 0 ) {
582 int size = ovCol.length;
583 markOverColors = new Color[size];
584 for( int i=0; i<size; i++ ) {
585 markOverColors[i] = StringUtil.getColorInstance( ovCol[i] );
586 }
587 }
588 }
589
590 /**
591 * マ?カーラインの?時?Shape色を規定するオブジェクトを返します?
592 *
593 * HybsLine でのみ使用可能です?
594 * 設定情報が存在しな??合?、null を返します?
595 *
596 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
597 * @og.rev 4.1.1.0 (2008/02/04) markColors 属?追?
598 * @og.rev 4.1.1.1 (2008/02/25) markValues での "G" ?を??
599 *
600 * @return マ?カーラインの?時?Shape色管?ブジェク?
601 */
602 private ValueMarkOverColors getValueMarkOverColors() {
603 ValueMarkOverColors vmoc = null;
604
605 if( markValues != null && markOverColors != null &&
606 markValues.length + 1 == markOverColors.length &&
607 markValues.length >= 1 ) {
608 int dynAdrs = (dynamicOCadrs >= 0) ? dynamicOCadrs : 0 ;
609
610 vmoc = new ValueMarkOverColors(
611 markValues,
612 markOverColors,
613 markColors[dynAdrs],
614 dynamicOCadrs
615 );
616 }
617
618 return vmoc ;
619 }
620
621 /**
622 * 動的なマ?カーラインの基準シリーズ番号を設定しま?初期値:-1)?
623 *
624 * 動的なマ?カーラインを使用する場合?、基準?となるシリーズ番号を指定します?
625 *
626 * マ?カーラインの?位閾値に相当します?これは、グラフ化されますが?
627 * Shape は自動的に削除されます?
628 * こ?設定を使用する場合???の??タには、?Shapeが付きます?それ以外?
629 * ??タに、Shape を付けるかど?は、shapesVisible 属?で?します?
630 * こ?線?色は、markColors で?した??位?色になります?また?
631 * markValues で?した??位?値は、使用されません。た?、色??
632 * 関係上?設定しておく?があります?
633 * また?isValueVisible == true で、設定?の値表示を行う場合も、最下位?
634 * 値は表示しな??します?
635 * 初期値は、使用しな?-1)です?
636 *
637 * @og.rev 4.1.1.0 (2008/02/04) 新規追?
638 * @og.rev 4.1.1.0 (2008/02/19) setUseDynamicOC ?setDynamicOCNo
639 *
640 * @param ocNo 動的なマ?カーラインの基準シリーズ番号
641 */
642 public void setDynamicOCNo( final int ocNo ) {
643 dynamicOCNo = ocNo;
644 }
645
646 /**
647 * マ?カーラインの ValueMarker オブジェクト?列を返します?
648 *
649 * マ?カーライン は、markValues(double配?) と markColors(Color配?)
650 * より、ValueMarker オブジェクトを??次配?化して?ます?
651 * useMarkAnchor == true の場合?、設定?(markValues) の Anchor ?
652 * 表示します?位置は、TextAnchor.BASELINE_LEFT 固定です?
653 * dynamicOCNo が指定された場合?、最下位?閾値は使用しません?
654 *
655 * @og.rev 4.1.1.0 (2008/02/04) useMarkAnchor 属?追?
656 * @og.rev 4.1.1.0 (2008/02/04) 動的なオーバ?カラー useDynamicOC 属?追?
657 *
658 * @return マ?カーラインのオブジェクト??not null)
659 * @see java.awt.Color#BLACK
660 * @see #setMarkValues( String[] )
661 * @see #setMarkColors( String[] )
662 * @see #setUseMarkAnchor( boolean )
663 */
664 protected ValueMarker[] getValueMarkers() {
665 List<ValueMarker> markerList = new ArrayList<ValueMarker>();
666 int size = (markValues == null) ? 0 : markValues.length;
667 for( int i=0; i<size; i++ ) {
668 if( i != dynamicOCadrs ) {
669 ValueMarker marker = new ValueMarker( markValues[i] );
670 marker.setPaint( markColors[i] );
671 if( useMarkAnchor ) {
672 marker.setLabel( String.valueOf( markValues[i] ) );
673 marker.setLabelTextAnchor( TextAnchor.BASELINE_LEFT );
674 }
675 markerList.add( marker );
676 }
677 }
678
679 return markerList.toArray( new ValueMarker[markerList.size()] );
680 }
681
682 /**
683 * チャート?縦軸の??をセ?しま?初期値:自動計??
684 *
685 * 何も?しな??合?、データの??から、?動的に計算します?
686 *
687 * @param lowBnd 縦軸の??
688 * @see #setUpperBound( String )
689 */
690 public void setLowerBound( final String lowBnd ) {
691 if( lowBnd != null && lowBnd.length() > 0 ) {
692 lowerBound = lowBnd;
693 }
694 }
695
696 /**
697 * チャート?縦軸の?値をセ?しま?初期値:自動計??
698 *
699 * 何も?しな??合?、データの?値から、?動的に計算します?
700 *
701 * @param upBnd 縦軸の?値
702 * @see #setLowerBound( String )
703 */
704 public void setUpperBound( final String upBnd ) {
705 if( upBnd != null && upBnd.length() > 0 ) {
706 upperBound = upBnd;
707 }
708 }
709
710 /**
711 * チャート?縦軸の目盛??セ?しま?初期値:自動計??
712 *
713 * 何も?しな??合?、データの?から、?動的に計算します?
714 *
715 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
716 *
717 * @param size 縦軸のチック(目?の?
718 */
719 public void setTickSize( final String size ) {
720 if( size != null && size.length() > 0 ) {
721 tickSize = size;
722 }
723 }
724
725 /**
726 * バ?チャート?グラ??ション処?行うかど?[true/false]をセ?しま?初期値:true)?
727 *
728 * 通常のバ?チャート?、単?表示で表されますが、これにグラ??ション効果を
729 * 付加するかど?を指定します?
730 * 通常のバ?チャートが、少しきれ?見えます?
731 * 初期値は、true(グラ??ション効果を付与す?です?
732 *
733 * @param useGrad グラ??ション処?[true:する/false:しない]
734 */
735 public void setUseGradient( final boolean useGrad ) {
736 useGradient = useGrad;
737 }
738
739 /**
740 * バ?チャート?グラ??ション処?行うかど?を取得します?
741 *
742 * 通常のバ?チャート?、単?表示で表されますが、これにグラ??ション効果を
743 * 付加するかど?を指定します?
744 * 通常のバ?チャートが、少しきれ?見えます?
745 * 初期値は、false(使用しな?です?
746 *
747 * @return グラ??ション処?する:true/しな?false)
748 * @see #setUseGradient( boolean )
749 */
750 protected boolean isUseGradient() { return useGradient; }
751
752 /**
753 * ラインチャート?ポイントを四角表示するかど?を指定しま?初期値:false)?
754 *
755 * ラインチャート???常、線?で表され、各ポイントにつ?も?線?で接続されます?
756 * shapesVisible ?true に設定すると、各ポイントが、線上に四角く表示され?
757 * そ?ポイント?位置を?容易に判断出来るよ?なります?
758 * 初期値は、?ーカーを?れません?
759 *
760 * @param shVisible ポイントを四角表示するかど?
761 */
762 public void setShapesVisible( final boolean shVisible ) {
763 shapesVisible = shVisible;
764 }
765
766 /**
767 * ラインチャート?ポイントを四角表示するかど?を取得します?
768 *
769 * ラインチャート???常、線?で表され、各ポイントにつ?も?線?で接続されます?
770 * shapesVisible ?true に設定すると、各ポイントが、線上に四角く表示され?
771 * そ?ポイント?位置を?容易に判断出来るよ?なります?
772 * 初期値は、?ーカーを?れません?
773 *
774 * @return ポイントを四角表示するかど?
775 * @see #setShapesVisible( boolean )
776 */
777 protected boolean isShapesVisible() { return shapesVisible; }
778
779 /**
780 * ??タ毎にShapeを?り替える時?色の繰返しパターンを文字?配?で?します?
781 *
782 * HybsLine でのみ使用可能です?
783 * これは、データそ?も?が?繰返し性のある場合に、その繰返し性に対応し?
784 * 形状のShape を表示させる?合に使用します?
785 * 繰返しShapeの形状は、JFreeChart のシリーズ毎?繰返し標準形状を使用します?
786 * 現在のバ?ジョンでは?0?までの繰返しに対応可能です?
787 * 繰返し色を??した????に使用されて?ます?
788 *
789 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します?
790 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
791 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます?
792 * また?#XXXXXX形式?16bitRGB表?でも指定可能です?
793 *
794 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
795 *
796 * @param colors ??タ毎?色の繰返しパターン(??配?)
797 * @see java.awt.Color#BLACK
798 */
799 public void setShapeColors( final String[] colors ) {
800 if( colors != null && colors.length > 0 ) {
801 int size = colors.length;
802 shapeColors = new Color[size];
803 for( int i=0; i<size; i++ ) {
804 shapeColors[i] = StringUtil.getColorInstance( colors[i] );
805 }
806 }
807 }
808
809 /**
810 * shapeの大きさを??定で変更しま?初期値:null)?
811 *
812 * ラインチャート?Shape(?ラフ?ポイント?マ?カー)の大きさは??常は?
813 * 自動設定されます?
814 * こ?大きさを?倍率?で、変更可能です?
815 * ??、double 型です?
816 * 初期値は、null は、スケール変更しません(自動設定?ままの大きさ)
817 *
818 * @og.rev 4.1.1.0 (2008/02/04) 新規追?
819 *
820 * @param scale shapeの大きさの倍率
821 */
822 public void setShapeScale( final String scale ) {
823 shapeScale = scale;
824 }
825
826 /**
827 * ラインチャート?線をドットラインにするかど?を指定しま?初期値:false)?
828 *
829 * ラインチャート???常、線?で表されます?
830 * これに、点線で表すことで、グラフ?違いを?色?でなく形状でも識別
831 * しやすくすることが可能です?
832 * 初期値は、線?です?
833 *
834 * @param useDotLine ドットラインにするかど?
835 */
836 public void setUseDottedLine( final boolean useDotLine ) {
837 useDottedLine = useDotLine;
838 }
839
840 /**
841 * ラインチャート?線をドットラインにするかど?を取得します?
842 *
843 * ラインチャート???常、線?で表されます?
844 * これに、点線で表すことで、グラフ?違いを?色?でなく形状でも識別
845 * しやすくすることが可能です?
846 * 初期値は、線?です?
847 *
848 * @return ドットラインにするかど?
849 * @see #setUseDottedLine( boolean )
850 */
851 protected boolean isUseDottedLine() { return useDottedLine; }
852
853 /**
854 * ?チャート描画時?チャート色の繰返しパターンを文字?配?で?します?
855 *
856 * 通常、?のチャートを同時に表示させる?合?、縦軸が?通であれば?
857 * ?回のSelect????タを取得します?
858 * こ?、データをシリーズと呼んでおり、これを区別する為に、色を?けます?
859 * 初期値は、JFreeChart が?動で割り振ります?
860 * これを?外部からCVS形式で、カンマ区?で色コードを?します?
861 * ?データが多い場合?、多い??色は使用されません。少な??合??
862 * ?に繰り返して使用されます?
863 * 例えば?色??した?合?、すべてのシリーズが同じ色で表されます?
864 *
865 * ?文字?は、java.awt.Color クラスのstatic フィールド名で?します?
866 * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
867 * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます?
868 * また?#XXXXXX形式?16bitRGB表?でも指定可能です?
869 *
870 * @param colors チャート色の繰返しパターン(??配?)
871 * @see java.awt.Color#BLACK
872 */
873 public void setSeriesColors( final String[] colors ) {
874 if( colors != null && colors.length > 0 ) {
875 int size = colors.length;
876 seriesColors = new Color[size];
877 for( int i=0; i<size; i++ ) {
878 seriesColors[i] = StringUtil.getColorInstance( colors[i] );
879 }
880 }
881 }
882
883 /**
884 * ?チャート描画時?チャート色の繰返しパターンをColor配?で?します?
885 *
886 * @return チャート色の繰返しパターン(Color配?)
887 * @see #setSeriesColors( String[] )
888 */
889 protected Color[] getSeriesColors() {
890 return seriesColors ;
891 }
892
893 /**
894 * Value(縦軸)のラベルを表示するかど?を指定しま?初期値:true[表示する])?
895 *
896 * ValueAxis にて設定される、縦軸??の、ラベルを表示するかど??します?
897 * 初期値は、true(表示する)です?
898 *
899 * @og.rev 4.0.2.0 (2007/12/20) 新規追?
900 *
901 * @param labelsVisible Value(縦軸)のラベルを表示するかど?
902 */
903 public void setValueLabelsVisible( final boolean labelsVisible ) {
904 isLabelsVisible = labelsVisible;
905 }
906
907 /**
908 * Value(縦軸)のマ?カーを表示するかど?を指定しま?初期値:true[表示する])?
909 *
910 * ValueAxis にて設定される、縦軸??の、?ーカーを表示するかど??します?
911 * 初期値は、true(表示する)です?
912 *
913 * @og.rev 4.0.2.0 (2007/12/20) 新規追?
914 *
915 * @param marksVisible Value(縦軸)のマ?カーを表示するかど?
916 */
917 public void setValueMarksVisible( final boolean marksVisible ) {
918 isMarksVisible = marksVisible;
919 }
920
921 /**
922 * ??タの値(itemText)を表示するかど?[true/false/last]を指定しま?初期値:false[表示しない])?
923 *
924 * CategoryItemRenderer 関連のグラフ?設定?をグラフ上に表示するかど??
925 * ?します?
926 * true に設定した?合?通常の場合?、すべてのシリーズにラベル表示されます?
927 * false に設定すると、表示されません?
928 * last を設定すると、各シリーズの??値のみ表示されます?
929 * ChartCreate クラスに、seriesPikup が設定されて?場合?、指定?シリーズ
930 * のみの設定?を表示し?他?値は、表示しません?
931 * 同様に、dynamicOCNo が指定されて?場?動的なマ?カーライン)
932 * ??シリーズは?値として使用されるため?設定?は表示されません?
933 * ラベルの表示位置は、表示する線グラフ?傾きに応じてラベルの表示場?
934 * 変えます?山形、右坂?谷形、左?に応じて、上中、下右、下中、上右 に
935 * 位置を設定します?右にずらす?は?0 ピクセル固定です?
936 * 初期値は、false(表示しな?です?
937 *
938 * @og.rev 4.1.1.0 (2008/02/04) 新規追?
939 * @og.rev 4.1.2.0 (2008/03/12) ??のまま、受け取りるように変更
940 *
941 * @param visible ??タの値の表示のさせ方 [true/false/last]
942 * @see ChartCreate#setSeriesPikup( int )
943 */
944 public void setItemLabelVisible( final String visible ) {
945 if( "true".equalsIgnoreCase( visible ) ) {
946 isItemValVisible = true;
947 }
948 else if( "last".equalsIgnoreCase( visible ) ) {
949 isItemValVisible = true;
950 isItemLastVisible = true;
951 }
952 else if( visible != null && !"false".equalsIgnoreCase( visible ) ) {
953 String errMsg = "itemLabelVisible は、?true,false,last」から指定してください?"
954 + visible + "]";
955 throw new HybsSystemException( errMsg );
956 }
957 }
958
959 /**
960 * ??タの値(itemText)の表示に桁区??を使用するかど?を指定します?
961 *
962 * itemLabelVisible=true 時に、表示されるデータ値ラベルで?
963 * NumberFormat して?すが?桁区???123,456,789.0) の
964 * 区?記号を表示するかど?を指定します?
965 * true を指定すると、表示します?false では、表示しません?
966 * 初期値は、true(使用する)です?
967 *
968 * @og.rev 4.1.2.0 (2008/03/12) 新規追?
969 *
970 * @param used 桁区??を使用するかど?
971 */
972 public void setUseItemLabelSep( final boolean used ) {
973 useItemLabelSep = used;
974 }
975
976 /**
977 * 縦軸の表示領域INSET値(double)を指定します?
978 *
979 * 縦軸?表示領域(NumberAxis)の??追??を設定します?
980 * これは??常の表示領域の左側にスペ?スを挿入します?
981 * あくまで、追?る?なので、文字?長さ?含まれません?
982 * 何も?しな??合?、設定しません?
983 *
984 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
985 *
986 * @param inset Value(縦軸)の表示領域INSET値
987 */
988 public void setValueInset( final String inset ) {
989 valueInset = inset;
990 }
991
992 /**
993 * BOXチャート?バ??double)を指定します?
994 *
995 * BOXチャート?バ??double)を指定します?
996 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ?
997 * 使用した描画のみです?
998 * 棒グラフ?バ??定?、直接、CategoryItemRendererState に設定して?す?
999 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用?比率で?します?
1000 * 何も?しな??合?、設定しません?
1001 *
1002 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
1003 *
1004 * @param width BOXチャート?バ??double)
1005 */
1006 public void setBarWidth( final String width ) {
1007 barWidth = width;
1008 }
1009
1010 /**
1011 * BOXチャート?バ??double)を取得します?
1012 *
1013 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ?
1014 * 使用した描画のみです?
1015 * 棒グラフ?バ??定?、直接、CategoryItemRendererState に設定して?す?
1016 * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用?比率で?します?
1017 * 何も?しな??合?、設定しません?
1018 *
1019 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
1020 *
1021 * @return BOXチャート?バ??double)の??
1022 */
1023 protected String getBarWidth() {
1024 return barWidth ;
1025 }
1026
1027 /**
1028 * BOXチャート?バ????値(0.0??.0)を指定します?
1029 *
1030 * BOXチャート?バ???比率の?値を指定します?
1031 * 表示領域を1として小数点以下?数値で棒??設定します?
1032 * 設定した?無?ある時?適当なサイズに調整されます?
1033 * (小さくしたときには棒が線?ようにな?
1034 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ?
1035 * 使用した描画のみです?
1036 * 何も?しな??合?、設定しません?
1037 *
1038 * @og.rev 4.0.2.0 (2007/12/20) 新規追?
1039 *
1040 * @param barWidth BOXチャート?バ????値(0.0??.0)
1041 */
1042 public void setBarMaxWidth( final String barWidth ) {
1043 maxBarWidth = barWidth;
1044 }
1045
1046 /**
1047 * BOXチャート?バ?アイ?のマ?ジン(0.0??.0)を指定します?
1048 *
1049 * BOXチャート?バ?アイ?のマ?ジンの比率を指定します?
1050 * 棒?間を表示領域を1として小数点以下?数値で?設定します?
1051 * 無?ある時?適当なサイズに調整されます?
1052 * barMaxWidth より優先されます?
1053 * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ?
1054 * 使用した描画のみです?
1055 * 何も?しな??合?、設定しません?
1056 *
1057 * @og.rev 4.0.2.0 (2007/12/20) 新規追?
1058 *
1059 * @param margin BOXチャート?バ?アイ?のマ?ジン(0.0??.0)
1060 */
1061 public void setBarItemMargin( final String margin ) {
1062 itemMargin = margin;
1063 }
1064
1065 /**
1066 * 表示下限値(これ以下???タは未表示)の値(double)を指定します?
1067 *
1068 * HybsLine でのみ使用可能です?
1069 * こ?設定?以下???タは、存在しな??します?
1070 * Lineを引くとき?こ???タと、存在して???タ間にラインは引かれません?
1071 * 何も?しな??合?、設定しません?
1072 *
1073 * @og.rev 4.0.3.0 (2008/01/07) 新規追?
1074 *
1075 * @param limit 表示下限値(これ以下???タは未表示)
1076 */
1077 public void setVisibleLimit( final String limit ) {
1078 visibleLimit = limit;
1079 }
1080
1081 /**
1082 * グラフ?書き?し位置の調整比率を指定します?
1083 *
1084 * グラフを描画する場合?、書き?し位置を少しずらします?
1085 * これは、グラフ??対して、比率で?します?
1086 * 0.0(初期値)の場合?、?期描画位置である、CategoryAnchor.Middle と
1087 * 同じ?から、書き?されます?
1088 * 1.0 の場合?中?ら?グラフ??半?が加算され?END位置に?ます?
1089 * 同様に?1.0 の場合?、グラフ??半?が減算され?START 位置になります?
1090 * つまり?中?ら?グラフ??半?単位で、前方/後方にずらす事が出来ます?
1091 * 書き?し位置 ??中?Middle) + (domainMargin)????
1092 * 初期値は?.0(真ん中:MIDDLE)です?
1093 *
1094 * @og.rev 4.1.1.0 (2008/02/14) 新規追?
1095 *
1096 * @param margin グラフ?書き?し位置の調整比率
1097 */
1098 public void setDomainMargin( final double margin ) {
1099 domainMargin = margin;
1100 }
1101
1102 /**
1103 * 時刻を表す?合?表現の仕方を指定しま?初期値:null)?
1104 *
1105 * HybsNumberAxis にオーバ?ライドす?時間を表示する DecimalFormat の?クラスを利用するに当たり?
1106 * 時刻の表示方法を?します?
1107 * 外部から与える数字???続して??があるため?0?数です?
1108 * たとえ??700 ?17:00 , 2150 ?21:30 と?感じです?
1109 * 2400 を?ると日付違?なります?
1110 *
1111 * 英語表?:)と日本語表??の区別と?4時間を?る?合?表示方法によって?種類?パターンが存在します?
1112 * ?1:そ?まま?4:00 となり??されて??
1113 * ?2:そ?まま?:00 に戻る?(日付?無?
1114 * ?3:そ?まま? 00:00 と日付が付与される?
1115 * ?1:そ?まま?4?0?となり??されて??
1116 * ?2:そ?まま?0?0?に戻る?(日付?無?
1117 * ?3:そ?まま?日 00?0?と日付が付与される?
1118 * 初期値は、使用しな?-1)です?
1119 *
1120 * @og.rev 5.5.2.1 (2012/05/07) 新規追?
1121 *
1122 * @param type 時刻の表示方?[E1/E2/E3/H1/H2/H3]
1123 */
1124 public void setTimeFormatType( final String type ) {
1125 timeFormatType = type;
1126 }
1127
1128 /**
1129 * ラベルの表示向きを縦にするかど?[true/false]を指定しま?初期値:false)?
1130 *
1131 * ChartCreate の rotationLabel は、角度を指定できましたが?NumberAxis では?
1132 * 縦にするかど?の?しかできません?
1133 * ここでは、true を指定するとラベルは、縦書きになります?
1134 * 初期値は、false(横書?です?
1135 *
1136 * @og.rev 5.5.2.1 (2012/05/07) 新規追?
1137 *
1138 * @param useVLavels ラベルの表示向き [false:横書?:true:縦書き]
1139 */
1140 public void setUseVerticalLabels( final boolean useVLavels ) {
1141 useVerticalLabels = useVLavels;
1142 }
1143
1144 /**
1145 * MeterPlot に?な??を設定します?
1146 *
1147 * これは、ChartDataset(こ?クラス)に?な getterメソ?を用意して?
1148 * 利用側のクラス(ChartPlot_Pie) でセ?すべきですが、メソ?が増える?で?
1149 * こちらに MeterPlotオブジェクトを渡して、メソ?数を減らそうとして??です?
1150 *
1151 * lowerBound は、最小?(low)
1152 * upperBound は、最大値(upp)
1153 * markValues 値,A,B,C
1154 * markOverColors GREEN,BLUE,YELLOW,RED
1155 * low-A⇒GREEN , A-B⇒BLUE , B-C⇒YELLOW , C-upp⇒RED で、MeterIntervalを指定します?
1156 *
1157 * shapeColors に、NeedlePaint,ValuePaint,TickPaint,TickLabelPaint,DialBackgroundPaint,DialOutlinePaint を指定できます?
1158 * 初期値は、BLACK,BLACK,BLACK,BLACK,透?,BLACK です?
1159 * needleType に、DialShape の?キ??ー??として、CHORD,CIRCLE,PIE が指定可能です?
1160 * ?方法としては、taglib上で、chartType ?時に、Meter_PIE などと?します?
1161 * shapeScale は、MeterAngle(メーターの表示角度) を指定できます?
1162 * valueLabel は、MeterInterval の規定?(値,A,B,C) に対応した?例ラベルです?
1163 *
1164 * @og.rev 5.7.8.0 (2014/07/04) 新規追?
1165 *
1166 * @return 値をセ?し終わった?MeterPlotオブジェク?
1167 */
1168 protected Plot makeMeterPlot() {
1169 MeterPlot mplot = new MeterPlot();
1170
1171 // ?(上限、下限)??
1172 double low= lowerBound == null ? 0.0 : Double.parseDouble( lowerBound ) ;
1173 double upp= upperBound == null ? 100.0 : Double.parseDouble( upperBound ) ;
1174 mplot.setRange( new Range( low, upp ) );
1175
1176 // markValues 値,A,B,C
1177 // markOverColors GREEN,BLUE,YELLOW,RED
1178 // low-A⇒GREEN , A-B⇒BLUE , B-C⇒YELLOW , C-upp⇒RED
1179 // ?の??MeterInterval)は、markValues に?番目の値が設定された場合に行う?
1180 if( markValues != null && markValues.length > 1 ) {
1181 int size = markValues.length ;
1182 if( markOverColors != null && size == markOverColors.length ) {
1183
1184 // BasicStroke に、大きな値を指定すると?始位置がずれてしま??
1185 BasicStroke bs = new BasicStroke( 2.0F );
1186
1187 // valueLabel は、markValues の規定?(A,B,C) に対応した?例ラベルです?
1188 String[] lbls = StringUtil.csv2Array( valueLabel );
1189 int lblSize = lbls.length ;
1190 int j = 0; // ラベルの配?番号
1191
1192 double st = low;
1193 for( int i=1; i<=size; i++ ) {
1194 double en = i<size ? markValues[i] : upp ;
1195 Color co1 = markOverColors[i-1];
1196 Color co2 = new Color( co1.getRed() , co1.getGreen() , co1.getBlue() , 128 ); // 透過色(半??
1197 String lbl = j < lblSize ? lbls[j++] : "" ;
1198 mplot.addInterval( new MeterInterval( lbl, new Range( st, en ), co1, bs, co2 ) );
1199 st = en ;
1200 }
1201 }
1202 else {
1203 String errMsg = "Meter で、markValues を??する?合?、同じ数のmarkOverColorsの?が?です?"
1204 + HybsSystem.CR ;
1205 throw new HybsSystemException( errMsg );
1206 }
1207 }
1208
1209 // ?の??MeterInterval) のサンプル
1210 // mplot.addInterval(new MeterInterval("Battery LOW", new Range(0.0, 10.0),
1211 // Color.RED, new BasicStroke(2.0F), new Color(255, 0, 0, 128)));
1212 // mplot.addInterval(new MeterInterval("Moderate", new Range(10.0, 90.0),
1213 // Color.YELLOW, new BasicStroke(2.0F), new Color(255, 255, 0, 64)));
1214 // mplot.addInterval(new MeterInterval("Battery FULL", new Range(90.0, 100.0),
1215 // Color.GREEN, new BasicStroke(2.0F), new Color(0, 255, 0, 64)));
1216
1217 // TickSize を設定?null なら?、?期?を使??で、設定しな??
1218 if( tickSize != null ) {
1219 mplot.setTickSize( Double.parseDouble( tickSize ) );
1220 }
1221
1222 // shapeColors に、NeedlePaint,ValuePaint,TickPaint,TickLabelPaint,DialBackgroundPaint,DialOutlinePaint を指定できます?
1223 // NeedlePaint , ValuePaint , TickPaint , TickLabelPaint , DialBackgroundPaint(=透?) , DialOutlinePaint
1224 Color[] shCols = new Color[] { Color.BLACK , Color.BLACK , Color.BLACK , Color.BLACK , new Color(255, 255, 255, 0), Color.BLACK }; // 初期値
1225 if( shapeColors != null && shapeColors.length > 0 ) {
1226 for( int i=0; i<shapeColors.length; i++ ) {
1227 shCols[i] = shapeColors[i];
1228 }
1229 }
1230 mplot.setNeedlePaint( shCols[0] ); // 針?色
1231 mplot.setValuePaint( shCols[1] ); // 値の色
1232 mplot.setTickPaint( shCols[2] ); // メモリの色
1233 mplot.setTickLabelPaint( shCols[3] ); // メモリの??色
1234 mplot.setDialBackgroundPaint( shCols[4] ); // 背景色
1235 mplot.setDialOutlinePaint( shCols[5] ); // セ?しても?表示が変わらな??
1236
1237 // needleType 属?で、DialShape を指定できます?
1238 DialShape dshape = DialShape.CIRCLE ; // 初期値
1239 if( needleType != null ) {
1240 if( "CHORD".equalsIgnoreCase( needleType ) ) { dshape = DialShape.CHORD; }
1241 else if( "CIRCLE".equalsIgnoreCase( needleType ) ) { dshape = DialShape.CIRCLE; } // 初期値
1242 else if( "PIE".equalsIgnoreCase( needleType ) ) { dshape = DialShape.PIE; }
1243 }
1244 mplot.setDialShape( dshape ); // CHORD,CIRCLE,PIE
1245
1246 // shapeScale は、MeterAngle(メーターの表示角度) を指?
1247 if( shapeScale != null ) {
1248 mplot.setMeterAngle( Integer.parseInt( shapeScale ) );
1249 }
1250
1251 // isLabelsVisible ??
1252 mplot.setTickLabelsVisible( isLabelsVisible );
1253
1254 // そ?他決め打ちの値設?
1255 // mplot.setValueFont(new Font("Arial", Font.BOLD, 14));
1256 // mplot.setTickLabelFont(new Font("Arial", Font.BOLD, 14));
1257
1258 mplot.setDataset( (ValueDataset)dataset );
1259 return mplot;
1260 }
1261
1262 /**
1263 * ThermometerPlot に?な??を設定します?
1264 *
1265 * markValues 値,A,B
1266 * markOverColors GREEN,YELLOW,RED
1267 * xxx-low⇒GRAY , low-A⇒GREEN , A-B⇒YELLOW , B-upp⇒RED , upp-xxx⇒GRAY で、SubrangePaintを指定します?
1268 * markOverColors を指定しな??合?、ThermometerPlot.NORMAL , WARNING , CRITICAL が?に?されます?
1269 * これは、GREEN,YELLOW,RED になります?
1270 *
1271 * shapeColors に、ValuePaint,ThermometerPaint(温度計???,MercuryPaint を指定できます?
1272 *
1273 * @og.rev 5.7.8.0 (2014/07/04) 新規追?
1274 *
1275 * @return 値をセ?し終わった???ThermometerPlotオブジェク?
1276 */
1277 protected Plot makeThermometerPlot() {
1278 ThermometerPlot tplot = new ThermometerPlot();
1279
1280 // ?(上限、下限)??
1281 double low= lowerBound == null ? 0.0 : Double.parseDouble( lowerBound ) ;
1282 double upp= upperBound == null ? 100.0 : Double.parseDouble( upperBound ) ;
1283 tplot.setRange( low , upp );
1284
1285 // markValues 値,A,B,C
1286 // markOverColors GREEN,YELLOW,RED
1287 // low-A⇒Red , A-B⇒Yellow , B-C⇒Green , C-upp⇒Blue
1288 // ?の??MeterInterval)は、markValues に?番目の値が設定された場合に行う?
1289 if( markValues != null && markValues.length > 1 ) {
1290 int size = markValues.length ;
1291
1292 // markOverColors が存在して、?数が??して?ば、true
1293 boolean inCols = ( markOverColors != null && size == markOverColors.length ) ;
1294 if( inCols || markOverColors == null || markOverColors.length == 0 ) {
1295 double st = low;
1296 for( int i=1; i<=size; i++ ) {
1297 double en = i<size ? markValues[i] : upp ;
1298 // 第?数は、i(?)ではなく?サブレンジ番号(ThermometerPlot.NORMAL , WARNING , CRITICAL)
1299 tplot.setSubrange( i-1, st, en );
1300
1301 if( inCols ) {
1302 Color co1 = markOverColors[i-1];
1303 tplot.setSubrangePaint( i-1,co1 );
1304 }
1305 st = en ;
1306 }
1307 }
1308 else {
1309 String errMsg = "Meter で、markValues を??する?合?、同じ数のmarkOverColorsの?が?です?"
1310 + HybsSystem.CR ;
1311 throw new HybsSystemException( errMsg );
1312 }
1313 }
1314
1315 // ?の??setSubrange) のサンプル
1316 // tplot.setSubrange(ThermometerPlot.NORMAL , 0.0, 55.0);
1317 // tplot.setSubrange(ThermometerPlot.WARNING , 55.0, 75.0);
1318 // tplot.setSubrange(ThermometerPlot.CRITICAL, 75.0, 150.0);
1319
1320 // shapeColors に、ValuePaint,ThermometerPaint(温度計???,MercuryPaint を指定できます?
1321 // ValuePaint , ThermometerPaint , MercuryPaint
1322 Color[] shCols = new Color[] { Color.BLACK , Color.BLACK , Color.GRAY }; // 初期値
1323 if( shapeColors != null && shapeColors.length > 0 ) {
1324 for( int i=0; i<shapeColors.length; i++ ) {
1325 shCols[i] = shapeColors[i];
1326 }
1327 }
1328 tplot.setValuePaint( shCols[0] ); // 値の色
1329 tplot.setThermometerPaint( shCols[1] ); // 温度計???
1330 tplot.setMercuryPaint( shCols[2] ); // オーバ?時?色
1331
1332 // tplot.setValueFont(new Font("Arial", 1, 14));
1333
1334 tplot.setDataset( (ValueDataset)dataset );
1335 return tplot;
1336 }
1337
1338 /**
1339 * CompassPlot に?な??を設定します?
1340 *
1341 * shapeColors に、Compassの色を指定できます?(??は、SeriesPaint にセ?して??
1342 * SeriesPaint,SeriesOutlinePaint,RoseCenterPaint,RoseHighlightPaint,RosePaint を指定します?
1343 * needleType には、MeterNeedle の?キ??ー??として、下記??種類が?可能です?
1344 * ??、Arrow,Line,Long,Pin,Plum,Pointer,Ship,Wind,Arrow,MiddlePin と???です?
1345 * 初期値は、Pointer です?
1346 *
1347 * @og.rev 5.7.8.0 (2014/07/04) 新規追?
1348 *
1349 * @return 値をセ?し終わった???CompassPlotオブジェク?
1350 */
1351 protected Plot makeCompassPlot() {
1352 CompassPlot cplot = new CompassPlot();
1353
1354 // Series ??? 固?
1355 final int serNo = 0;
1356
1357 // needleType 属?で、SeriesNeedle 番号を指定できます?
1358 int sNeedle = 5 ; // Pointer
1359 if( needleType != null ) {
1360 if( "Arrow".equalsIgnoreCase( needleType ) ) { sNeedle = 0; } // 0 = ArrowNeedle;
1361 else if( "Line".equalsIgnoreCase( needleType ) ) { sNeedle = 1; } // 1 = LineNeedle;
1362 else if( "Long".equalsIgnoreCase( needleType ) ) { sNeedle = 2; } // 2 = LongNeedle;
1363 else if( "Pin".equalsIgnoreCase( needleType ) ) { sNeedle = 3; } // 3 = PinNeedle;
1364 else if( "Plum".equalsIgnoreCase( needleType ) ) { sNeedle = 4; } // 4 = PlumNeedle;
1365 else if( "Pointer".equalsIgnoreCase( needleType ) ) { sNeedle = 5; } // 5 = PointerNeedle;
1366 else if( "Ship".equalsIgnoreCase( needleType ) ) { sNeedle = 6; } // 6 = ShipNeedle;
1367 else if( "Wind".equalsIgnoreCase( needleType ) ) { sNeedle = 7; } // 7 = WindNeedle;
1368 else if( "Arrow".equalsIgnoreCase( needleType ) ) { sNeedle = 8; } // 8 = ArrowNeedle;
1369 else if( "MiddlePin".equalsIgnoreCase( needleType ) ) { sNeedle = 9; } // 9 = MiddlePinNeedle;
1370 }
1371 cplot.setSeriesNeedle( serNo, sNeedle );
1372
1373 // shapeColors に、SeriesPaint,SeriesOutlinePaint,RoseCenterPaint,RoseHighlightPaint,RosePaint を指?
1374 // SeriesPaint, SeriesOutlinePaint , RoseCenter , RoseHighlight, Rose
1375 Color[] shCols = new Color[] { Color.RED , Color.BLACK , Color.WHITE , Color.BLACK , Color.YELLOW }; // 初期値
1376 if( shapeColors != null && shapeColors.length > 0 ) {
1377 for( int i=0; i<shapeColors.length; i++ ) {
1378 shCols[i] = shapeColors[i];
1379 }
1380 }
1381 cplot.setSeriesPaint( serNo, shCols[0] ); // 針?色
1382 cplot.setSeriesOutlinePaint( serNo, shCols[1] ); // 針???色
1383 cplot.setRoseCenterPaint( shCols[2] ); // ?盤の中??
1384 cplot.setRoseHighlightPaint( shCols[3] ); // ?盤の???
1385 cplot.setRosePaint( shCols[4] ); // ??塗りつぶし色
1386
1387 cplot.addDataset( (ValueDataset)dataset );
1388
1389 return cplot;
1390 }
1391
1392 /**
1393 * HybsNumberAxis にオーバ?ライドす?時間を表示する DecimalFormat の?クラスを定義します?
1394 *
1395 * これは、ChartPlot_XY で使用する、HybsNumberAxis に対して、拡張します?
1396 * ??タが?時刻を表す?合?Date型?オブジェクトを利用して、org.jfree.chart.axis.PeriodAxis
1397 * を利用できればよいのですが、単なる数字で扱って?ケースがあり?時刻に??
1398 * 変換するケースで使?す?
1399 * 外部から与える数字???続して??があるため?0?数です?
1400 * たとえ??700 ?17:00 , 2150 ?21:30 と?感じです?
1401 * 24時間を?る?合??
1402 * Type1:そ?まま?:00 に戻る?
1403 * Type2:そ?まま?4:00 と、そのまま、加算されて??
1404 * の?種類が用意されて?す?
1405 *
1406 * @og.rev 5.5.2.1 (2012/05/07) 新規追?
1407 *
1408 */
1409 private static final class HybsTimeFormat extends DecimalFormat {
1410 /** For serialization. */
1411 private static final long serialVersionUID = 201205075512L ;
1412
1413 private final boolean is24repeat ;
1414 private final boolean useDay ;
1415
1416 private final int hsCode ;
1417
1418 /**
1419 * コンストラクター
1420 *
1421 * 引数に、時刻を表す?合?表現の仕方を指定します?
1422 * ?1:そ?まま?4:00 となり??されて??
1423 * ?2:そ?まま?:00 に戻る?(日付?無?
1424 * ?3:そ?まま? 00:00 と日付が付与される?
1425 * ?1:そ?まま?4?0?となり??されて??
1426 * ?2:そ?まま?0?0?に戻る?(日付?無?
1427 * ?3:そ?まま?日 00?0?と日付が付与される?
1428 *
1429 * @param type 時刻の表示方?[E1/E2/E3/H1/H2/H3]
1430 */
1431 public HybsTimeFormat( final String inType ) {
1432 super();
1433
1434 DecimalFormatSymbols sym = new DecimalFormatSymbols();
1435 if( "E1".equals( inType ) ) {
1436 applyPattern( "#0.00" );
1437 sym.setDecimalSeparator( ':' );
1438 is24repeat = false; useDay = false;
1439 }
1440 else if( "E2".equals( inType ) ) {
1441 applyPattern( "#0.00" );
1442 sym.setDecimalSeparator( ':' );
1443 is24repeat = true; useDay = false;
1444 }
1445 else if( "E3".equals( inType ) ) {
1446 applyPattern( "#,#0.00" );
1447 sym.setDecimalSeparator( ':' );
1448 sym.setGroupingSeparator( ' ' );
1449 is24repeat = true; useDay = true;
1450 }
1451 else if( "H1".equals( inType ) ) {
1452 applyPattern( "#0.00? );
1453 sym.setDecimalSeparator( '? );
1454 is24repeat = false; useDay = false;
1455 }
1456 else if( "H2".equals( inType ) ) {
1457 applyPattern( "#0.00? );
1458 sym.setDecimalSeparator( '? );
1459 is24repeat = true; useDay = false;
1460 }
1461 else if( "H3".equals( inType ) ) {
1462 applyPattern( "#,#0.00? );
1463 sym.setDecimalSeparator( '? );
1464 sym.setGroupingSeparator( '日' );
1465 is24repeat = true; useDay = true;
1466 }
1467 else {
1468 String errMsg = "timeFormatType は?E1/E2/E3/H1/H2/H3) から?してください。timeFormatType=[" + inType + "]" ;
1469 throw new HybsSystemException( errMsg );
1470 }
1471 setDecimalFormatSymbols( sym );
1472
1473 hsCode = super.hashCode() + Boolean.valueOf(is24repeat).hashCode() + Boolean.valueOf(useDay).hashCode();
1474 }
1475
1476 /**
1477 * double をフォーマットして??を作?しま? format(double,StringBuffer,FieldPosition) のオーバ?ライ?)
1478 *
1479 * timeFormatType によって、データの処?変わります?
1480 * ?1:そ?まま?4:00 となり??されて??
1481 * ?2:そ?まま?:00 に戻る?(日付?無?
1482 * ?3:そ?まま? 00:00 と日付が付与される?
1483 * ?1:そ?まま?4?0?となり??されて??
1484 * ?2:そ?まま?0?0?に戻る?(日付?無?
1485 * ?3:そ?まま?日 00?0?と日付が付与される?
1486 *
1487 * @param number フォーマットす?double
1488 * @param result ?ストを追?る位置
1489 * @param fieldPos 入力では、?であれば位置合わせフィールド? 出力では、その位置合わせフィールド?オフセ?
1490 * @return フォーマットされた数値??
1491 */
1492 public StringBuffer format( final double number, final StringBuffer result, final FieldPosition fieldPos ) {
1493 int day = (int)(number/100/24); // 日付?端数は?捨てる?
1494 int hour = (int)(number/100); // 時間のみ取り出す?
1495 if( is24repeat ) { hour = hour%24; } // ?4時間を?た?合?余りのみ使用する?
1496
1497 int minute = (int)((number%100)*0.6); // 0.6 = 60/100 の事?100 ?60?となる?
1498
1499 double timeVal = hour + minute/100.0 ;
1500 if( useDay ) { timeVal = timeVal + day*100 ; } // 端数を?り捨てた日付に対して?00倍しておく?
1501 return super.format( timeVal, result, fieldPos );
1502 }
1503
1504 /**
1505 * こ?オブジェクトと?されたオブジェクトを比?ます?
1506 *
1507 * @og.rev 5.5.2.4 (2012/05/16) 新規追?findbug対?
1508 *
1509 * @param anObject 比?れるオブジェク?
1510 * @return ?されたオブジェクトが等し??合? true、そ?な??合? false
1511 */
1512 public boolean equals( final Object anObject ) {
1513 return this == anObject;
1514 }
1515
1516 /**
1517 * こ?オブジェクト?ハッシュコードを取得します?
1518 *
1519 * @og.rev 5.5.2.4 (2012/05/16) 新規追?findbug対?
1520 *
1521 * @return ハッシュコー?
1522 */
1523 public int hashCode() {
1524 return hsCode;
1525 }
1526 }
1527
1528 /**
1529 * こ?オブジェクト???表現を返します?
1530 * 基本???目?使用します?
1531 *
1532 * @return こ?クラスの??表現
1533 */
1534 @Override
1535 public String toString() {
1536 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1537
1538 rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
1539 rtn.append( "chartType [" ).append( chartType ).append( "]" ).append( HybsSystem.CR );
1540 rtn.append( "valueLabel [" ).append( valueLabel ).append( "]" ).append( HybsSystem.CR );
1541 rtn.append( "markValues [" ).append( Arrays.toString( markValues ) ).append( "]" ).append( HybsSystem.CR );
1542 rtn.append( "markColors [" ).append( Arrays.toString( markColors ) ).append( "]" ).append( HybsSystem.CR );
1543 rtn.append( "lowerBound [" ).append( lowerBound ).append( "]" ).append( HybsSystem.CR );
1544 rtn.append( "upperBound [" ).append( upperBound ).append( "]" ).append( HybsSystem.CR );
1545 rtn.append( "useGradient [" ).append( useGradient ).append( "]" ).append( HybsSystem.CR );
1546 rtn.append( "shapesVisible [" ).append( shapesVisible ).append( "]" ).append( HybsSystem.CR );
1547 rtn.append( "useDottedLine [" ).append( useDottedLine ).append( "]" ).append( HybsSystem.CR );
1548
1549 return rtn.toString();
1550 }
1551 }