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