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