    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.hayabusa.common.HybsSystem;
    019import org.opengion.hayabusa.common.HybsSystemException;
    020import org.opengion.fukurou.util.StringUtil;
    021
    022import java.util.List;
    023import java.awt.Color;
    024import java.text.SimpleDateFormat;
    025
    026import org.jfree.ui.RectangleEdge;
    027import org.jfree.chart.JFreeChart;
    028import org.jfree.chart.plot.Plot;
    029import org.jfree.chart.plot.PlotOrientation;
    030import org.jfree.chart.plot.CategoryPlot;
    031import org.jfree.chart.renderer.category.CategoryItemRenderer;
    032import org.jfree.data.category.CategoryDataset;
    033import org.jfree.chart.axis.CategoryAxis;
    034import org.jfree.chart.axis.CategoryLabelPositions;
    035import org.jfree.chart.axis.CategoryAnchor;
    036import org.jfree.chart.axis.DateAxis;                                           // 5.6.1.0 (2013/02/01)
    037import org.jfree.chart.plot.DatasetRenderingOrder;
    038import org.jfree.chart.plot.CategoryMarker;
    039
    040/**
    041 * ChartCreate は、JFreeChart オブジェクトを構築するクラスです。
    042 * 複数の ChartDataset オブジェクトを合成することも、ここで行っています。
    043 * グラフの種類は、ChartPlot_XXX クラスで設定しています。
    044 * ここでは、簡易的にオブジェクトを構築できるように、チャートタイプの指定によって、
    045 * 各種作成するオブジェクトを切り替えています。
    046 *
    047 * @version  0.9.0      2007/06/21
    048 * @author       Kazuhiko Hasegawa
    049 * @since        JDK1.1,
    050 */
    051public class ChartCreate {
    052
    053        private String  title                   = null;                 // タイトル
    054        private String  chartType               = null;                 // チャートの種類
    055        private String  domainLabel             = null;                 // チャートの共通横軸のラベル
    056        private boolean showLegend              = true;                 // 凡例 の表示可否
    057        private RectangleEdge   rectEdge= RectangleEdge.BOTTOM;         // 凡例の表示箇所
    058        private PlotOrientation plotOri = PlotOrientation.VERTICAL;     // チャートの軸表示方向
    059        private Color   chartBackColor  = null;                 // 背景色の設定
    060        private Color   plotBackColor   = null;                 // 描画領域の設定
    061        private int             rotationLabel   = 0;                    // 横軸ラベルの傾き(1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ･･･ )
    062        // CategoryAxis系は、rotationLabel。ValueAxis系(NumberAxis,DateAxis)は、useVerticalLabels で、ラベルの表示向きを指定します。
    063        private boolean useVerticalLabels = false;              // 5.6.4.3 (2013/05/24) 横軸ラベルの表示向き(横書き:false/縦書き:true)
    064        private String  domainMarker    = null;                 // 横軸のマーカーライン
    065        private boolean useDomainLabel  = true;                 // 横軸ラベルの表示有無
    066        private boolean useMarkerLabel  = true;                 // マーカーライン時の文字有無
    067        private int             seriesPikup             = -1;                   // ピックアップするシリーズ番号
    068        private HybsURLGenerator urlGen = null;                 // クリッカブル・マップ
    069        // 4.0.2.0 (2007/12/20)
    070        private String  categoryMargin  = null;                 // カテゴリマージン(0.0〜1.0)
    071        private String  lowerMargin             = null;                 // 下方マージン(0.0〜1.0)
    072        private String  upperMargin             = null;                 // 上方マージン(0.0〜1.0)
    073        private boolean isDebug                 = false;                // デバッグフラグ
    074        private boolean useDomainLine   = false;                // 4.0.3.0 (2008/01/07) 横軸のグリッド表示有無(垂直線)
    075        private Color   domainLineColor = null;                 // 4.0.3.0 (2008/01/07) 横軸のグリッド線の色
    076        private boolean useRangeLine    = true;                 // 4.0.3.0 (2008/01/07) 縦軸のグリッド表示有無(水平線)
    077        private Color   rangeLineColor  = null;                 // 4.0.3.0 (2008/01/07) 縦軸のグリッド線の色
    078        private int             categorySkip    = 1;                    // 4.0.3.0 (2008/01/07) 横軸ラベルをスキップする間隔
    079        private int             categoryCutNo   = -1;                   // 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク
    080        private int             rangeSkip               = 1;                    // 4.1.1.0 (2008/02/04) 縦軸のグリッドをスキップする間隔
    081        private boolean useToolTip              = false;                // 4.3.1.0 (2008/08/09) ツールチップスの利用
    082
    083        private CategoryAnchor categoryAnchor = null;   // 4.1.1.0 (2008/02/14) 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)
    084
    085        private List<ChartDataset> chartDataset = null;   // チャートのデータ属性管理オブジェクトのリスト
    086
    087        private String  dateAxisFormat  = "MM/dd";              // 5.6.1.0 (2013/02/01) Time,XYTime Polt関係の時間軸を表す場合のフォーマット
    088
    089
    090        /**
    091         * JFreeChart オブジェクトを作成します。
    092         *
    093         * 内部的には、ChartPlot インターフェースに基づいた Plot を構築するクラスを
    094         * 呼び出して、JFreeChart の引数に設定します。
    095         * 各種属性の設定も行います。
    096         *
    097         * @return      JFreeChartオブジェクト
    098         */
    099        public JFreeChart getChart() {
    100
    101                ChartPlot chPlot = ChartFactory.newChartPlot( chartType );
    102
    103                Plot plot = chPlot.getPlot( this );
    104
    105                // 描画領域の設定
    106                if( plotBackColor != null ) {
    107                        plot.setBackgroundPaint( plotBackColor );
    108                }
    109
    110                JFreeChart chart = new JFreeChart( title, JFreeChart.DEFAULT_TITLE_FONT, plot, showLegend );
    111
    112                if( showLegend ) {
    113                        chart.getLegend().setPosition( rectEdge );
    114                }
    115
    116                // 背景色の設定
    117                if( chartBackColor != null ) {
    118                        chart.setBackgroundPaint( chartBackColor );
    119                }
    120
    121                // 以降の処理では、変更イベントが発行される。
    122                if( categoryAnchor != null && plot instanceof CategoryPlot ) {
    123                        ((CategoryPlot)plot).setDomainGridlinePosition( categoryAnchor ) ;
    124                }
    125
    126                // 以降の処理では、変更イベントが発行される。
    127                // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除
    128//              if( plot instanceof HybsCategoryPlot ) {
    129//                      ((HybsCategoryPlot)plot).setNotify( true ) ;
    130//              }
    131
    132                return chart;
    133        }
    134
    135        /**
    136         * JFreeChart オブジェクトを変更します。
    137         *
    138         * すでに作成済みの JFreeChart に対して、
    139         * シリーズのピックアップ(seriesPikup) のみ、変更します。
    140         * 使用するのは、引数の JFreeChart と seriesPikup 属性値のみです。
    141         *
    142         * @og.rev 3.8.9.2 (2007/07/28) シリーズ指定時の色、シェープ対応
    143         *
    144         * @param       chart   JFreeChartオブジェクト
    145         * @param       serNo   seriesPikup 属性値
    146         *
    147         * @return      JFreeChartオブジェクト
    148         */
    149        public static JFreeChart modifying( final JFreeChart chart,final int serNo ) {
    150
    151                CategoryPlot plot = chart.getCategoryPlot();
    152
    153                if( plot instanceof HybsCategoryPlot ) {
    154                        // 以降の処理では、変更イベントは発行されない。
    155                        // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除
    156//                      ((HybsCategoryPlot)plot).setNotify( false ) ;
    157                        ((HybsCategoryPlot)plot).setSeriesPikup( serNo ) ;
    158                }
    159
    160                CategoryDataset dtset = plot.getDataset();
    161                int rowCnt = dtset.getRowCount();       // Series の個数
    162
    163                CategoryItemRenderer rend = plot.getRenderer();
    164
    165                if( serNo >= 0 && serNo < rowCnt ) {
    166                        rend.setBasePaint( Color.CYAN );
    167                        rend.setSeriesPaint( serNo, Color.RED );
    168                }
    169
    170                // 以降の処理では、変更イベントが発行される。
    171                // 5.1.8.0 (2010/07/01) 実質的に使用されていないので、削除
    172//              if( plot instanceof HybsCategoryPlot ) {
    173//                      ((HybsCategoryPlot)plot).setNotify( true ) ;
    174//              }
    175
    176                return chart ;
    177        }
    178
    179        /**
    180         * CategoryPlotオブジェクトを返します。
    181         *
    182         * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、
    183         * CategoryPlotオブジェクトを構築します。
    184         * 必要な属性設定は、済んでいる状態です。
    185         * ここでは、serNo、categoryAxis、plotOrientation、useDomainLine、
    186         * domainLineColor、useRangeLine 、RangeLineColor 、rangeSkip 、
    187         * domainMarker を設定しておきます。
    188         *
    189         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
    190         *
    191         * @return      必要な属性を設定済みのCategoryPlotオブジェクト
    192         */
    193        protected HybsCategoryPlot makeCategoryPlot() {
    194                HybsCategoryPlot cPlot = new HybsCategoryPlot( seriesPikup );
    195
    196                cPlot.setOrientation( plotOri );
    197                cPlot.setDatasetRenderingOrder( DatasetRenderingOrder.FORWARD );
    198
    199                // ドメイン(横軸)に対する、グリッドライン(垂直線)の指定
    200                cPlot.setDomainGridlinesVisible( useDomainLine );
    201                if( domainLineColor != null ) { cPlot.setDomainGridlinePaint( domainLineColor ); }
    202
    203                // レンジ(縦軸)に対する、グリッドライン(水平線)の指定
    204                cPlot.setRangeGridlinesVisible( useRangeLine );
    205                if( rangeLineColor != null ) { cPlot.setRangeGridlinePaint( rangeLineColor ); }
    206
    207                // 4.1.1.0 (2008/02/04) 縦軸のグリッド線(水平線)をスキップする間隔の指定
    208                cPlot.setRangeSkip( rangeSkip );
    209
    210                // 横軸ドメインマーカーの設定(縦ライン)
    211                if( domainMarker != null ) {
    212                        CategoryMarker catMk = new CategoryMarker( domainMarker );
    213                        catMk.setDrawAsLine( true );
    214                        if( useMarkerLabel ) {
    215                                catMk.setLabel( domainMarker );
    216                        }
    217                        cPlot.addDomainMarker( catMk );
    218                }
    219
    220                return cPlot ;
    221        }
    222
    223        /**
    224         * CategoryAxisオブジェクトを返します。
    225         *
    226         * ChartCreate オブジェクト(自分自身)に設定された各種属性を元に、
    227         * CategoryAxisオブジェクトを構築します。
    228         * 必要な属性設定は、済んでいる状態です。
    229         * ここでは、domainLabel、categoryMargin、lowerMargin、upperMargin、
    230         * useDomainLabel、rotationLabel を設定しておきます。
    231         *
    232         * @og.rev 4.1.1.0 (2008/02/04) 横軸ラベルの文字位置指定のキーブレイク追加(categoryCutNo)
    233         *
    234         * @return      必要な属性を設定済みの CategoryAxisオブジェクト
    235         */
    236        protected CategoryAxis makeCategoryAxis() {
    237                CategoryAxis categoryAxis = new HybsCategoryAxis(
    238                                                                                        domainLabel,categorySkip,categoryCutNo
    239                                                                        );
    240
    241                // カテゴリマージン(0.0〜1.0)を指定します。
    242                if( categoryMargin != null ) {
    243                        double ctMargin = Double.parseDouble( categoryMargin );
    244                        categoryAxis.setCategoryMargin( ctMargin ) ;    // double margin
    245                }
    246
    247                // 下方マージン(0.0〜1.0)を指定します。
    248                if( lowerMargin != null ) {
    249                        double lwMargin = Double.parseDouble( lowerMargin );
    250                        categoryAxis.setLowerMargin( lwMargin ) ;       // double margin
    251                }
    252
    253                // 上方マージン(0.0〜1.0)を指定します。
    254                if( upperMargin != null ) {
    255                        double upMargin = Double.parseDouble( upperMargin );
    256                        categoryAxis.setUpperMargin( upMargin ) ;       // double margin
    257                }
    258
    259                // チャートのカテゴリーラベルの方向を指定します。
    260                if( rotationLabel > 0 ) {
    261                        categoryAxis.setCategoryLabelPositions(
    262                                CategoryLabelPositions.createUpRotationLabelPositions(
    263                                        Math.PI / rotationLabel ));
    264                }
    265                else if( rotationLabel < 0 ) {
    266                        categoryAxis.setCategoryLabelPositions(
    267                                CategoryLabelPositions.createDownRotationLabelPositions(
    268                                        Math.PI / -rotationLabel ));
    269                }
    270
    271                // 横軸ラベルの表示有無を返します。
    272                categoryAxis.setVisible( useDomainLabel );      // ドメインラベルの表示有無
    273
    274                if( isDebug ) {
    275                        System.out.println( "CategoryMargin="+categoryAxis.getCategoryMargin());
    276                        System.out.println( "LowerMargin="+categoryAxis.getLowerMargin());
    277                        System.out.println( "UpperMargin="+categoryAxis.getUpperMargin());
    278                }
    279
    280                return categoryAxis ;
    281        }
    282
    283        /**
    284         * チャートのデータ属性管理オブジェクトのリストを設定します。
    285         *
    286         * ChartDataset オブジェクトは、内部チャートの個々の属性を管理しています。
    287         * このオブジェクト は、グラフの合成に使用できるように、内部にそれぞれの Plot や
    288         * renderer に対応する情報を持っています。
    289         * これらを、複数管理するときに、List 管理していますので、そのList をセットします。
    290         * JFreeChart には、この複数のChartDataset から、それぞれの Plot と Dataset を
    291         * 順次、追加していく必要があります。その処理は、ChartPlot インターフェースを
    292         * 継承した、サブクラスで実際に行われます。
    293         *
    294         * @param       datasetList     チャートのデータ属性管理のリスト
    295         */
    296        public void setDatasetList( final List<ChartDataset> datasetList ) {
    297                chartDataset = datasetList;
    298
    299                if( chartDataset != null ) {
    300                        ChartDataset firstChData = chartDataset.get(0);
    301                        chartType = firstChData.getChartType();
    302                }
    303        }
    304
    305        /**
    306         * チャートのデータ属性管理オブジェクトのリストを返します。
    307         *
    308         * @return      チャートのデータ属性管理オブジェクトのリスト
    309         * @see #setDatasetList( List )
    310         */
    311        protected List<ChartDataset> getDatasetList() { return chartDataset; }
    312
    313        /**
    314         * チャートのタイトルを設定します。
    315         *
    316         * @param       chTitle チャートのタイトル
    317         */
    318        public void setTitle( final String chTitle ) {
    319                title = chTitle;
    320        }
    321
    322        /**
    323         * チャートの共通横軸のラベルを設定します。
    324         *
    325         * @param       domLabel        チャートの共通横軸のラベル
    326         */
    327        public void setDomainLabel( final String domLabel ) {
    328                domainLabel = domLabel;
    329        }
    330
    331        /**
    332         * チャートの共通横軸のラベルを返します。
    333         *
    334         * @return      チャートの共通横軸のラベル
    335         */
    336        protected String getDomainLabel() { return domainLabel; }
    337
    338        /**
    339         * 凡例 の表示可否を設定します。
    340         *
    341         * @param       showLeg 凡例 の表示可否
    342         */
    343        public void setShowLegend( final boolean showLeg ) {
    344                showLegend = showLeg;
    345        }
    346
    347        /**
    348         * 凡例の表示箇所を設定します(TOP、BOTTOM、RIGHT、LEFT)。
    349         *
    350         * 表示箇所は、org.jfree.ui.RectangleEdge クラスの設定値を使用します。
    351         * 指定できるのは、TOP、BOTTOM、RIGHT、LEFT で、各文字の頭一文字で
    352         * 判定してます。つまり、T,B,R,L で、判定を行い、それ以外はエラーになります。
    353         *
    354         * @param       edge    凡例の表示箇所(TOP、BOTTOM、RIGHT、LEFT)
    355         */
    356        public void setRectangleEdge( final String edge ) {
    357                if( edge != null && edge.length() > 0 ) {
    358                        char ope = edge.charAt(0);
    359                        switch( ope ) {
    360                                case 'T' : rectEdge = RectangleEdge.TOP;        break;
    361                                case 'B' : rectEdge = RectangleEdge.BOTTOM;break;
    362                                case 'R' : rectEdge = RectangleEdge.RIGHT;      break;
    363                                case 'L' : rectEdge = RectangleEdge.LEFT;       break;
    364                                default  :
    365                                        String errMsg = "指定のパラメータは適用できません。[" + edge + "]"
    366                                                        + HybsSystem.CR
    367                                                        + "TOP,BOTTOM,RIGHT,LEFT の中から、指定してください。" ;
    368                                        throw new HybsSystemException( errMsg );
    369                        }
    370                }
    371        }
    372
    373        /**
    374         * チャートの軸表示方向を設定します(VERTICAL、HORIZONTAL)。
    375         *
    376         * 軸表示方向は、org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。
    377         * 指定できるのは、VERTICAL、HORIZONTALで、各文字の頭一文字で
    378         * 判定してます。つまり、V,H で、判定を行い、それ以外はエラーになります。
    379         *
    380         * @param       orientation     凡例の表示箇所(VERTICAL、HORIZONTAL)
    381         */
    382        public void setPlotOrientation( final String orientation ) {
    383                if( orientation != null && orientation.length() > 0 ) {
    384                        char ope = orientation.charAt(0);
    385                        switch( ope ) {
    386                                case 'V' : plotOri = PlotOrientation.VERTICAL;  break;
    387                                case 'H' : plotOri = PlotOrientation.HORIZONTAL;break;
    388                                default  :
    389                                        String errMsg = "指定のパラメータは適用できません。[" + orientation + "]"
    390                                                        + HybsSystem.CR
    391                                                        + "VERTICAL,HORIZONTAL の中から、指定してください。" ;
    392                                        throw new HybsSystemException( errMsg );
    393                        }
    394                }
    395        }
    396
    397        /**
    398         * チャートの軸表示方向を返します。
    399         *
    400         * org.jfree.chart.plot.PlotOrientation クラスの設定値を使用します。
    401         *
    402         * @return      チャートの軸表示方向(VERTICAL、HORIZONTAL)
    403         */
    404        protected PlotOrientation getPlotOrientation() { return plotOri; }
    405
    406        /**
    407         * チャートの背景色を指定します。
    408         *
    409         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
    410         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
    411         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
    412         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
    413         *
    414         * @param   chBackClr チャートの背景色
    415         * @see         java.awt.Color#BLACK
    416         */
    417        public void setChartBackColor( final String chBackClr ) {
    418                if( chBackClr != null && chBackClr.length() > 0 ) {
    419                        chartBackColor = StringUtil.getColorInstance( chBackClr );
    420                }
    421        }
    422
    423        /**
    424         * チャートの描画領域の色を指定します。
    425         *
    426         * 指定文字列は、java.awt.Color クラスのstatic フィールド名で指定します。
    427         * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
    428         * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , (PURPLE) が指定できます。
    429         * また、#XXXXXX形式の16bitRGB表記 でも指定可能です。
    430         *
    431         * @param   plBackClr チャートの描画領域色
    432         * @see         java.awt.Color#BLACK
    433         */
    434        public void setPlotBackColor( final String plBackClr ) {
    435                if( plBackClr != null && plBackClr.length() > 0 ) {
    436                        plotBackColor = StringUtil.getColorInstance( plBackClr );
    437                }
    438        }
    439
    440        /**
    441         * チャートのカテゴリーラベルの方向を指定します。
    442         *
    443         * これは、CategoryAxis 系の横軸ラベルに対して、表示方向を指定します。
    444         * ValueAxis系(NumberAxis,DateAxis)は、setUseVerticalLabels( boolean ) で
    445         * true:縦/false:横 のみ指定可能です。
    446         *
    447         * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。
    448         * この指示数に相当する値を設定します。
    449         * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ･･･
    450         * マイナスは、下方向に回転させます。
    451         * 0 を指定した場合は、何も設定しません。(初期設定のまま)
    452         *
    453         * @param   rotLabel カテゴリーラベルの方向
    454         * @see         #setUseVerticalLabels( boolean )
    455         */
    456        public void setRotationLabel( final int rotLabel ) {
    457                rotationLabel = rotLabel;
    458        }
    459
    460        /**
    461         * ラベルの表示向きを縦にするかどうか[false/true]を指定します(初期値:false)。
    462         *
    463         * これは、ValueAxis系(NumberAxis,DateAxis) 系の横軸ラベルに対して、表示方向を
    464         * true:縦/false:横で、指定します。
    465         * true に指定した場合で、かつ、rotationLabel が未指定(=0)の場合は、2:90度 も設定します。
    466         *
    467         * ChartCreate の rotationLabel は、角度を指定できましたが、NumberAxis,DateAxis では、
    468         * 縦にするかどうかの指定しかできません。
    469         * ここでは、true を指定するとラベルは、縦書きになります。
    470         * 初期値は、false(横書き)です。
    471         *
    472         * @og.rev 5.6.4.3 (2013/05/24) 新規追加
    473         *
    474         * @param       useVLavels      ラベルの表示向き [false:横書き/true:縦書き]
    475         * @see         #setRotationLabel( int )
    476         */
    477        public void setUseVerticalLabels( final boolean useVLavels ) {
    478                useVerticalLabels = useVLavels;
    479
    480                // useVerticalLabels=true で、rotationLabel を 2:90度 に設定しておきます。
    481                if( useVerticalLabels && rotationLabel == 0 ) { rotationLabel = 2; }
    482        }
    483
    484        /**
    485         * チャートのカテゴリーラベルの方向を取得します。
    486         *
    487         * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。
    488         * この指示数に相当する値を設定します。
    489         * 1:180度 、2:90度 、3:60度 、4:45度 、6:30度 ･･･
    490         * マイナスは、した方向に回転させます。
    491         * 0 を指定した場合は、何も設定しません。(初期設定のまま)
    492         *
    493         * @return      カテゴリーラベルの方向
    494         * @see     #setRotationLabel( int )
    495         */
    496        protected int getRotationLabel() { return rotationLabel; }
    497
    498        /**
    499         * チャートの横軸の値(ドメイン)に合致する位置にマーカーラインを設定します。
    500         *
    501         * この属性には、マーカーラインを設定する値を記述します。
    502         *
    503         * @param   marker ドメインのマーカーライン
    504         */
    505        public void setDomainMarker( final String marker ) {
    506                if( marker != null && marker.length() > 0 ) {
    507                        domainMarker = marker;
    508                }
    509        }
    510
    511        /**
    512         * 横軸ラベルのラベルを表示するかどうか[true/false]を指定します(初期値:true)。
    513         *
    514         * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えにくくなります。
    515         * そのようなケースで、横軸のラベルそのものを表示しない場合に、false を
    516         * 設定します。
    517         * 初期値は、表示する(true)です。
    518         *
    519         * @param   flag 横軸ラベルの表示有無 [true:表示する/false:表示しない]
    520         */
    521        public void setUseDomainLabel( final boolean flag ) {
    522                useDomainLabel = flag ;
    523        }
    524
    525        /**
    526         * 横軸ラベルの表示有無を返します。
    527         *
    528         * @return      boolean横軸ラベルの表示有無(true:表示する/false:表示しない)
    529         */
    530        protected boolean isUseDomainLabel() { return useDomainLabel; }
    531
    532        /**
    533         * マーカーラインに、その設定値を表示するかどうか[true/false]を指定します(初期値:true)。
    534         *
    535         * ドメイン(横軸)が、多数存在する場合、ドメインラベルが見えない場合があります。
    536         * そのようなケースで、見たい値にマーカーラインを設定し、その横に、ドメインラベル
    537         * を表示する事で、ピックアップしている軸の値を容易に知ることが可能です。
    538         * 初期値は、表示する(true)です。
    539         *
    540         * @param   flag マーカーラインの設定値表示 [true:表示する/false:表示しない]
    541         */
    542        public void setUseMarkerLabel( final boolean flag ) {
    543                useMarkerLabel = flag ;
    544        }
    545
    546        /**
    547         * 複数シリーズのピックアップを行う場合のシリーズ番号を指定します。
    548         *
    549         * 複数シリーズ(検索時に複数項目を同時に検索する場合)では、チャート上に
    550         * 複数のグラフが表示されますが、その中の一つをピックアップする場合に、
    551         * シリーズ番号を指定します。
    552         * シリーズ番号は、0 から始まる数字です。
    553         * ここでは、ピックアップされたシリーズは、赤色で表示されます。
    554         * それ以外は、グレー色での表示になります。
    555         * (※ 本来は、ChartDataset に持つべき属性です。)
    556         *
    557         * @param       serPikup        シリーズ番号
    558         */
    559        public void setSeriesPikup( final int serPikup ) {
    560                seriesPikup = serPikup;
    561        }
    562
    563        /**
    564         * 横軸ラベルをスキップする間隔を指定します。
    565         *
    566         * 横軸ラベル(カテゴリラベル表示)する際に、スキップする間隔を指定します。
    567         * "1" (初期値)では、１つづつ表示(つまり、すべて表示する)します。
    568         * "2" とすると、１つおきに、"3" とすると、２つおきに表示します。
    569         * 初期値は、"1" (すべて表示)です。
    570         * なお、先頭から表示を開始します。
    571         *
    572         * 注意：これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。
    573         * また、categoryCutNo が指定された場合は、categorySkip は使用されません。
    574         *
    575         * @param       cateSkip        ラベルをスキップする間隔を指定
    576         * @see         #setCategoryCutNo( int )
    577         */
    578        public void setCategorySkip( final int cateSkip ) {
    579                categorySkip = cateSkip;
    580        }
    581
    582        /**
    583         * 横軸ラベルの文字位置指定のキーブレイクを指定します。
    584         *
    585         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
    586         *
    587         * 横軸ラベル(カテゴリラベル表示)する際に、ラベルの先頭から、この指定文字数だけ
    588         * カットして、表示します。
    589         * その際、前回作成したカットラベルと、同一ラベルの場合は、表示しません。
    590         * 例えば、データは、年月日で、年と月のみ(先頭６文字)を指定すると、
    591         * 日のデータは、ラベルが表示されません。
    592         * 指定される数字は、１以上の整数としてください。
    593         * 初期値は、すべて表示です。
    594         *
    595         * 注意：これとは別に、ラベル先頭に "_" を付けた場合は、ラベルを表示しません。
    596         * また、categoryCutNo が指定された場合は、categorySkip は使用されません。
    597         *
    598         * @param       cateCutNo       キーブレイク位置
    599         * @see         #setCategorySkip( int )
    600         */
    601        public void setCategoryCutNo( final int cateCutNo ) {
    602                if( cateCutNo > 0 ) {
    603                        categoryCutNo = cateCutNo;
    604                }
    605        }
    606
    607        /**
    608         * 複数シリーズのピックアップを行う場合のシリーズ番号を取得します。
    609         *
    610         * 方向は、上方向に対して、(PI / 指示数) で求まる値に設定します。
    611         * この指示数に相当する値を設定します。
    612         * 0 を指定した場合は、何も設定しません。(初期設定のまま)
    613         * (※ 本来は、ChartDataset に持つべき属性です。)
    614         *
    615         * @return      シリーズ番号
    616         * @see     #setSeriesPikup( int )
    617         */
    618        protected int getSeriesPikup() { return seriesPikup; }
    619
    620        /**
    621         * 縦軸のグリッド線(水平線)をスキップする間隔を指定します。
    622         *
    623         * 縦軸のグリッド線を表示する際に、スキップする間隔を指定します。
    624         * 通常は、ラベルと同じだけのグリッド線が掛かれますが、ラベルよりも
    625         * 少ない数のグリッド線(例えば、２つおき)を出す場合に、値を設定します。
    626         * "1" (初期値)では、１つづつ表示(つまり、すべて表示する)します。
    627         * "2" とすると、１つおきに、"3" とすると、２つおきに表示します。
    628         * 初期値は、"1" (すべて表示)です。
    629         * なお、先頭から表示を開始します。
    630         *
    631         * @og.rev 4.1.1.0 (2008/02/04) 新規追加
    632         *
    633         * @param       rngSkip 縦軸のグリッド線(水平線)をスキップする間隔
    634         */
    635        public void setRangeSkip( final int rngSkip ) {
    636                rangeSkip = rngSkip;
    637        }
    638
    639        /**
    640         * クリッカブル・マップ用URLを指定します。
    641         *
    642         * 画像に、クリッカブル・マップを作成する場合の、URL を指定します。
    643         * これは、画像上にエリア指定でリンク引数を作成することが可能です。
    644         * URL 自身は、? 付きで固定値の引数を連結することが可能です。
    645         * クリックしたエリアのカテゴリやインデックスの値(引数)は、自動的に
    646         * 設定されます。(指定しない場合はチャートによって異なります)
    647         * <pre>
    648         * ・Pie      ：category、pieIndex
    649         * ・XY       ：series、item
    650         * ・Category ：series、category
    651         * </pre>
    652         * この引数の URL の名称を変更したい場合は、URL に続けて、カンマ(,) で、
    653         * 名称を記述してください。
    654         * 例：link.jsp,BLOCK
    655         *
    656         * @param       imageMapUrl     クリッカブル・マップ用URL
    657         */
    658        public void setImageMapUrl( final String imageMapUrl ) {
    659                if( imageMapUrl != null ) {
    660                        urlGen = new HybsURLGenerator( imageMapUrl );
    661                }
    662        }
    663
    664        /**
    665         * クリッカブル・マップ用URLを取得します。
    666         *
    667         * @return      クリッカブル・マップ用URL
    668         * @see     #setImageMapUrl( String )
    669         */
    670        protected HybsURLGenerator getURLGenerator() { return urlGen; }
    671
    672        /**
    673         * ツールチップス利用(true)利用しない(false)のフラグを取得します。
    674         *
    675         * @og.rev 4.3.1.0 (2008/08/09) 新規追加
    676         * @og.rev 4.9.9.9 (2009/08/07) メソッド名変更
    677         *
    678         * @return      ツールチップス利用(true)利用しない(false)のフラグ
    679         * @see     #setUseToolTip( boolean )
    680         */
    681//      protected boolean getUseToolTip() { return useToolTip; }
    682        protected boolean isUseToolTip() { return useToolTip; }
    683
    684        /**
    685         * カテゴリマージン(0.0〜1.0)を指定します。
    686         *
    687         * カテゴリ(グラフの横軸に相当)の表示間隔(マージン)の比率を指定します。
    688         * この比率は、％ ではなく、数字(double)での設定になります。
    689         * 何も指定しない場合は、デフォルトで自動調整されます。
    690         *
    691         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
    692         *
    693         * @param       margin  カテゴリマージン(0.0〜1.0)
    694         */
    695        public void setCategoryMargin( final String margin ) {
    696                categoryMargin = margin;
    697        }
    698
    699        /**
    700         * 下方マージン(0.0〜1.0)を指定します。
    701         *
    702         * カテゴリ(グラフの横軸に相当)の下方側(左側)のマージンの比率を指定します。
    703         * この比率は、％ ではなく、数字(double)での設定になります。
    704         * 何も指定しない場合は、デフォルトで自動調整されます。
    705         *
    706         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
    707         *
    708         * @param       margin  下方マージン(0.0〜1.0)
    709         */
    710        public void setLowerMargin( final String margin ) {
    711                lowerMargin = margin;
    712        }
    713
    714        /**
    715         * 上方マージン(0.0〜1.0)を指定します。
    716         *
    717         * カテゴリ(グラフの横軸に相当)の上方側(右側)のマージンの比率を指定します。
    718         * この比率は、％ ではなく、数字(double)での設定になります。
    719         * 何も指定しない場合は、デフォルトで自動調整されます。
    720         *
    721         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
    722         *
    723         * @param       margin  上方マージン(0.0〜1.0)
    724         */
    725        public void setUpperMargin( final String margin ) {
    726                upperMargin = margin;
    727        }
    728
    729        /**
    730         * 横軸のグリッド表示有無(垂直線)を指定します(初期値:false)。
    731         *
    732         * ドメイン(横軸)に対する、グリッドラインを表示するかどうか指定します。
    733         *
    734         * 何も指定しない場合は、表示しません。(false)
    735         *
    736         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
    737         *
    738         * @param       useLine 横軸のグリッド表示有無(垂直線)
    739         */
    740        public void setUseDomainLine( final boolean useLine ) {
    741                useDomainLine = useLine;
    742        }
    743
    744        /**
    745         * 横軸のグリッド線の色を指定します。
    746         *
    747         * ドメイン(横軸)に対する、グリッドラインの表示色を指定します。
    748         * 何も指定しない場合は、デフォルトで自動設定されます。
    749         *
    750         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
    751         *
    752         * @param       color   横軸のグリッド線の色
    753         */
    754        public void setDomainLineColor( final String color ) {
    755                if( color != null ) {
    756                        domainLineColor = StringUtil.getColorInstance( color );
    757                }
    758        }
    759
    760        /**
    761         * 縦軸のグリッド表示有無(水平線)を指定します(初期値:true)。
    762         *
    763         * レンジ(縦軸)に対する、グリッドラインを表示するかどうか指定します。
    764         *
    765         * 何も指定しない場合は、表示しません。(false)
    766         *
    767         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
    768         *
    769         * @param       useLine 横軸のグリッド表示有無(垂直線)
    770         */
    771        public void setUseRangeLine( final boolean useLine ) {
    772                useRangeLine = useLine;
    773        }
    774
    775        /**
    776         * ツールチップスを利用(true)/利用しない(false)を指定します(初期値:false)。
    777         *
    778         * @og.rev 4.3.1.0 (2008/08/09) 新規追加
    779         *
    780         * @param       toolTip ツールチップスを利用(true)/利用しない(false)
    781         */
    782        public void setUseToolTip( final boolean toolTip ) {
    783                useToolTip = toolTip;
    784        }
    785
    786        /**
    787         * 縦軸のグリッド線の色を指定します。
    788         *
    789         * レンジ(縦軸)に対する、グリッドラインの表示色を指定します。
    790         * 何も指定しない場合は、デフォルトで自動設定されます。
    791         *
    792         * @og.rev 4.0.3.0 (2008/01/07) 新規追加
    793         *
    794         * @param       color   縦軸のグリッド線の色
    795         */
    796        public void setRangeLineColor( final String color ) {
    797                if( color != null ) {
    798                        rangeLineColor = StringUtil.getColorInstance( color );
    799                }
    800        }
    801
    802        /**
    803         * 横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)を指定します。
    804         *
    805         * 横軸のグリッド(垂直線)を、グラフのどの位置に記述するかを指定します。
    806         * 具体的な値は、CategoryAnchor オブジェクトの値になります。
    807         * ここでは、文字列で(START,MIDDLE,END)を指定します。(先頭一文字で判定)
    808         * 何も指定しない場合は、デフォルト(MIDDLE)です。
    809         *
    810         * @og.rev 4.1.1.0 (2008/02/14) 新規追加
    811         *
    812         * @param       anchor  横軸のグリッド(垂直線)の書き出し位置(START,MIDDLE,END)
    813         */
    814        public void setCategoryAnchor( final String anchor ) {
    815                if( anchor != null && anchor.length() > 0 ) {
    816                        char anc = anchor.charAt(0);
    817                        switch( anc ) {
    818                                case 'S' : categoryAnchor = CategoryAnchor.START;       break;
    819                                case 'M' : categoryAnchor = CategoryAnchor.MIDDLE;      break;
    820                                case 'E' : categoryAnchor = CategoryAnchor.END;         break;
    821                                default  :
    822                                        String errMsg = "指定のAnchorは適用できません。[" + anchor + "]"
    823                                                        + HybsSystem.CR
    824                                                        + "START,MIDDLE,END の中から、指定してください。" ;
    825                                        throw new HybsSystemException( errMsg );
    826                        }
    827                }
    828        }
    829
    830        /**
    831         * Time,XYTime Polt関係の時間軸を表す場合のフォーマットを指定します。
    832         *
    833         * TimeSeries 関連のデータを扱う場合の横軸の日付フォーマットを指定します。
    834         * 日付フォーマットは、java.text.SimpleDateFormat で使われる yyyy/MM/dd HH:mm:ss 表記です。
    835         *
    836         * 初期値は、"MM/dd" です。
    837         *
    838         * @og.rev 5.6.1.0 (2013/02/01) 新規追加
    839         *
    840         * @param       dtFormat        Time,XYTime Polt関係の時間軸を表す場合のフォーマット
    841         */
    842        public void setDateAxisFormat( final String dtFormat ) {
    843                if( dtFormat != null && dtFormat.length() > 0 ) {
    844                        dateAxisFormat  = dtFormat;
    845                }
    846        }
    847
    848        /**
    849         * Time,XYTime Polt関係の時間軸を表す DateAxis オブジェクトを返します。
    850         *
    851         * このオブジェクトは、domainLabel で名前付けされた DateAxis で、日付フォーマットは、
    852         * dateAxisFormat で DateFormat を Override しています。
    853         * 初期フォーマットは、"MM/dd" です。
    854         *
    855         * @og.rev 5.6.1.0 (2013/02/01) 新規追加
    856         * @og.rev 5.6.4.3 (2013/05/24) 横軸ラベルを９０度傾ける処理を追加
    857         *
    858         * @return      DateAxisオブジェクト(Time,XYTime Polt関係の時間軸表現)
    859         */
    860        protected DateAxis getDateAxis() {
    861                DateAxis daxis = new DateAxis( domainLabel );
    862                daxis.setDateFormatOverride( new SimpleDateFormat( dateAxisFormat ) );
    863
    864                // 5.6.4.3 (2013/05/24) 時間関係の横軸は、rotationLabel ではなく、useVerticalLabels を使います。
    865                if( useVerticalLabels ) {
    866                        daxis.setVerticalTickLabels( useVerticalLabels );
    867                }
    868
    869                return daxis;
    870        }
    871
    872        /**
    873         * デバッグフラグを指定します。
    874         *
    875         * true に設定すると、チャートの状態を System.out.println します。
    876         *
    877         * @og.rev 4.0.2.0 (2007/12/20) 新規追加
    878         *
    879         * @param   flag デバッグフラグ [true:デバッグ/false:通常]
    880         */
    881        public void setDebug( final boolean flag ) {
    882                isDebug = flag;
    883        }
    884}