    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 java.util.List;
    019
    020import org.jfree.data.general.Dataset;
    021import org.jfree.data.general.PieDataset;
    022// import org.jfree.data.general.ValueDataset;                  // 5.7.8.0 (2014/07/04)
    023import org.jfree.data.category.CategoryDataset;
    024import org.jfree.data.xy.XYDataset;
    025import org.jfree.chart.plot.Plot;
    026import org.jfree.chart.plot.MultiplePiePlot;
    027import org.jfree.chart.plot.PiePlot;
    028import org.jfree.chart.plot.PiePlot3D;
    029import org.jfree.chart.plot.RingPlot;
    030import org.jfree.chart.plot.SpiderWebPlot;
    031import org.jfree.chart.plot.PolarPlot;
    032// import org.jfree.chart.plot.MeterPlot;                               // 5.7.8.0 (2014/07/04)
    033// import org.jfree.chart.plot.ThermometerPlot;                 // 5.7.8.0 (2014/07/04)
    034// import org.jfree.chart.plot.CompassPlot;                             // 5.7.8.0 (2014/07/04)
    035import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
    036import org.jfree.chart.labels.StandardPieToolTipGenerator;
    037
    038/**
    039 * ChartPlot_Pie は、ChartPlot インターフェースを継承した実体クラスです。
    040 * JFreeChart では、各種オブジェクトの組み合わせで、色々なグラフを作成できます。
    041 * チャートタイプが、複数種類存在するため、ここでは、特殊な方法として、各タイプ毎に
    042 * オブジェクトを構築しています。(ファクトリメソッド的な処理)
    043 *
    044 * @version  0.9.0      2007/06/21
    045 * @author       Kazuhiko Hasegawa
    046 * @since        JDK1.1,
    047 */
    048public class ChartPlot_Pie implements ChartPlot {
    049
    050        /**
    051         * Plot オブジェクトを取得します。
    052         *
    053         * Plot オブジェクト には、その種類の応じた、データセットやレンデラーを
    054         * 設定する必要があります。
    055         * また、複数のデータセットや、それに関係する属性情報も、設定する必要が
    056         * あります。
    057         * Plot は、JFreeChart オブジェクトにつき、一つ用意しなければなりません。
    058         * チャート合成時でも、Plot は一つです。
    059         *
    060         * @og.rev 5.3.0.0 (2010/12/01) 特殊プロットの追加
    061         * @og.rev 5.7.8.0 (2014/07/04) MeterPlot 、Compass 、Thermometer の機能追加
    062         * @og.rev 5.9.10.4 (2016/07/19) Pieに色指定の反映
    063         * @og.rev 5.9.17.1 (2017/02/10) Pie3D,Ringにも色指定反映
    064         *
    065         * @param       create  ChartCreateオブジェクト
    066         *
    067         * @return      Plotオブジェクト
    068         */
    069        public Plot getPlot( final ChartCreate create ) {
    070
    071                List<ChartDataset> datasetList = create.getDatasetList();
    072                ChartDataset chDataset = datasetList.get(0);
    073
    074                Dataset dtset = chDataset.getDataset();
    075
    076                // クリッカブル・マップ
    077                HybsURLGenerator urlGen = create.getURLGenerator();
    078                boolean useToolTip = create.isUseToolTip();             // 4.9.9.9 (2009/08/07) メソッド名変更
    079
    080                Plot plot = null;
    081                String type = chDataset.getChartType();
    082                if( "MultiplePie".equalsIgnoreCase( type ) ) {
    083                        plot = new MultiplePiePlot();
    084                        ((MultiplePiePlot)plot).setDataset( (CategoryDataset)dtset );
    085                }
    086                else if( "Pie".equalsIgnoreCase( type ) ) {
    087                        plot = new PiePlot();
    088                        ((PiePlot)plot).setDataset( (PieDataset)dtset );
    089                        if( urlGen != null ) {
    090                                ((PiePlot)plot).setURLGenerator( urlGen );
    091                        }
    092                        if( useToolTip ){       // 4.3.1.0 (2008/08/09) ツールチップスの利用
    093                                ((PiePlot)plot).setToolTipGenerator( new StandardPieToolTipGenerator() );
    094                        }
    095
    096                        // 5.9.10.4 (2016/07/19) 色指定の反映
    097                        java.awt.Color[] clrs = chDataset.getSeriesColors();
    098                        if( clrs != null && clrs.length>0){
    099                                for( int i=0;i<clrs.length; i++){
    100                                        ((PiePlot)plot).setSectionPaint(i,clrs[i]); // 非推奨だがとりあえず暫定的にindexを使っておく
    101                                }
    102                        }
    103
    104                }
    105                else if( "Pie3D".equalsIgnoreCase( type ) ) {
    106                        plot = new PiePlot3D();
    107                        ((PiePlot3D)plot).setDataset( (PieDataset)dtset );
    108                        if( urlGen != null ) {
    109                                ((PiePlot)plot).setURLGenerator( urlGen );
    110                        }
    111                        if( useToolTip ){       // 4.3.1.0 (2008/08/09) ツールチップスの利用
    112                                ((PiePlot)plot).setToolTipGenerator( new StandardPieToolTipGenerator() );
    113                        }
    114
    115                        // 5.9.17.1 (2017/02/10)
    116                        java.awt.Color[] clrs = chDataset.getSeriesColors();
    117                        if( clrs != null && clrs.length>0){
    118                                for( int i=0;i<clrs.length; i++){
    119                                        ((PiePlot3D)plot).setSectionPaint(i,clrs[i]); // 非推奨だがとりあえず暫定的にindexを使っておく
    120                                }
    121                        }
    122                }
    123                else if( "Ring".equalsIgnoreCase( type ) ) {
    124                        plot = new RingPlot();
    125                        ((RingPlot)plot).setDataset( (PieDataset)dtset );
    126                        if( urlGen != null ) {
    127                                ((PiePlot)plot).setURLGenerator( urlGen );
    128                        }
    129                        if( useToolTip ){       // 4.3.1.0 (2008/08/09) ツールチップスの利用
    130                                ((RingPlot)plot).setToolTipGenerator( new StandardPieToolTipGenerator() );
    131                        }
    132
    133                        // 5.9.17.1 (2017/02/10)
    134                        java.awt.Color[] clrs = chDataset.getSeriesColors();
    135                        if( clrs != null && clrs.length>0){
    136                                for( int i=0;i<clrs.length; i++){
    137                                        ((RingPlot)plot).setSectionPaint(i,clrs[i]); // 非推奨だがとりあえず暫定的にindexを使っておく
    138                                }
    139                        }
    140                }
    141                else if( "SpiderWeb".equalsIgnoreCase( type ) ) {
    142                        plot = new SpiderWebPlot();
    143                        ((SpiderWebPlot)plot).setDataset( (CategoryDataset)dtset );
    144                        if( urlGen != null ) {
    145                                ((SpiderWebPlot)plot).setURLGenerator( urlGen );
    146                        }
    147                        if( useToolTip ){       // 4.3.1.0 (2008/08/09) ツールチップスの利用
    148                                ((SpiderWebPlot)plot).setToolTipGenerator( new StandardCategoryToolTipGenerator() );
    149                        }
    150                }
    151                // 5.3.0.0 (2010/12/01) 特殊プロットの追加
    152                else if( "Polar".equalsIgnoreCase( type ) ) {
    153                        plot = new PolarPlot();
    154                        ((PolarPlot)plot).setDataset( (XYDataset)dtset );
    155                }
    156                else if( "Meter".equalsIgnoreCase( type ) ) {
    157                        // 5.7.8.0 (2014/07/04) 機能追加
    158                        plot = chDataset.makeMeterPlot();
    159//                      plot = new MeterPlot();
    160//                      ((MeterPlot)plot).setDataset( (ValueDataset)dtset );
    161                }
    162                else if( "Thermometer".equalsIgnoreCase( type ) ) {
    163                        // 5.7.8.0 (2014/07/04) 機能追加
    164                        plot = chDataset.makeThermometerPlot();
    165//                      plot = new ThermometerPlot();
    166//                      ((ThermometerPlot)plot).setDataset( (ValueDataset)dtset );
    167                }
    168                else if( "Compass".equalsIgnoreCase( type ) ) {
    169                        // 5.7.8.0 (2014/07/04) 機能追加
    170                        plot = chDataset.makeCompassPlot();
    171//                      plot = new CompassPlot();
    172//                      ((CompassPlot)plot).addDataset( (ValueDataset)dtset );
    173                }
    174
    175                return plot;
    176        }
    177}