com.orange.atk.atkUI.coregui.StatisticTool.java Source code

Java tutorial

Introduction

Here is the source code for com.orange.atk.atkUI.coregui.StatisticTool.java

Source

/*
 * Software Name : ATK
 *
 * Copyright (C) 2007 - 2012 France Tlcom
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * ------------------------------------------------------------------
 * File Name   : StatisticTool.java
 *
 * Created     : 30/05/2007
 * Author(s)   : Aurore PENAULT
 */
package com.orange.atk.atkUI.coregui;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.encoders.SunJPEGEncoderAdapter;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.PieToolTipGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

import com.orange.atk.atkUI.corecli.Campaign;
import com.orange.atk.atkUI.corecli.Step;
import com.orange.atk.atkUI.corecli.Step.Verdict;

/**
 * 
 * @author Aurore PENAULT
 * @since JDK5.0
 */
public class StatisticTool {

    /**
     * The campaign which corresponds to steps in the current check-list.
     */
    private Campaign campaign;

    private Map<String, Integer> data = new HashMap<String, Integer>();

    /**
     * The generated chart
     */
    private JFreeChart jfreechart;

    public StatisticTool(Campaign campaign) {
        this.campaign = campaign;
        PieDataset piedataset = createSampleDataset();
        jfreechart = createChart(piedataset);
    }

    /**
     * Creates data set with percentage of passed, failed, skipped and not
     * analysed.
     * 
     * @return the data set
     */
    private PieDataset createSampleDataset() {
        DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
        int passed = 0;
        int failed = 0;
        int skipped = 0;
        int notAnalyzed = 0;
        for (int i = 0; i < campaign.size(); i++) {
            Step cmdLine = (Step) campaign.get(i);
            if (cmdLine.getVerdict() == Verdict.PASSED) {
                passed++;
            } else if (cmdLine.getVerdict() == Verdict.FAILED) {
                failed++;
            } else if (cmdLine.getVerdict() == Verdict.SKIPPED) {
                skipped++;
            } else if (cmdLine.getVerdict() == Verdict.NONE) {
                notAnalyzed++;
            }
        }
        int total = passed + failed + skipped + notAnalyzed;
        defaultpiedataset.setValue("Passed", new Double(passed * 100 / (double) total));
        data.put("Passed", passed);
        defaultpiedataset.setValue("Failed", new Double(failed * 100 / (double) total));
        data.put("Failed", failed);
        defaultpiedataset.setValue("Skipped", new Double(skipped * 100 / (double) total));
        data.put("Skipped", skipped);
        defaultpiedataset.setValue("Not analysed", new Double(notAnalyzed * 100 / (double) total));
        data.put("Not analysed", notAnalyzed);
        data.put("Total", total);
        return defaultpiedataset;
    }

    /**
     * Creates the chart.
     * 
     * @param piedataset
     *            the data set
     * @return the created chart
     */
    private JFreeChart createChart(PieDataset piedataset) {
        JFreeChart jfreechart = ChartFactory.createPieChart3D("", piedataset, true, true, false);
        jfreechart.setBackgroundPaint(Color.lightGray);
        PiePlot pie3dplot = (PiePlot) jfreechart.getPlot();
        pie3dplot.setStartAngle(0);
        pie3dplot.setDirection(Rotation.CLOCKWISE);
        pie3dplot.setForegroundAlpha(0.5F);
        pie3dplot.setNoDataMessage("No data to display");
        pie3dplot.setSectionPaint(0, Color.GREEN);// passed
        pie3dplot.setSectionPaint(1, Color.RED);// failed
        pie3dplot.setSectionPaint(2, Color.ORANGE);// skipped
        pie3dplot.setSectionPaint(3, Color.LIGHT_GRAY);// not analysed
        pie3dplot.setToolTipGenerator(new MyToolTipGenerator());
        pie3dplot.setLabelGenerator(new MySectionLabelGenerator());
        pie3dplot.setLegendLabelGenerator(new MySectionLabelGenerator());
        return jfreechart;
    }

    /**
     * Customize tool tip's content for each section of the chart.
     * 
     * @author apenault
     * 
     */
    private class MyToolTipGenerator implements PieToolTipGenerator {
        public String generateToolTip(PieDataset dataset, Comparable key) {
            int percent = dataset.getValue(key).intValue();
            return key.toString() + " = " + percent + " %" + " (" + data.get(key) + "/" + data.get("Total") + ")";
        }
    }

    /**
     * Customize label's content for each section of the chart
     * 
     * @author apenault
     * 
     */
    private class MySectionLabelGenerator implements PieSectionLabelGenerator {
        public String generateSectionLabel(PieDataset dataset, Comparable key) {
            int percent = dataset.getValue(key).intValue();
            return key.toString() + " = " + percent + " %" + " (" + data.get(key) + "/" + data.get("Total") + ")";
        }

        public AttributedString generateAttributedSectionLabel(PieDataset dataset, Comparable key) {
            int percent = dataset.getValue(key).intValue();
            return new AttributedString(
                    key.toString() + " = " + percent + " %" + " (" + data.get(key) + "/" + data.get("Total") + ")");
        }
    }

    /**
     * Creates a jpeg file with the generated chart
     * 
     * @param outFilePath
     *            the path to the output file
     */
    public void createJPEGFile(File outFile) {
        try {
            FileOutputStream outputStream = new FileOutputStream(outFile);
            BufferedImage bufferedImage = jfreechart.createBufferedImage(550, 270);
            SunJPEGEncoderAdapter encoder = new SunJPEGEncoderAdapter();
            encoder.encode(bufferedImage, outputStream);
        } catch (FileNotFoundException e) {
            Logger.getLogger(this.getClass()).error(e);
        } catch (IOException e) {
            Logger.getLogger(this.getClass()).error(e);
        }
    }

    public JFreeChart getJfreechart() {
        return jfreechart;
    }
}