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    }