public Object createObject(Attributes attrs) {
    JRChart chart = (JRChart) digester.peek();
    JRDesignAreaPlot plot = (JRDesignAreaPlot) chart.getPlot();

    return plot;
  }
  protected JRBaseChart(JRChart chart, JRBaseObjectFactory factory) {
    super(chart, factory);

    chartType = chart.getChartType();

    switch (chartType) {
      case CHART_TYPE_AREA:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
        break;
      case CHART_TYPE_BAR:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
        break;
      case CHART_TYPE_BAR3D:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getBar3DPlot((JRBar3DPlot) chart.getPlot());
        break;
      case CHART_TYPE_BUBBLE:
        dataset = factory.getXyzDataset((JRXyzDataset) chart.getDataset());
        plot = factory.getBubblePlot((JRBubblePlot) chart.getPlot());
        break;
      case CHART_TYPE_CANDLESTICK:
        dataset = factory.getHighLowDataset((JRHighLowDataset) chart.getDataset());
        plot = factory.getCandlestickPlot((JRCandlestickPlot) chart.getPlot());
        break;
      case CHART_TYPE_HIGHLOW:
        dataset = factory.getHighLowDataset((JRHighLowDataset) chart.getDataset());
        plot = factory.getHighLowPlot((JRHighLowPlot) chart.getPlot());
        break;
      case CHART_TYPE_LINE:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getLinePlot((JRLinePlot) chart.getPlot());
        break;
      case CHART_TYPE_METER:
        dataset = factory.getValueDataset((JRValueDataset) chart.getDataset());
        plot = factory.getMeterPlot((JRMeterPlot) chart.getPlot());
        break;
      case CHART_TYPE_MULTI_AXIS:
        dataset = null;
        plot = factory.getMultiAxisPlot((JRMultiAxisPlot) chart.getPlot());
        break;
      case CHART_TYPE_PIE:
        dataset = factory.getPieDataset((JRPieDataset) chart.getDataset());
        plot = factory.getPiePlot((JRPiePlot) chart.getPlot());
        break;
      case CHART_TYPE_PIE3D:
        dataset = factory.getPieDataset((JRPieDataset) chart.getDataset());
        plot = factory.getPie3DPlot((JRPie3DPlot) chart.getPlot());
        break;
      case CHART_TYPE_SCATTER:
        dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
        plot = factory.getScatterPlot((JRScatterPlot) chart.getPlot());
        break;
      case CHART_TYPE_STACKEDBAR:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
        break;
      case CHART_TYPE_STACKEDBAR3D:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getBar3DPlot((JRBar3DPlot) chart.getPlot());
        break;
      case CHART_TYPE_THERMOMETER:
        dataset = factory.getValueDataset((JRValueDataset) chart.getDataset());
        plot = factory.getThermometerPlot((JRThermometerPlot) chart.getPlot());
        break;
      case CHART_TYPE_TIMESERIES:
        dataset = factory.getTimeSeriesDataset((JRTimeSeriesDataset) chart.getDataset());
        plot = factory.getTimeSeriesPlot((JRTimeSeriesPlot) chart.getPlot());
        break;
      case CHART_TYPE_XYAREA:
        dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
        plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
        break;
      case CHART_TYPE_XYBAR:
        switch (chart.getDataset().getDatasetType()) {
          case JRChartDataset.TIMESERIES_DATASET:
            dataset = factory.getTimeSeriesDataset((JRTimeSeriesDataset) chart.getDataset());
            break;
          case JRChartDataset.TIMEPERIOD_DATASET:
            dataset = factory.getTimePeriodDataset((JRTimePeriodDataset) chart.getDataset());
            break;
          case JRChartDataset.XY_DATASET:
            dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
            break;
        }
        plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
        break;
      case CHART_TYPE_XYLINE:
        dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
        plot = factory.getLinePlot((JRLinePlot) chart.getPlot());
        break;
      case CHART_TYPE_STACKEDAREA:
        dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
        plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
        break;
      case CHART_TYPE_GANTT:
        dataset = factory.getGanttDataset((JRGanttDataset) chart.getDataset());
        plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
        break;
      default:
        throw new JRRuntimeException("Chart type not supported.");
    }

    showLegend = chart.getShowLegend();
    evaluationTimeValue = chart.getEvaluationTimeValue();
    linkType = chart.getLinkType();
    linkTarget = chart.getLinkTarget();
    titlePositionValue = chart.getTitlePositionValue();
    titleColor = chart.getOwnTitleColor();
    subtitleColor = chart.getOwnSubtitleColor();
    legendColor = chart.getOwnLegendColor();
    legendBackgroundColor = chart.getOwnLegendBackgroundColor();
    legendPositionValue = chart.getLegendPositionValue();
    renderType = chart.getRenderType();
    theme = chart.getTheme();

    titleFont = new JRBaseFont(this, chart.getTitleFont());
    subtitleFont = new JRBaseFont(this, chart.getSubtitleFont());
    legendFont = new JRBaseFont(this, chart.getLegendFont());

    evaluationGroup = factory.getGroup(chart.getEvaluationGroup());
    titleExpression = factory.getExpression(chart.getTitleExpression());
    subtitleExpression = factory.getExpression(chart.getSubtitleExpression());
    anchorNameExpression = factory.getExpression(chart.getAnchorNameExpression());
    hyperlinkReferenceExpression = factory.getExpression(chart.getHyperlinkReferenceExpression());
    hyperlinkAnchorExpression = factory.getExpression(chart.getHyperlinkAnchorExpression());
    hyperlinkPageExpression = factory.getExpression(chart.getHyperlinkPageExpression());
    hyperlinkTooltipExpression = factory.getExpression(chart.getHyperlinkTooltipExpression());
    bookmarkLevel = chart.getBookmarkLevel();
    hyperlinkParameters = JRBaseHyperlink.copyHyperlinkParameters(chart, factory);

    customizerClass = chart.getCustomizerClass();

    lineBox = chart.getLineBox().clone(this);
  }