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