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