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.chart.plot.ValueMarker;
037    import org.jfree.chart.axis.NumberAxis;
038    import org.jfree.chart.axis.NumberTickUnit;
039    import org.jfree.chart.renderer.category.CategoryItemRenderer;
040    import org.jfree.chart.renderer.category.BarRenderer;
041    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
042    import org.jfree.chart.labels.CategoryItemLabelGenerator;
043    import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
044    import org.jfree.chart.urls.CategoryURLGenerator;
045    import org.jfree.ui.RectangleInsets;
046    import org.jfree.ui.TextAnchor;
047    
048    /**
049     * ChartDataset は、Dataset および、JFreeChart の個別属æ?を管ç�?�—てã�?‚‹ãƒ??タ管ç�?‚¯ラスですã?
050     * JFreeChart のグラフ合成機è?のための、å?別のグラフ描画属æ?を管ç�?�—てã�?�¾すã?
051     * å†?ƒ¨çš?�«、引数のæ–?­—å?ã‚?JFreeChart のå�?‚ªブジェクトへの変換なども行ってã�?�¾すã?
052     *
053     * @version  0.9.0      2007/06/21
054     * @author       Kazuhiko Hasegawa
055     * @since        JDK1.1,
056     */
057    public class ChartDataset {
058    
059            private Dataset         dataset                 = null;         // Dataset オブジェクãƒ?
060            private String          query                   = null;         // 実行クエリー
061            private String          chartType               = null;         // チャートã?種é¡?
062            private boolean         baseLegend              = true;         // シリーズ単位ã?凡ä¾?の表示可否
063            private String          valueLabel              = null;
064            private double[]        markValues              = null;         // doubleの配å?
065            private Color[]         markColors              = new Color[] { Color.RED };    // Colorの配å?
066            private Color[]         markOverColors  = null;         // 4.0.3.0 (2008/01/07) マã?カーラインのè¶?�Ž色
067            private boolean         useMarkAnchor   = true;         // 4.1.1.0 (2008/02/04) 設定å?をラベル表示するかどã�?�‹
068            private int                     dynamicOCNo             = -1;           // 4.1.1.0 (2008/02/04) 動的なマã?カーラインの基準シリーズ番号
069            private int                     dynamicOCadrs   = -1;           // 4.1.1.0 (2008/02/21) 動的なマã?カーラインの基準番号
070            private String          lowerBound              = null;         // double
071            private String          upperBound              = null;         // double
072            private String          tickSize                = null;         // double       4.0.3.0 (2008/01/07)
073            private boolean         useGradient     = false;
074            private boolean         shapesVisible   = true;
075            private Color[]         shapeColors             = null;         // 4.0.3.0 (2008/01/07) ãƒ??タ毎にShapeをå?り替える時ã?色æŒ?®?
076            private String          shapeScale              = null;         // 4.1.1.0 (2008/02/04) 基本形 Shape の表示倍率(double)
077            private boolean         useDottedLine   = false;
078            private Color[]         seriesColors    = null;         // シリーズに対応した色æŒ?®?
079            private boolean         isLabelsVisible = true;         // 4.0.2.0 (2007/12/20) (縦軸)のラベルを表示するかどã�?�‹
080            private boolean         isMarksVisible  = true;         // 4.0.2.0 (2007/12/20) (縦軸)のマã?カーを表示するかどã�?�‹
081            private boolean         isItemValVisible= false;        // 4.1.1.0 (2008/02/04) ãƒ??タの値(itemText)を表示するかどã�?�‹
082            private boolean         isItemLastVisible= false;       // 4.1.2.0 (2008/03/12) ãƒ??タの値(itemText)でæœ?¾Œã?み表示するかどã�?�‹
083            private boolean         useItemLabelSep = true;         // 4.1.2.0 (2008/03/12) ãƒ??タの値(itemText)の表示に桁区åˆ?‚Šæ–?­—を使用するかどã�?�‹
084            private String          barWidth                = null;         // 4.0.3.0 (2008/01/07) バã?å¹?double)
085            private String          maxBarWidth             = null;         // 4.0.2.0 (2007/12/20) バã?å¹??æœ?¤§値(0.0??.0)
086    //      private double          chartOffset             = 0.0;          // 4.1.1.0 (2008/02/04) グラフã?書きå?し位置(double)
087            private String          itemMargin              = null;         // 4.0.2.0 (2007/12/20) バã?アイãƒ?ƒ のマã?ジン(0.0??.0)
088            private String          visibleLimit    = null;         // 4.0.3.0 (2008/01/07) 表示下限値(これ以下ã?ãƒ??タは未表示)
089            private String          valueInset              = null;         // 4.0.3.0 (2008/01/07) 縦軸表示領域INSET値
090            private double          domainMargin    = 0.0;          // 4.1.1.0 (2008/02/14) グラフã?書きå?し位置の調整比率
091    
092            private String          timeFormatType  = null;         // 5.5.2.1 (2012/05/07) 時刻の表示方æ³?E1/E2/E3/H1/H2/H3)
093            private boolean         useVerticalLabels = false;      // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書ã�?false/縦書ã�?true)
094    
095            /**
096             * Connection と query æ–?­—å?から、Dataset オブジェクトを作æ?しますã?
097             *
098             * setChartType( String ) でæŒ?®šされたチャートタイプに応じて、Datasetオブジェクãƒ?
099             * を構築しますã?
100             * Dataset クラスはã€?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX のç®?‰€ã‚?
101             * ChartFactory クラスのチャートタイプ変換表に基づã�?�¦求めますã?
102             * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
103             * ※ Value は、conn ã‚?sql を使用してã�?�¾せん。å?は、markValues を使用してã�?�¾すã?
104             *    これは、現状の暫定方法であり、今後ã?変わる可能性がありますã?
105             *
106             * @og.rev 4.0.0.0 (2007/11/28) new Double(double) â‡?Double.valueOf(double) 変更
107             *
108             * @param       conn    Datasetの取得å?のコネクション
109             * @param       sql     取得するクエリーæ–?­—å?
110             * @throws SQLException ãƒ??タベã?ス実行エラーが発生したå?å�?
111             */
112            public void makeDataset( final Connection conn,final String sql ) throws SQLException {
113                    dataset = ChartFactory.newDataset( conn,sql,chartType );
114                    query   = sql ;
115    
116                    // 暫定的対応ã?本当ã?、SQL を実行してそã?値をセãƒ?ƒˆすべã�?
117                    if( dataset instanceof DefaultValueDataset ) {
118                            if( markValues != null && markValues.length > 0 ) {
119                                    ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
120                            }
121                            else {
122                                    String errMsg = "markValues が指定されてã�?�¾せんã€?;
123                                    throw new HybsSystemException( errMsg );
124                            }
125                    }
126            }
127    
128            /**
129             * DBTableModelオブジェクトからã?Dataset オブジェクトを作æ?しますã?
130             *
131             * setChartType( String ) でæŒ?®šされたチャートタイプに応じて、Datasetオブジェクãƒ?
132             * を構築しますã?
133             *
134             * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
135             * ※ Value は、DBTableModel を使用してã�?�¾せん。å?は、markValues を使用してã�?�¾すã?
136             *    これは、現状の暫定方法であり、今後ã?変わる可能性がありますã?
137             *
138             * @og.rev 5.3.0.0 (2010/12/01) 新規追åŠ?
139             *
140             * @param       table   Datasetの取得å?のãƒ??ブルモãƒ?ƒ«
141             */
142            public void makeDataset( final DBTableModel table ) {
143                    dataset = ChartFactory.newDataset( table,chartType );
144    
145                    // 暫定的対応ã?本当ã?、SQL を実行してそã?値をセãƒ?ƒˆすべã�?
146                    if( dataset instanceof DefaultValueDataset ) {
147                            if( markValues != null && markValues.length > 0 ) {
148                                    ((DefaultValueDataset)dataset).setValue( Double.valueOf( markValues[0] ) );
149                            }
150                            else {
151                                    String errMsg = "markValues が指定されてã�?�¾せんã€?;
152                                    throw new HybsSystemException( errMsg );
153                            }
154                    }
155            }
156    
157            /**
158             * NumberAxis オブジェクトを作æ?しますã?
159             *
160             * NumberAxis オブジェクトã?、Value(縦軸)の属æ?を設定する為に使用されã‚?
161             * オブジェクトですã?
162             * これに、各種属æ?を設定して、å?を返しますã?
163             * 属æ?としては、isLineVisible、isLabelsVisible、isMarksVisibleã€?
164             * range(lowerBound、upperBound) ですã?
165             *
166             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
167             * @og.rev 4.0.3.0 (2008/01/07) 縦軸レンジをå?別設定ã?チックå¹?Œ‡å®?
168             * @og.rev 4.1.1.0 (2008/02/04) HybsNumberAxis 採用
169             * @og.rev 4.1.1.0 (2008/02/04) setAxisLineVisible をã?isMarksVisible 値で設定するã?
170             * @og.rev 5.5.2.1 (2012/05/07) timeFormatType 、useVerticalLabels 属æ?を追åŠ?�™るã?
171             *
172             * @return      縦軸の属æ?(NumberAxisオブジェクãƒ?
173             */
174            protected NumberAxis makeNumberAxis() {
175                    NumberAxis axis = new HybsNumberAxis( valueLabel );
176    
177                    // 縦軸レンジå¹??軸設å®?
178                    if( lowerBound != null ) {
179                            axis.setLowerBound( Double.parseDouble( lowerBound ) );
180                    }
181    
182                    if( upperBound != null ) {
183                            axis.setUpperBound( Double.parseDouble( upperBound ) );
184                    }
185    
186                    if( tickSize != null ) {
187                            axis.setTickUnit( new NumberTickUnit( Double.parseDouble( tickSize ) ) );
188                    }
189    
190                    axis.setTickLabelsVisible( isLabelsVisible );
191                    axis.setTickMarksVisible ( isMarksVisible );
192                    axis.setAxisLineVisible ( isMarksVisible );             // 4.1.1.0 (2008/02/04)
193    
194                    if( valueInset != null ) {
195                            double rightInset = Double.parseDouble( valueInset );
196                            RectangleInsets base = axis.getTickLabelInsets();
197                            RectangleInsets inset = new RectangleInsets(
198                                            base.getUnitType(),             // UnitType unitType
199                                            base.getTop(),                  // double top
200                                            base.getLeft(),                 // double left
201                                            base.getBottom(),               // double bottom
202                                            base.getRight() + rightInset    // double right
203                            );
204                            axis.setTickLabelInsets( inset ) ;
205                    }
206    
207                    // 5.5.2.1 (2012/05/07) 時刻の表示方æ³?E1/E2/E3/H1/H2/H3)
208                    if( timeFormatType != null ) {
209                            axis.setNumberFormatOverride( new HybsTimeFormat( timeFormatType ) );
210                    }
211    
212                    // 5.5.2.1 (2012/05/07) ラベルの表示向き(横書ã�?false/縦書ã�?true)
213                    if( useVerticalLabels ) {
214                            axis.setVerticalTickLabels( true );             // 処ç�?š„には冗長ã€?
215                    }
216    
217                    return axis;
218            }
219    
220            /**
221             * 検索を行う クエリーæ–?­—å?を返しますã?
222             *
223             * これは、makeDataset( Connection ,String ) メソãƒ?ƒ‰でæŒ?®šしたã?
224             * sql 属æ?の設定å?そã?もã?ですã?
225             *
226             * @return      取得するクエリーæ–?­—å?
227             */
228            public String getQuery() { return query; }
229    
230            /**
231             * Dataset オブジェクトを取得しますã?
232             *
233             * makeDataset( Connection,String ) で、予めオブジェクトを構築しておく
234             * å¿?¦�がありますã?
235             * Dataset クラスはã€?org.jfree.data.jdbc.JDBCXXXXDataset" の XXXX のç®?‰€ã‚?
236             * ChartFactory クラスのチャートタイプ変換表に基づã�?�¦求めますã?
237             * 現状は、Category , Pie , XY の?“種類と、Value が指定可能ですã?
238             *
239             * @return      Datasetオブジェクãƒ?
240             * @see         #makeDataset( Connection ,String )
241             */
242            protected Dataset getDataset() { return dataset; }
243    
244            /**
245             * Dataset オブジェクトを作æ?する時ã?チャートタイプをæŒ?®šしますã?
246             *
247             * チャートタイãƒ?は、外部からチャートをæŒ?®šするã?に便利なように、キーåŒ?
248             * されてã�?�¾すã?こã?キーに基づã�?�¦、ChartFactory クラスの
249             * チャートタイプ変換表に基づã�?�¦、レンãƒ?ƒ©ーã‚??ãƒ??タセãƒ?ƒˆを作æ?しますã?
250             *
251             * @param       type チャートタイãƒ?
252             */
253            public void setChartType( final String type ) {
254                    if( type != null && type.length() > 0 ) {
255                            chartType = type;
256                    }
257            }
258    
259            /**
260             * Dataset オブジェクトを作æ?する時ã?チャートタイプを取得しますã?
261             *
262             * チャートタイãƒ?は、外部からチャートをæŒ?®šするã?に便利なように、キーåŒ?
263             * されてã�?�¾すã?こã?キーに基づã�?�¦、ChartFactory クラスの
264             * チャートタイプ変換表に基づã�?�¦、レンãƒ?ƒ©ーã‚??ãƒ??タセãƒ?ƒˆを作æ?しますã?
265             *
266             * @return      チャートタイãƒ?
267             */
268            protected String getChartType() { return chartType; }
269    
270            /**
271             * シリーズ単位ã?凡ä¾?の表示可否を設定しますã?
272             *
273             * @param       baseLeg シリーズ単位ã?凡ä¾?の表示可否
274             */
275            public void setBaseLegend( final boolean baseLeg ) {
276                    baseLegend = baseLeg;
277            }
278    
279            /**
280             * Renderer 関連の共通インターフェースを返しますã?
281             *
282             * setChartType( String )で設定された、チャートタイプに応じたã?レンãƒ?ƒ©ーã‚?
283             * 返しますã?
284             * 対応表は、ChartFactory クラスに持ってã�?�¾すã?
285             * 基本çš?�«は、チャートタイãƒ?は、この、レンãƒ?ƒ©ー名称から決定してã�?�¾すã?
286             *
287             * @og.rev 4.1.1.0 (2008/02/04) useDynamicOC , isItemValVisible , shapeScale 属æ?追åŠ?
288             * @og.rev 4.1.1.0 (2008/02/04) クリãƒ?‚«ブル・マップã?設定を移動ã?serNo 引数追åŠ?
289             * @og.rev 4.1.1.0 (2008/02/04) 返す型を CategoryItemRenderer に変更
290             * @og.rev 4.1.1.0 (2008/02/16) HybsStackedBarRenderer に domainMargin を設å®?
291             * @og.rev 4.1.1.0 (2008/02/19) Shapes の設定をこちらに移動ã?
292             * @og.rev 4.1.2.0 (2008/03/12) isItemLastVisible の設å®?
293             *
294             * @param       serNo   シリアルNo
295             * @param       urlGen CategoryURLGeneratorオブジェクãƒ?
296             *
297             * @return      レンãƒ?ƒ©ーの共通インターフェース
298             * @see         org.jfree.chart.renderer.category.CategoryItemRenderer
299             * @see         org.jfree.chart.renderer.xy.XYItemRenderer
300             */
301            protected CategoryItemRenderer getRenderer( final int serNo , final CategoryURLGenerator urlGen ) {
302                    TypeRenderer typeRen = ChartFactory.getTypeRenderer( chartType );
303                    CategoryItemRenderer rend = (CategoryItemRenderer)typeRen.getRenderer();
304    
305                    // 4.1.1.0 (2008/02/19) LineAndShapeRenderer オブジェクトã?場合ã?設å®?
306                    if( rend instanceof LineAndShapeRenderer ) {
307                            LineAndShapeRenderer lsRend = (LineAndShapeRenderer)rend;
308    
309                            // シェーãƒ?四è§?表示。serNo å†??表示は、å?別に行いますã?
310                            lsRend.setBaseShapesVisible( shapesVisible );
311                            if( serNo >= 0 ) {
312                                    lsRend.setSeriesShapesVisible( serNo,true );
313                            }
314    
315                            // 4.1.1.0 (2008/02/04) 繰返しshapeの開始番号(初期値:??
316                            ShapeList shapeList = new ShapeList();
317                            for( int i=0; i<shapeList.size(); i++ ) {
318                                    lsRend.setSeriesShape( i,shapeList.getShape(i) );
319                            }
320                    }
321    
322                    // 4.0.3.0 (2008/01/07) HybsLineRenderer 特別処ç�?
323                    if( rend instanceof HybsLineRenderer ) {
324                            HybsLineRenderer hyRend = (HybsLineRenderer)rend ;
325                            if( shapeColors != null ) {
326                                    hyRend.setShapeColors( shapeColors );
327                            }
328    
329                            // 4.1.1.0 (2008/02/04) shapeの大きさの倍率(初期値:null)
330                            hyRend.setShapeScale( shapeScale );
331    
332                            // 縦軸マã?カーのè¶?�Ž時Shape色æŒ?®?未使用時ã? null)
333                            if( markOverColors != null ) {
334                                    hyRend.setValueMarkOverColors( getValueMarkOverColors(),dynamicOCNo );
335                            }
336    
337                            // 表示下限値(これ以下ã?ãƒ??タは未表示)の値(double)を指å®?
338                            if( visibleLimit != null ) {
339                                    hyRend.setVisibleLimit( Double.valueOf( visibleLimit ) );
340                            }
341                    }
342    
343                    // 4.0.2.0 (2007/12/20) BarRenderer オブジェクトã?場合にマã?ジン等を設定しますã?
344                    if( rend instanceof BarRenderer ) {
345                            BarRenderer barRend = (BarRenderer)rend ;
346    
347                            // 棒ã?間を表示領域を1として小数点以下ã?数値でå¹?‚’設定すã‚?0.0??.0)
348                            if( itemMargin != null ) {
349                                    double margin = Double.parseDouble( itemMargin );
350                                    barRend.setItemMargin( margin ) ;
351                            }
352    
353                            // 棒ã?å¹?‚’設定すã€?¡¨示領域を1として小数点以下ã?数値でå¹?‚’設定すã‚?0.0??.0)
354                            if( maxBarWidth != null ) {
355                                    barRend.setMaximumBarWidth( Double.parseDouble( maxBarWidth ) ) ;
356                            }
357                    }
358    
359                    // 4.1.1.0 (2008/02/16) HybsStackedBarRenderer オブジェクトã?場合に domainMargin を設定しますã?
360                    if( rend instanceof HybsStackedBarRenderer ) {
361                            HybsStackedBarRenderer stBarRend = (HybsStackedBarRenderer)rend ;
362    
363                            stBarRend.setDomainMargin( domainMargin ) ;
364                    }
365    
366                    // シリーズ単位ã?凡ä¾?の表示可否
367                    rend.setBaseSeriesVisibleInLegend( baseLegend );
368    
369                    // 4.1.1.0 (2008/02/04) ãƒ??タの値(itemText)を表示するかどã�?�‹
370                    if( isItemValVisible ) {
371    //                      CategoryItemLabelGenerator labelGen = new StandardCategoryItemLabelGenerator();
372    
373                            // 4.1.2.0 (2008/03/12) 桁区åˆ?‚Šæ–?­—を使用するかどã�?�‹
374                            NumberFormat numForm = NumberFormat.getInstance();
375                            numForm.setGroupingUsed( useItemLabelSep );
376    
377                            CategoryItemLabelGenerator labelGen
378                                    = new StandardCategoryItemLabelGenerator(
379                                                            StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
380                                                            numForm
381                                    );
382                            rend.setBaseItemLabelGenerator( labelGen );
383    
384                            if( serNo >= 0 ) {
385                                    rend.setSeriesItemLabelsVisible( serNo,true );
386                            }
387                            else {
388                                    rend.setBaseItemLabelsVisible( true );
389                            }
390                            // 4.1.1.0 (2008/02/04) 動的なマã?カーラインを使用する場合ã?
391                            // æŒ?®šã?番号は閾値なので、表示しませんã€?
392                            if( dynamicOCNo >= 0 ) {
393                                    rend.setSeriesItemLabelsVisible( dynamicOCNo,false );           // 閾値
394                            }
395    
396                            // 4.1.2.0 (2008/03/12) isItemLastVisible の設å®?
397                            if( isItemLastVisible && rend instanceof HybsDrawItem ) {
398                                    ((HybsDrawItem)rend).setItemLabelLastVisible( true ) ;
399                            }
400                    }
401    
402                    // クリãƒ?‚«ブル・マッãƒ?
403                    if( urlGen != null ) {
404                            if( serNo >= 0 ) {
405                                    rend.setSeriesItemURLGenerator( serNo,urlGen );
406                            }
407                            else {
408                                    rend.setBaseItemURLGenerator( urlGen );
409                            }
410                    }
411    
412                    return rend;
413            }
414    
415            /**
416             * 縦軸の表示名称を指定しますã?
417             *
418             * @param   valLbl 縦軸の表示名称
419             */
420            public void setValueLabel( final String valLbl ) {
421                    if( valLbl != null && valLbl.length() > 0 ) {
422                            valueLabel = valLbl;
423                    }
424            }
425    
426            /**
427             * 縦軸の表示名称を取得しますã?
428             *
429             * @return      縦軸の表示名称
430             */
431            protected String getValueLabel() { return valueLabel; }
432    
433            /**
434             * マã?カーラインの設定å?配å?を指定しますã?
435             *
436             * æŒ?®šã?値にマã?カーラインを引きますã?
437             * 色は、setMarkColor( String ) でæŒ?®šしますã?
438             * markColors と、あわせて設定するå¿?¦�がありますã?
439             * markColorsがã?æŒ?®šされてã�?�ªã�??合ã?、Color.RED で マã?カーされますã?
440             * dynamicOCNo を使用する場合ã?、そのValues の並びのç®?‰€にã€?
441             * "G"  とã�?�†æ–?­—å?を設定して下さã�??
442             * 例ï¼?000,G  基準1ã?ã€?000の直線ã?基準2ã?、グラãƒ?とã�?�†意味ã€?
443             *
444             * @og.rev 4.1.1.0 (2008/02/21) 基準ラインにグラフを使用する場合ã?位置æŒ?®?
445             *
446             * @param       mkVal   マã?カーラインの設定å?配å?
447             * @see         #setMarkColors( String[] )
448             */
449            public void setMarkValues( final String[] mkVal ) {
450                    if( mkVal != null && mkVal.length > 0 ) {
451                            int size = mkVal.length;
452                            markValues = new double[size];
453                            for( int i=0; i<size; i++ ) {
454                                    if( "G".equals( mkVal[i] ) ) {
455                                            dynamicOCadrs = i;
456                                            markValues[i] = 0.0;
457                                    }
458                                    else {
459                                            markValues[i] = Double.parseDouble( mkVal[i] );
460                                    }
461                            }
462                    }
463            }
464    
465            /**
466             * マã?カーラインの色をé?列指定しますã?
467             *
468             * マã?カーラインとは、縦軸設定ã?ラインの事で、縦軸の設定å?(markValues)に
469             * 横方向にラインを付与しますã?こã?ラインの色をã?カンマ区åˆ?‚Š形式で
470             * æŒ?®šしますã?
471             * markValues と、あわせて設定するå¿?¦�がありますã?
472             * 個数が異なるå?合ã?、markValues が優先されã?無æŒ?®šã?場合ã?、Color.REDで
473             * 表示されますã?
474             *
475             * <pre>
476             *      BLACK   , BLUE   , CYAN , DARK_GRAY , GRAY  , GREEN , LIGHT_GRAY ,
477             *      MAGENTA , ORANGE , PINK , RED       , WHITE , YELLOW , (PURPLE)
478             *      #XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
479             * </pre>
480             *
481             * @param   mkCol マã?カーラインの色配å?
482             * @see         java.awt.Color#BLACK
483             * @see         #setMarkValues( String[] )
484             */
485            public void setMarkColors( final String[] mkCol ) {
486                    if( mkCol != null && mkCol.length > 0 ) {
487                            int size = mkCol.length;
488                            markColors = new Color[size];
489                            for( int i=0; i<size; i++ ) {
490                                    markColors[i] = StringUtil.getColorInstance( mkCol[i] );
491                            }
492                    }
493            }
494    
495            /**
496             * マã?カーライン描画時に、その設定å?を表示しますã?
497             *
498             * マã?カーラインの縦軸の設定å?(markValues)に、設定å?をラベル表示しますã?
499             * 位置は、TextAnchor.BASELINE_LEFT 固定ですã?
500             * 初期値は、表示する(true)ですã?
501             *
502             * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
503             *
504             * @param   useAnchor true:設定å?を表示するã€?
505             */
506            public void setUseMarkAnchor( final boolean useAnchor ) {
507                    useMarkAnchor = useAnchor ;
508            }
509    
510            /**
511             * マã?カーラインのè¶?�Ž時ã?Shape色をカンマ区åˆ?‚Š形式でè¤?•°æŒ?®šしますã?
512             *
513             * HybsLine でのみ使用可能ですã?
514             * マã?カーラインを使用する場合に、そのラインをè¶?�ˆなã�?‰²、è¶?�ˆる色を指定しますã?
515             * こã?色のæŒ?®šã?、ã?ーカーラインの色ã‚??ーカーラインの設定å?の個数?‹1に
516             * なりますã?つまりã?色?‘:設定å??‘:色?’:設定å??’:色??となりますã?
517             * 色?‘ã?、設定å??‘より小さã�??合に使用され、色?’ã?、設定å??‘より大きくã€?
518             * 設定å??’より小さã�??合ã?色?“ã?、設定å??’より大きい場合になりますã?
519             *
520             * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
521             * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
522             * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
523             * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
524             * markValues と、あわせて設定するå¿?¦�がありますã?
525             * どちらかがã?æŒ?®šされてã�?�ªã�??合ã?、ã?ーカー表示されませんã€?
526             * <pre>
527             *      BLACK   , BLUE   , CYAN , DARK_GRAY , GRAY  , GREEN , LIGHT_GRAY ,
528             *      MAGENTA , ORANGE , PINK , RED       , WHITE , YELLOW , (PURPLE)
529             *      #XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
530             * </pre>
531             *
532             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
533             *
534             * @param       ovCol   マã?カーラインのè¶?�Ž時ã?Shape色
535             * @see         java.awt.Color#BLACK
536             */
537            public void setMarkOverColors( final String[] ovCol ) {
538                    if( ovCol != null && ovCol.length > 0 ) {
539                            int size = ovCol.length;
540                            markOverColors = new Color[size];
541                            for( int i=0; i<size; i++ ) {
542                                    markOverColors[i] = StringUtil.getColorInstance( ovCol[i] );
543                            }
544                    }
545            }
546    
547            /**
548             * マã?カーラインのè¶?�Ž時ã?Shape色を規定するオブジェクトを返しますã?
549             *
550             * HybsLine でのみ使用可能ですã?
551             * 設定情報が存在しなã�??合ã?、null を返しますã?
552             *
553             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
554             * @og.rev 4.1.1.0 (2008/02/04) markColors 属æ?追åŠ?
555             * @og.rev 4.1.1.1 (2008/02/25) markValues での "G" æŒ?®šをè€??
556             *
557             * @return      マã?カーラインのè¶?�Ž時ã?Shape色管ç�?‚ªブジェクãƒ?
558             */
559            private ValueMarkOverColors getValueMarkOverColors() {
560                    ValueMarkOverColors vmoc = null;
561    
562                    if( markValues != null && markOverColors != null &&
563                            markValues.length + 1 == markOverColors.length &&
564                            markValues.length >= 1 ) {
565                                    int dynAdrs = (dynamicOCadrs >= 0) ? dynamicOCadrs : 0 ;
566    
567                                    vmoc = new ValueMarkOverColors(
568                                                                    markValues,
569                                                                    markOverColors,
570                                                                    markColors[dynAdrs],
571                                                                    dynamicOCadrs
572                                                    );
573                    }
574    
575                    return vmoc ;
576            }
577    
578            /**
579             * 動的なマã?カーラインの基準シリーズ番号を設定しまã�?初期値:-1)ã€?
580             *
581             * 動的なマã?カーラインを使用する場合ã?、基準å?となるシリーズ番号を指定しますã?
582             *
583             * マã?カーラインのæœ?¸‹位閾値に相当しますã?これは、グラフ化されますがã€?
584             * Shape は自動的に削除されますã?
585             * こã?設定を使用する場合ã?æœ??のãƒ??タには、å¿?�šShapeが付きますã?それ以外ã?
586             * ãƒ??タに、Shape を付けるかどã�?�‹は、shapesVisible 属æ?でæŒ?®šしますã?
587             * こã?線ã?色は、markColors でæŒ?®šしたã?æœ?¸‹位ã?色になりますã?またã?
588             * markValues でæŒ?®šしたã?æœ?¸‹位ã?値は、使用されません。たã�?�—、色æŒ?®šã?
589             * 関係上ã?設定しておくå¿?¦�がありますã?
590             * またã?isValueVisible == true で、設定å?の値表示を行う場合も、最下位ã?
591             * 値は表示しなã�?‚ˆã�?�«しますã?
592             * 初期値は、使用しなã�?-1)ですã?
593             *
594             * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
595             * @og.rev 4.1.1.0 (2008/02/19) setUseDynamicOC �setDynamicOCNo
596             *
597             * @param       ocNo    動的なマã?カーラインの基準シリーズ番号
598             */
599            public void setDynamicOCNo( final int ocNo ) {
600                    dynamicOCNo = ocNo;
601            }
602    
603            /**
604             * マã?カーラインの ValueMarker オブジェクトé?列を返しますã?
605             *
606             * マã?カーライン は、markValues(double配å?) と markColors(Color配å?)
607             * より、ValueMarker オブジェクトをã€??次配å?化してã�?��ますã?
608             * useMarkAnchor == true の場合ã?、設定å?(markValues) の Anchor ã‚?
609             * 表示しますã?位置は、TextAnchor.BASELINE_LEFT 固定ですã?
610             * dynamicOCNo が指定された場合ã?、最下位ã?閾値は使用しませんã€?
611             *
612             * @og.rev 4.1.1.0 (2008/02/04) useMarkAnchor 属æ?追åŠ?
613             * @og.rev 4.1.1.0 (2008/02/04) 動的なオーバã?カラー useDynamicOC 属æ?追åŠ?
614             *
615             * @return      マã?カーラインのオブジェクトé?åˆ?not null)
616             * @see         java.awt.Color#BLACK
617             * @see         #setMarkValues( String[] )
618             * @see         #setMarkColors( String[] )
619             * @see         #setUseMarkAnchor( boolean )
620             */
621            protected ValueMarker[] getValueMarkers() {
622                    List<ValueMarker> markerList = new ArrayList<ValueMarker>();
623                    int size = (markValues == null) ? 0 : markValues.length;
624                    for( int i=0; i<size; i++ ) {
625                            if( i != dynamicOCadrs ) {
626                                    ValueMarker marker = new ValueMarker( markValues[i] );
627                                    marker.setPaint( markColors[i]  );
628                                    if( useMarkAnchor ) {
629                                            marker.setLabel( String.valueOf( markValues[i] ) );
630                                            marker.setLabelTextAnchor( TextAnchor.BASELINE_LEFT );
631                                    }
632                                    markerList.add( marker );
633                            }
634                    }
635    
636                    return markerList.toArray( new ValueMarker[markerList.size()] );
637            }
638    
639            /**
640             * チャートã?縦軸のæœ?°�å?をセãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
641             *
642             * 何もæŒ?®šしなã�??合ã?、データのæœ?°�å?から、è?動的に計算しますã?
643             *
644             * @param   lowBnd 縦軸のæœ?°�å?
645             * @see         #setUpperBound( String )
646             */
647            public void setLowerBound( final String lowBnd ) {
648                    if( lowBnd != null && lowBnd.length() > 0 ) {
649                            lowerBound = lowBnd;
650                    }
651            }
652    
653            /**
654             * チャートã?縦軸のæœ?¤§値をセãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
655             *
656             * 何もæŒ?®šしなã�??合ã?、データのæœ?¤§値から、è?動的に計算しますã?
657             *
658             * @param   upBnd 縦軸のæœ?¤§値
659             * @see         #setLowerBound( String )
660             */
661            public void setUpperBound( final String upBnd ) {
662                    if( upBnd != null && upBnd.length() > 0 ) {
663                            upperBound = upBnd;
664                    }
665            }
666    
667            /**
668             * チャートã?縦軸の目盛ã?å¹?‚’セãƒ?ƒˆしまã�?初期値:自動計ç®?ã€?
669             *
670             * 何もæŒ?®šしなã�??合ã?、データのç¯?›²から、è?動的に計算しますã?
671             *
672             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
673             *
674             * @param   size 縦軸のチック(目ç›?のå¹?
675             */
676            public void setTickSize( final String size ) {
677                    if( size != null && size.length() > 0 ) {
678                            tickSize = size;
679                    }
680            }
681    
682            /**
683             * バã?チャートã?グラãƒ??ション処ç�?‚’行うかどã�?�‹[true/false]をセãƒ?ƒˆしまã�?初期値:true)ã€?
684             *
685             * 通常のバã?チャートã?、単ä¸?‰²表示で表されますが、これにグラãƒ??ション効果を
686             * 付加するかどã�?�‹を指定しますã?
687             * 通常のバã?チャートが、少しきれã�?�«見えますã?
688             * 初期値は、true(グラãƒ??ション効果を付与すã‚?ですã?
689             *
690             * @param   useGrad グラãƒ??ション処ç�?[true:する/false:しない]
691             */
692            public void setUseGradient( final boolean useGrad ) {
693                    useGradient = useGrad;
694            }
695    
696            /**
697             * バã?チャートã?グラãƒ??ション処ç�?‚’行うかどã�?�‹を取得しますã?
698             *
699             * 通常のバã?チャートã?、単ä¸?‰²表示で表されますが、これにグラãƒ??ション効果を
700             * 付加するかどã�?�‹を指定しますã?
701             * 通常のバã?チャートが、少しきれã�?�«見えますã?
702             * 初期値は、false(使用しなã�?ですã?
703             *
704             * @return      グラãƒ??ション処ç�?する:true/しなã�?false)
705             * @see     #setUseGradient( boolean )
706             */
707            protected boolean isUseGradient() { return useGradient; }
708    
709            /**
710             * ラインチャートã?ポイントを四角表示するかどã�?�‹を指定しまã�?初期値:false)ã€?
711             *
712             * ラインチャートã?ã€??常、線å?で表され、各ポイントにつã�?�¦もã?線å?で接続されますã?
713             * shapesVisible ã‚?true に設定すると、各ポイントが、線上に四角く表示されã€?
714             * そã?ポイントã?位置をã?容易に判断出来るよã�?�«なりますã?
715             * 初期値は、ã?ーカーをå?れませんã€?
716             *
717             * @param   shVisible ポイントを四角表示するかどã�?�‹
718             */
719            public void setShapesVisible( final boolean shVisible ) {
720                    shapesVisible = shVisible;
721            }
722    
723            /**
724             * ラインチャートã?ポイントを四角表示するかどã�?�‹を取得しますã?
725             *
726             * ラインチャートã?ã€??常、線å?で表され、各ポイントにつã�?�¦もã?線å?で接続されますã?
727             * shapesVisible ã‚?true に設定すると、各ポイントが、線上に四角く表示されã€?
728             * そã?ポイントã?位置をã?容易に判断出来るよã�?�«なりますã?
729             * 初期値は、ã?ーカーをå?れませんã€?
730             *
731             * @return      ポイントを四角表示するかどã�?�‹
732             * @see     #setShapesVisible( boolean )
733             */
734            protected boolean isShapesVisible() { return shapesVisible; }
735    
736            /**
737             * ãƒ??タ毎にShapeをå?り替える時ã?色の繰返しパターンを文字å?配å?でæŒ?®šしますã?
738             *
739             * HybsLine でのみ使用可能ですã?
740             * これは、データそã?もã?がã?繰返し性のある場合に、その繰返し性に対応しã�?
741             * 形状のShape を表示させるå?合に使用しますã?
742             * 繰返しShapeの形状は、JFreeChart のシリーズ毎ã?繰返し標準形状を使用しますã?
743             * 現在のバã?ジョンではã€?¼‘0å?までの繰返しに対応可能ですã?
744             * 繰返し色をã?æŒ?®šしたå?ã�?�‘ã€??に使用されてã�?��ますã?
745             *
746             * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
747             * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
748             * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
749             * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
750             *
751             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
752             *
753             * @param       colors  ãƒ??タ毎ã?色の繰返しパターン(æ–?­—å?配å?)
754             * @see         java.awt.Color#BLACK
755             */
756            public void setShapeColors( final String[] colors ) {
757                    if( colors != null && colors.length > 0 ) {
758                            int size = colors.length;
759                            shapeColors = new Color[size];
760                            for( int i=0; i<size; i++ ) {
761                                    shapeColors[i] = StringUtil.getColorInstance( colors[i] );
762                            }
763                    }
764            }
765    
766            /**
767             * shapeの大きさをå?çŽ?Œ‡定で変更しまã�?初期値:null)ã€?
768             *
769             * ラインチャートã?Shape(å�?‚°ラフã?ポイントã?マã?カー)の大きさはã€??常はã€?
770             * 自動設定されますã?
771             * こã?大きさをã?倍率æŒ?®šで、変更可能ですã?
772             * æŒ?®šã?、double 型ですã?
773             * 初期値は、null は、スケール変更しません(自動設定ã?ままの大きさ)
774             *
775             * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
776             *
777             * @param       scale   shapeの大きさの倍率
778             */
779            public void setShapeScale( final String scale ) {
780                    shapeScale = scale;
781            }
782    
783            /**
784             * ラインチャートã?線をドットラインにするかどã�?�‹を指定しまã�?初期値:false)ã€?
785             *
786             * ラインチャートã?ã€??常、線å?で表されますã?
787             * これに、点線で表すことで、グラフã?違いをã?色ã�?�‘でなく形状でも識別
788             * しやすくすることが可能ですã?
789             * 初期値は、線å?ですã?
790             *
791             * @param   useDotLine ドットラインにするかどã�?�‹
792             */
793            public void setUseDottedLine( final boolean useDotLine ) {
794                    useDottedLine = useDotLine;
795            }
796    
797            /**
798             * ラインチャートã?線をドットラインにするかどã�?�‹を取得しますã?
799             *
800             * ラインチャートã?ã€??常、線å?で表されますã?
801             * これに、点線で表すことで、グラフã?違いをã?色ã�?�‘でなく形状でも識別
802             * しやすくすることが可能ですã?
803             * 初期値は、線å?ですã?
804             *
805             * @return      ドットラインにするかどã�?�‹
806             * @see     #setUseDottedLine( boolean )
807             */
808            protected boolean isUseDottedLine() { return useDottedLine; }
809    
810            /**
811             * è¤?•°チャート描画時ã?チャート色の繰返しパターンを文字å?配å?でæŒ?®šしますã?
812             *
813             * 通常、è¤?•°のチャートを同時に表示させるå?合ã?、縦軸がå?通であればã€?
814             * ?‘回のSelectåˆ?�§è¤?•°ãƒ??タを取得しますã?
815             * こã?、データをシリーズと呼んでおり、これを区別する為に、色をå?けますã?
816             * 初期値は、JFreeChart がè?動で割り振りますã?
817             * これをã?外部からCVS形式で、カンマ区åˆ?‚Šで色コードをæŒ?®šしますã?
818             * æŒ?®šデータが多い場合ã?、多いåˆ??色は使用されません。少なã�??合ã?ã€?
819             * é ?•ªに繰り返して使用されますã?
820             * 例えばã€?¼‘色ã�?�‘æŒ?®šしたå?合ã?、すべてのシリーズが同じ色で表されますã?
821             *
822             * æŒ?®š文字å?は、java.awt.Color クラスのstatic フィールド名でæŒ?®šしますã?
823             * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
824             * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できますã?
825             * またã?#XXXXXX形式ã?16bitRGB表è¨?でも指定可能ですã?
826             *
827             * @param       colors  チャート色の繰返しパターン(æ–?­—å?配å?)
828             * @see         java.awt.Color#BLACK
829             */
830            public void setSeriesColors( final String[] colors ) {
831                    if( colors != null && colors.length > 0 ) {
832                            int size = colors.length;
833                            seriesColors = new Color[size];
834                            for( int i=0; i<size; i++ ) {
835                                    seriesColors[i] = StringUtil.getColorInstance( colors[i] );
836                            }
837                    }
838            }
839    
840            /**
841             * è¤?•°チャート描画時ã?チャート色の繰返しパターンをColor配å?でæŒ?®šしますã?
842             *
843             * @return      チャート色の繰返しパターン(Color配å?)
844             * @see         #setSeriesColors( String[] )
845             */
846            protected Color[] getSeriesColors() {
847                    return seriesColors ;
848            }
849    
850            /**
851             * Value(縦軸)のラベルを表示するかどã�?�‹を指定しまã�?初期値:true[表示する])ã€?
852             *
853             * ValueAxis にて設定される、縦軸æƒ??の、ラベルを表示するかどã�?�‹æŒ?®šしますã?
854             * 初期値は、true(表示する)ですã?
855             *
856             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
857             *
858             * @param       labelsVisible   Value(縦軸)のラベルを表示するかどã�?�‹
859             */
860            public void setValueLabelsVisible( final boolean labelsVisible ) {
861                    isLabelsVisible = labelsVisible;
862            }
863    
864            /**
865             * Value(縦軸)のマã?カーを表示するかどã�?�‹を指定しまã�?初期値:true[表示する])ã€?
866             *
867             * ValueAxis にて設定される、縦軸æƒ??の、ã?ーカーを表示するかどã�?�‹æŒ?®šしますã?
868             * 初期値は、true(表示する)ですã?
869             *
870             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
871             *
872             * @param       marksVisible    Value(縦軸)のマã?カーを表示するかどã�?�‹
873             */
874            public void setValueMarksVisible( final boolean marksVisible ) {
875                    isMarksVisible = marksVisible;
876            }
877    
878            /**
879             * ãƒ??タの値(itemText)を表示するかどã�?�‹[true/false/last]を指定しまã�?初期値:false[表示しない])ã€?
880             *
881             * CategoryItemRenderer 関連のグラフã?設定å?をグラフ上に表示するかどã�?�‹ã‚?
882             * æŒ?®šしますã?
883             * true に設定したå?合ã?通常の場合ã?、すべてのシリーズにラベル表示されますã?
884             * false に設定すると、表示されませんã€?
885             * last を設定すると、各シリーズのæœ?¾Œã?値のみ表示されますã?
886             * ChartCreate クラスに、seriesPikup が設定されてã�?‚‹場合ã?、指定ã?シリーズ
887             * のみの設定å?を表示しã?他ã?値は、表示しませんã€?
888             * 同様に、dynamicOCNo が指定されてã�?‚‹場å�?動的なマã?カーライン)
889             * æŒ?®šã?シリーズはã€?–¾値として使用されるためã?設定å?は表示されませんã€?
890             * ラベルの表示位置は、表示する線グラフã?傾きに応じてラベルの表示場æ‰?‚’
891             * 変えますã?山形、右坂ã?谷形、左å�?に応じて、上中、下右、下中、上右 に
892             * 位置を設定しますã?右にずらすã?はã€?0 ピクセル固定ですã?
893             * 初期値は、false(表示しなã�?ですã?
894             *
895             * @og.rev 4.1.1.0 (2008/02/04) 新規追åŠ?
896             * @og.rev 4.1.2.0 (2008/03/12) æ–?­—å?のまま、受け取りるように変更
897             *
898             * @param       visible ãƒ??タの値の表示のさせ方 [true/false/last]
899             * @see     ChartCreate#setSeriesPikup( int )
900             */
901            public void setItemLabelVisible( final String visible ) {
902                    if( "true".equalsIgnoreCase( visible ) ) {
903                            isItemValVisible = true;
904                    }
905                    else if( "last".equalsIgnoreCase( visible ) ) {
906                            isItemValVisible  = true;
907                            isItemLastVisible = true;
908                    }
909                    else if( visible != null && !"false".equalsIgnoreCase( visible ) ) {
910                            String errMsg = "itemLabelVisible は、ã?true,false,last」から指定してくださいã€?"
911                                                            + visible + "]";
912                            throw new HybsSystemException( errMsg );
913                    }
914            }
915    
916            /**
917             * ãƒ??タの値(itemText)の表示に桁区åˆ?‚Šæ–?­—を使用するかどã�?�‹を指定しますã?
918             *
919             * itemLabelVisible=true 時に、表示されるデータ値ラベルでã€?
920             * NumberFormat してã�?�¾すがã€?¼“桁区åˆ?‚Šæ–?­?123,456,789.0) の
921             * 区åˆ?‚Š記号を表示するかどã�?�‹を指定しますã?
922             * true を指定すると、表示しますã?false では、表示しませんã€?
923             * 初期値は、true(使用する)ですã?
924             *
925             * @og.rev 4.1.2.0 (2008/03/12) 新規追åŠ?
926             *
927             * @param       used    桁区åˆ?‚Šæ–?­—を使用するかどã�?�‹
928             */
929            public void setUseItemLabelSep( final boolean used ) {
930                    useItemLabelSep = used;
931            }
932    
933            /**
934             * 縦軸の表示領域INSET値(double)を指定しますã?
935             *
936             * 縦軸æ–?­—表示領域(NumberAxis)のå¹??追åŠ??を設定しますã?
937             * これはã€??常の表示領域の左側にスペã?スを挿入しますã?
938             * あくまで、追åŠ?�™るå?なので、文字ã?長さã?含まれませんã€?
939             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
940             *
941             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
942             *
943             * @param       inset   Value(縦軸)の表示領域INSET値
944             */
945            public void setValueInset( final String inset ) {
946                    valueInset = inset;
947            }
948    
949            /**
950             * BOXチャートã?バã?å¹?double)を指定しますã?
951             *
952             * BOXチャートã?バã?å¹?double)を指定しますã?
953             * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
954             * 使用した描画のみですã?
955             * 棒グラフã?バã?å¹?Œ‡定ã?、直接、CategoryItemRendererState に設定してã�?�¾すã?
956             * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用ã�?�¦比率でæŒ?®šしますã?
957             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
958             *
959             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
960             *
961             * @param       width   BOXチャートã?バã?å¹?double)
962             */
963            public void setBarWidth( final String width ) {
964                    barWidth = width;
965            }
966    
967            /**
968             * BOXチャートã?バã?å¹?double)を取得しますã?
969             *
970             * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
971             * 使用した描画のみですã?
972             * 棒グラフã?バã?å¹?Œ‡定ã?、直接、CategoryItemRendererState に設定してã�?�¾すã?
973             * 通常は、barMaxWidth(0.0??.0)とbarItemMargin(0.0??.0)を用ã�?�¦比率でæŒ?®šしますã?
974             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
975             *
976             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
977             *
978             * @return      BOXチャートã?バã?å¹?double)のæ–?­—å?
979             */
980            protected String getBarWidth() {
981                    return barWidth ;
982            }
983    
984            /**
985             * BOXチャートã?バã?å¹??æœ?¤§値(0.0??.0)を指定しますã?
986             *
987             * BOXチャートã?バã?å¹??比率のæœ?¤§値を指定しますã?
988             * 表示領域を1として小数点以下ã?数値で棒ã?å¹?‚’設定しますã?
989             * 設定したå¹?�«無ç�?�Œある時ã?適当なサイズに調整されますã?
990             * (小さくしたときには棒が線ã?ようになã‚?
991             * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
992             * 使用した描画のみですã?
993             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
994             *
995             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
996             *
997             * @param       barWidth        BOXチャートã?バã?å¹??æœ?¤§値(0.0??.0)
998             */
999            public void setBarMaxWidth( final String barWidth ) {
1000                    maxBarWidth = barWidth;
1001            }
1002    
1003            /**
1004             * BOXチャートã?バã?アイãƒ?ƒ のマã?ジン(0.0??.0)を指定しますã?
1005             *
1006             * BOXチャートã?バã?アイãƒ?ƒ のマã?ジンの比率を指定しますã?
1007             * 棒ã?間を表示領域を1として小数点以下ã?数値でå¹?‚’設定しますã?
1008             * 無ç�?�Œある時ã?適当なサイズに調整されますã?
1009             * barMaxWidth より優先されますã?
1010             * 設定されるのは、org.jfree.chart.renderer.category.BarRenderer ã‚?
1011             * 使用した描画のみですã?
1012             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1013             *
1014             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
1015             *
1016             * @param       margin  BOXチャートã?バã?アイãƒ?ƒ のマã?ジン(0.0??.0)
1017             */
1018            public void setBarItemMargin( final String margin ) {
1019                    itemMargin = margin;
1020            }
1021    
1022            /**
1023             * 表示下限値(これ以下ã?ãƒ??タは未表示)の値(double)を指定しますã?
1024             *
1025             * HybsLine でのみ使用可能ですã?
1026             * こã?設定å?以下ã?ãƒ??タは、存在しなã�?‰±ã�?�¨しますã?
1027             * Lineを引くときã?こã?ãƒ??タと、存在してã�?‚‹ãƒ??タ間にラインは引かれませんã€?
1028             * 何もæŒ?®šしなã�??合ã?、設定しませんã€?
1029             *
1030             * @og.rev 4.0.3.0 (2008/01/07) 新規追åŠ?
1031             *
1032             * @param       limit   表示下限値(これ以下ã?ãƒ??タは未表示)
1033             */
1034            public void setVisibleLimit( final String limit ) {
1035                    visibleLimit = limit;
1036            }
1037    
1038            /**
1039             * グラフã?書きå?し位置の調整比率を指定しますã?
1040             *
1041             * グラフを描画する場合ã?、書きå?し位置を少しずらしますã?
1042             * これは、グラフã?å¹?�«対して、比率でæŒ?®šしますã?
1043             * 0.0(初期値)の場合ã?、å?期描画位置である、CategoryAnchor.Middle と
1044             * 同じç®?‰€から、書きå?されますã?
1045             * 1.0 の場合ã?中å¿?�‹らã?グラフå¹??半å?が加算されã?END位置にå¯?‚Šますã?
1046             * 同様にã€?1.0 の場合ã?、グラフå¹??半å?が減算されã?START 位置になりますã?
1047             * つまりã?中å¿?�‹らã?グラフå¹??半å?単位で、前方/後方にずらす事が出来ますã?
1048             *   書きå?し位置 ??中å¿?Middle) + (domainMargin)?Šå¹???
1049             * 初期値はã€?.0(真ん中:MIDDLE)ですã?
1050             *
1051             * @og.rev 4.1.1.0 (2008/02/14) 新規追åŠ?
1052             *
1053             * @param       margin  グラフã?書きå?し位置の調整比率
1054             */
1055            public void setDomainMargin( final double margin ) {
1056                    domainMargin = margin;
1057            }
1058    
1059            /**
1060             * 時刻を表すå?合ã?表現の仕方を指定しまã�?初期値:null)ã€?
1061             *
1062             * HybsNumberAxis にオーバã?ライドすã‚?時間を表示する DecimalFormat のå†?ƒ¨クラスを利用するに当たりã?
1063             * 時刻の表示方法をæŒ?®šしますã?
1064             * 外部から与える数字ã?ã€??続してã�?‚‹å¿?¦�があるためã€?¼‘0é?数ですã?
1065             * たとえã?ã€?700 â†?17:00 , 2150 â†?21:30 とã�?�†感じですã?
1066             * 2400 をè¶?�ˆると日付違ã�?�«なりますã?
1067             *
1068             * 英語表è¨?:)と日本語表è¨?æ™?の区別とã€?4時間をè¶?�ˆるå?合ã?表示方法によってã€?¼–種類ã?パターンが存在しますã?
1069             * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1070             * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1071             * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1072             * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1073             * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1074             * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1075             * 初期値は、使用しなã�?-1)ですã?
1076             *
1077             * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1078             *
1079             * @param       type    時刻の表示方æ³?[E1/E2/E3/H1/H2/H3]
1080             */
1081            public void setTimeFormatType( final String type ) {
1082                    timeFormatType = type;
1083            }
1084    
1085            /**
1086             * ラベルの表示向きを縦にするかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
1087             *
1088             * ChartCreate の rotationLabel は、角度を指定できましたがã?NumberAxis ではã€?
1089             * 縦にするかどã�?�‹のæŒ?®šしかできませんã€?
1090             * ここでは、true を指定するとラベルは、縦書きになりますã?
1091             * 初期値は、false(横書ã�?ですã?
1092             *
1093             * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1094             *
1095             * @param   useVLavels ラベルの表示向き [false:横書ã�?:true:縦書き]
1096             */
1097            public void setUseVerticalLabels( final boolean useVLavels ) {
1098                    useVerticalLabels = useVLavels;
1099            }
1100    
1101            /**
1102             * HybsNumberAxis にオーバã?ライドすã‚?時間を表示する DecimalFormat のå†?ƒ¨クラスを定義しますã?
1103             *
1104             * これは、ChartPlot_XY で使用する、HybsNumberAxis に対して、拡張しますã?
1105             * ãƒ??タがã?時刻を表すå?合ã?Date型ã?オブジェクトを利用して、org.jfree.chart.axis.PeriodAxis
1106             * を利用できればよいのですが、単なる数字で扱ってã�?‚‹ケースがありã?時刻にå†?ƒ¨çš?�«
1107             * 変換するケースで使ã�?�¾すã?
1108             * 外部から与える数字ã?ã€??続してã�?‚‹å¿?¦�があるためã€?¼‘0é?数ですã?
1109             * たとえã?ã€?700 â†?17:00 , 2150 â†?21:30 とã�?�†感じですã?
1110             * 24時間をè¶?�ˆるå?合ã?ã€?
1111             * Type1:そã?ままã€?:00 に戻るã?
1112             * Type2:そã?ままã€?4:00 と、そのまま、加算されてã�?��ã€?
1113             * の?’種類が用意されてã�?�¾すã?
1114             *
1115             * @og.rev 5.5.2.1 (2012/05/07) 新規追åŠ?
1116             *
1117             */
1118            private static final class HybsTimeFormat extends DecimalFormat {
1119                    /** For serialization. */
1120                    private static final long serialVersionUID = 201205075512L;
1121    
1122                    private final boolean is24repeat ;
1123                    private final boolean useDay ;
1124    
1125                    private final int hsCode ;
1126    
1127                    /**
1128                     * コンストラクター
1129                     *
1130                     * 引数に、時刻を表すå?合ã?表現の仕方を指定しますã?
1131                     * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1132                     * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1133                     * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1134                     * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1135                     * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1136                     * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1137                     *
1138                     * @param       type    時刻の表示方æ³?[E1/E2/E3/H1/H2/H3]
1139                     */
1140                    public HybsTimeFormat( final String inType ) {
1141                            super();
1142    
1143                            DecimalFormatSymbols sym = new DecimalFormatSymbols();
1144                            if( "E1".equals( inType ) ) {
1145                                    applyPattern( "#0.00" );
1146                                    sym.setDecimalSeparator( ':' );
1147                                    is24repeat = false;             useDay = false;
1148                            }
1149                            else if( "E2".equals( inType ) ) {
1150                                    applyPattern( "#0.00" );
1151                                    sym.setDecimalSeparator( ':' );
1152                                    is24repeat = true;              useDay = false;
1153                            }
1154                            else if( "E3".equals( inType ) ) {
1155                                    applyPattern( "#,#0.00" );
1156                                    sym.setDecimalSeparator( ':' );
1157                                    sym.setGroupingSeparator( ' ' );
1158                                    is24repeat = true;              useDay = true;
1159                            }
1160                            else if( "H1".equals( inType ) ) {
1161                                    applyPattern( "#0.00� );
1162                                    sym.setDecimalSeparator( 'æ™? );
1163                                    is24repeat = false;             useDay = false;
1164                            }
1165                            else if( "H2".equals( inType ) ) {
1166                                    applyPattern( "#0.00� );
1167                                    sym.setDecimalSeparator( 'æ™? );
1168                                    is24repeat = true;              useDay = false;
1169                            }
1170                            else if( "H3".equals( inType ) ) {
1171                                    applyPattern( "#,#0.00� );
1172                                    sym.setDecimalSeparator( 'æ™? );
1173                                    sym.setGroupingSeparator( '日' );
1174                                    is24repeat = true;              useDay = true;
1175                            }
1176                            else {
1177                                    String errMsg = "timeFormatType はã€?E1/E2/E3/H1/H2/H3) からæŒ?®šしてください。timeFormatType=[" + inType + "]" ;
1178                                    throw new HybsSystemException( errMsg );
1179                            }
1180                            setDecimalFormatSymbols( sym );
1181    
1182                            hsCode = super.hashCode() + Boolean.valueOf(is24repeat).hashCode() + Boolean.valueOf(useDay).hashCode();
1183                    }
1184    
1185                    /**
1186                     * double をフォーマットしてæ–?­—å?を作æ?しまã�? format(double,StringBuffer,FieldPosition) のオーバã?ライãƒ?)
1187                     *
1188                     * timeFormatType によって、データの処ç�?�Œ変わりますã?
1189                     * ã€?1:そã?ままã€?4:00 となりã?åŠ?®—されてã�?��ã€?
1190                     * ã€?2:そã?ままã€?:00 に戻るã?(日付ã?無è¦?
1191                     * ã€?3:そã?ままã€? 00:00 と日付が付与されるã€?
1192                     * ã€?1:そã?ままã€?4æ™?0åˆ?となりã?åŠ?®—されてã�?��ã€?
1193                     * ã€?2:そã?ままã€?0æ™?0åˆ?に戻るã?(日付ã?無è¦?
1194                     * ã€?3:そã?ままã€?日 00æ™?0åˆ?と日付が付与されるã€?
1195                     *
1196                     * @param       number  フォーマットすã‚?double
1197                     * @param       result  ãƒ?‚­ストを追åŠ?�™る位置
1198                     * @param       fieldPos        入力では、å¿?¦�であれば位置合わせフィールドã? 出力では、その位置合わせフィールドã?オフセãƒ?ƒˆ
1199                     * @return      フォーマットされた数値æ–?­—å?
1200                     */
1201                    public StringBuffer format( final double number, final StringBuffer result, final FieldPosition fieldPos ) {
1202                            int day    = (int)(number/100/24);                      // 日付ã?端数はåˆ?‚Š捨てるã?
1203                            int hour   = (int)(number/100);                         // 時間のみ取り出すã?
1204                            if( is24repeat ) { hour = hour%24; }            // ?’4時間をè¶?�ˆたå?合ã?余りのみ使用するã€?
1205    
1206                            int minute = (int)((number%100)*0.6);           // 0.6 = 60/100 の事ã?100 ã�?60åˆ?となるã?
1207    
1208                            double timeVal = hour + minute/100.0 ;
1209                            if( useDay ) { timeVal = timeVal + day*100 ; }  // 端数をå?り捨てた日付に対してã€?00倍しておくã€?
1210                            return super.format( timeVal, result, fieldPos );
1211                    }
1212    
1213                    /**
1214                     * こã?オブジェクトとæŒ?®šされたオブジェクトを比è¼?�—ますã?
1215                     *
1216                     * @og.rev 5.5.2.4 (2012/05/16) 新規追åŠ?findbug対å¿?
1217                     *
1218                     * @param       anObject        比è¼?�•れるオブジェクãƒ?
1219                     * @return      æŒ?®šされたオブジェクトが等しã�??合ã? true、そã�?�§なã�??合ã? false
1220                     */
1221                    public boolean equals( final Object anObject ) {
1222                            return this == anObject;
1223                    }
1224    
1225                    /**
1226                     * こã?オブジェクトã?ハッシュコードを取得しますã?
1227                     *
1228                     * @og.rev 5.5.2.4 (2012/05/16) 新規追åŠ?findbug対å¿?
1229                     *
1230                     * @return      ハッシュコーãƒ?
1231                     */
1232                    public int hashCode() {
1233                            return hsCode;
1234                    }
1235            }
1236    
1237            /**
1238             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
1239             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
1240             *
1241             * @return こã?クラスのæ–?­—å?表現
1242             */
1243            @Override
1244            public String toString() {
1245                    StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
1246    
1247                    rtn.append( "[" ).append( this.getClass().getName() ).append( "]" ).append( HybsSystem.CR );
1248                    rtn.append( "chartType     [" ).append( chartType     ).append( "]" ).append( HybsSystem.CR );
1249                    rtn.append( "valueLabel    [" ).append( valueLabel    ).append( "]" ).append( HybsSystem.CR );
1250                    rtn.append( "markValues    [" ).append( Arrays.toString( markValues ) ).append( "]" ).append( HybsSystem.CR );
1251                    rtn.append( "markColors    [" ).append( Arrays.toString( markColors ) ).append( "]" ).append( HybsSystem.CR );
1252                    rtn.append( "lowerBound    [" ).append( lowerBound    ).append( "]" ).append( HybsSystem.CR );
1253                    rtn.append( "upperBound    [" ).append( upperBound    ).append( "]" ).append( HybsSystem.CR );
1254                    rtn.append( "useGradient   [" ).append( useGradient   ).append( "]" ).append( HybsSystem.CR );
1255                    rtn.append( "shapesVisible [" ).append( shapesVisible ).append( "]" ).append( HybsSystem.CR );
1256                    rtn.append( "useDottedLine [" ).append( useDottedLine ).append( "]" ).append( HybsSystem.CR );
1257    
1258                    return rtn.toString();
1259            }
1260    }