001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.hayabusa.io;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.fukurou.util.StringUtil;
021    
022    import java.util.List;
023    import java.awt.Color;
024    import java.text.SimpleDateFormat;
025    
026    import org.jfree.ui.RectangleEdge;
027    import org.jfree.chart.JFreeChart;
028    import org.jfree.chart.plot.Plot;
029    import org.jfree.chart.plot.PlotOrientation;
030    import org.jfree.chart.plot.CategoryPlot;
031    import org.jfree.chart.renderer.category.CategoryItemRenderer;
032    import org.jfree.data.category.CategoryDataset;
033    import org.jfree.chart.axis.CategoryAxis;
034    import org.jfree.chart.axis.CategoryLabelPositions;
035    import org.jfree.chart.axis.CategoryAnchor;
036    import org.jfree.chart.axis.DateAxis;                                           // 5.6.1.0 (2013/02/01)
037    import org.jfree.chart.plot.DatasetRenderingOrder;
038    import 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     */
051    public 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度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?: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??.0)
071            private String  lowerMargin             = null;                 // 下方マã?ジン(0.0??.0)
072            private String  upperMargin             = null;                 // 上方マã?ジン(0.0??.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??.0)を指定しますã?
242                    if( categoryMargin != null ) {
243                            double ctMargin = Double.parseDouble( categoryMargin );
244                            categoryAxis.setCategoryMargin( ctMargin ) ;    // double margin
245                    }
246    
247                    // 下方マã?ジン(0.0??.0)を指定しますã?
248                    if( lowerMargin != null ) {
249                            double lwMargin = Double.parseDouble( lowerMargin );
250                            categoryAxis.setLowerMargin( lwMargin ) ;       // double margin
251                    }
252    
253                    // 上方マã?ジン(0.0??.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度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?: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)の場合ã?ã€?: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度 ã€?:90度 ã€?:60度 ã€?:45度 ã€?: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             * シリーズ番号はã€? から始まる数字ですã?
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??.0)を指定しますã?
686             *
687             * カãƒ?‚´リ(グラフã?横軸に相å½?の表示間隔(マã?ジン)の比率を指定しますã?
688             * こã?比率はã€?¼?ではなくã?数å­?double)での設定になりますã?
689             * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
690             *
691             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
692             *
693             * @param       margin  カãƒ?‚´リマã?ジン(0.0??.0)
694             */
695            public void setCategoryMargin( final String margin ) {
696                    categoryMargin = margin;
697            }
698    
699            /**
700             * 下方マã?ジン(0.0??.0)を指定しますã?
701             *
702             * カãƒ?‚´リ(グラフã?横軸に相å½?の下方側(左側)のマã?ジンの比率を指定しますã?
703             * こã?比率はã€?¼?ではなくã?数å­?double)での設定になりますã?
704             * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
705             *
706             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
707             *
708             * @param       margin  下方マã?ジン(0.0??.0)
709             */
710            public void setLowerMargin( final String margin ) {
711                    lowerMargin = margin;
712            }
713    
714            /**
715             * 上方マã?ジン(0.0??.0)を指定しますã?
716             *
717             * カãƒ?‚´リ(グラフã?横軸に相å½?の上方側(右側)のマã?ジンの比率を指定しますã?
718             * こã?比率はã€?¼?ではなくã?数å­?double)での設定になりますã?
719             * 何もæŒ?®šしなã�??合ã?、デフォルトで自動調整されますã?
720             *
721             * @og.rev 4.0.2.0 (2007/12/20) 新規追åŠ?
722             *
723             * @param       margin  上方マã?ジン(0.0??.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) 横軸ラベルを90度傾ける処ç�?‚’追åŠ?
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    }