fr.gouv.diplomatie.applitutoriel.utility.Graphique.java Source code

Java tutorial

Introduction

Here is the source code for fr.gouv.diplomatie.applitutoriel.utility.Graphique.java

Source

/**
 * Copyright ou  ou Copr. Ministre de l'Europe et des Affaires trangres (2017)
 * <p/>
 * pole-architecture.dga-dsi-psi@diplomatie.gouv.fr
 * <p/>
 * Ce logiciel est un programme informatique servant  faciliter la cration d'applications Web conformment
 * aux rfrentiels gnraux franais : RGI, RGS et RGAA
 * <p/>
 * Ce logiciel est rgi par la licence CeCILL soumise au droit franais et respectant les principes de
 * diffusion des logiciels libres. Vous pouvez utiliser, modifier et/ou redistribuer ce programme sous les
 * conditions de la licence CeCILL telle que diffuse par le CEA, le CNRS et l'INRIA sur le site
 * "http://www.cecill.info".
 * <p/>
 * En contrepartie de l'accessibilit au code source et des droits de copie, de modification et de
 * redistribution accords par cette licence, il n'est offert aux utilisateurs qu'une garantie limite. Pour
 * les mmes raisons, seule une responsabilit restreinte pse sur l'auteur du programme, le titulaire des
 * droits patrimoniaux et les concdants successifs.
 * <p/>
 * A cet gard l'attention de l'utilisateur est attire sur les risques associs au chargement, 
 * l'utilisation,  la modification et/ou au dveloppement et  la reproduction du logiciel par l'utilisateur
 * tant donn sa spcificit de logiciel libre, qui peut le rendre complexe  manipuler et qui le rserve
 * donc  des dveloppeurs et des professionnels avertis possdant des connaissances informatiques
 * approfondies. Les utilisateurs sont donc invits  charger et tester l'adquation du logiciel  leurs
 * besoins dans des conditions permettant d'assurer la scurit de leurs systmes et ou de leurs donnes et,
 * plus gnralement,  l'utiliser et l'exploiter dans les mmes conditions de scurit.
 * <p/>
 * Le fait que vous puissiez accder  cet en-tte signifie que vous avez pris connaissance de la licence
 * CeCILL, et que vous en avez accept les termes.
 * <p/>
 * <p/>
 * Copyright or  or Copr. Ministry for Europe and Foreign Affairs (2017)
 * <p/>
 * pole-architecture.dga-dsi-psi@diplomatie.gouv.fr
 * <p/>
 * This software is a computer program whose purpose is to facilitate creation of web application in
 * accordance with french general repositories : RGI, RGS and RGAA.
 * <p/>
 * This software is governed by the CeCILL license under French law and abiding by the rules of distribution
 * of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info".
 * <p/>
 * As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by
 * the license, users are provided only with a limited warranty and the software's author, the holder of the
 * economic rights, and the successive licensors have only limited liability.
 * <p/>
 * In this respect, the user's attention is drawn to the risks associated with loading, using, modifying
 * and/or developing or reproducing the software by the user in light of its specific status of free software,
 * that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for
 * developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged
 * to load and test the software's suitability as regards their requirements in conditions enabling the
 * security of their systems and/or data to be ensured and, more generally, to use and operate it in the same
 * conditions as regards security.
 * <p/>
 * The fact that you are presently reading this means that you have had knowledge of the CeCILL license and
 * that you accept its terms.
 *
 */
package fr.gouv.diplomatie.applitutoriel.utility;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PieLabelLinkStyle;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.util.SortOrder;

/**
 * The Class Graphique.
 *
 * @author MEAE - Ministre de l'Europe et des Affaires trangres
 */
public final class Graphique {

    /**
     * Classe utilitaire => Constructeur priv.
     */
    private Graphique() {

        // not called
    }

    /** The list color. */
    private static List<Color> listColor = new ArrayList<Color>();
    static {
        listColor.add(0, new Color(102, 153, 102));
        listColor.add(1, new Color(51, 51, 102));
        listColor.add(2, new Color(51, 102, 204));
        listColor.add(3, new Color(204, 51, 51));
        listColor.add(4, new Color(0, 204, 204));
        listColor.add(5, new Color(51, 204, 153));
        listColor.add(6, new Color(255, 0, 153));
        listColor.add(7, new Color(204, 204, 0));
        listColor.add(8, Color.BLUE);
        listColor.add(9, Color.DARK_GRAY);
        listColor.add(10, Color.CYAN);
        listColor.add(11, Color.GREEN);
        listColor.add(12, Color.LIGHT_GRAY);
        listColor.add(13, Color.MAGENTA);
        listColor.add(14, Color.ORANGE);
        listColor.add(15, Color.PINK);
        listColor.add(16, Color.RED);
        listColor.add(17, Color.WHITE);
        listColor.add(18, Color.YELLOW);
    }

    /**
     * Creer camember3 d.
     *
     * @param title
     *            the title
     * @param dataset
     *            the dataset
     * @param legend
     *            the legend
     * @param tooltips
     *            the tooltips
     * @param urls
     *            the urls
     * @return the j free chart
     * @throws FontFormatException
     *             the font format exception
     * @throws IOException
     *             Signals that an I/O exception has occurred.
     */
    public static JFreeChart creerCamember3D(final String title, final DefaultPieDataset dataset,
            final boolean legend, final boolean tooltips, final boolean urls)
            throws FontFormatException, IOException {

        dataset.sortByValues(SortOrder.DESCENDING);
        final JFreeChart jfreeChart = ChartFactory.createPieChart3D(title, dataset, legend, tooltips, urls);

        jfreeChart.setBackgroundPaint(Color.white);
        jfreeChart.setBorderVisible(true);
        jfreeChart.getLegend().setPosition(RectangleEdge.LEFT);
        final GraphicsEnvironment graph = GraphicsEnvironment.getLocalGraphicsEnvironment();
        final InputStream inputStream = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("hornet/framework/font/LiberationSans-Bold.ttf");
        final Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream);
        graph.registerFont(font);
        jfreeChart.getLegend().setItemFont(new Font("Liberation Sans", Font.BOLD, 11));
        jfreeChart.getLegend().setHeight(400);
        jfreeChart.getLegend().setBorder(0, 0, 0, 0);
        jfreeChart.setTitle(new TextTitle(title, new Font("Liberation Sans", Font.BOLD, 16)));
        final PiePlot piePlot = (PiePlot) jfreeChart.getPlot();

        final int nbData = dataset.getItemCount();
        int cptColor = 0;
        for (int x = 0; x < nbData; x++) {
            if (cptColor >= listColor.size()) {
                cptColor = 0;
            }
            piePlot.setSectionPaint(dataset.getKey(x), listColor.get(cptColor));

            cptColor++;

        }

        piePlot.setForegroundAlpha(0.5f);
        piePlot.setLabelFont(new Font("Liberation Sans", Font.BOLD, 12));
        piePlot.setLabelOutlineStroke(null);
        piePlot.setLabelLinkStroke(new BasicStroke(0.4f));
        piePlot.setLabelBackgroundPaint(Color.WHITE);
        piePlot.setLabelLinkStyle(PieLabelLinkStyle.STANDARD);
        piePlot.setBackgroundAlpha(0);
        piePlot.setOutlineVisible(false);
        piePlot.setForegroundAlpha(1); // transparence
        piePlot.setInteriorGap(0); // le camembert occupe plus de place
        piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator("{1}"));
        piePlot.setStartAngle(70);
        piePlot.setCircular(true); // force pour avoir un cercle et pas un oval
        piePlot.setMaximumLabelWidth(0.20);
        piePlot.setBaseSectionOutlinePaint(Color.BLACK); // bordure du camembert

        return jfreeChart;

    }

    /**
     * permet de soit complter le libell pour viter d'avoir 2 lgendes sur la mme ligne, soit de dcouper
     * le libell s'il ne loge pas en longueur sur une seule ligne.
     *
     * @param chaine
     *            the chaine
     * @param longueur
     *            the longueur
     * @return the string
     */
    public static String genererLibellePourLegende(final String chaine, final int longueur) {

        final StringBuffer retour = new StringBuffer();

        if (chaine.length() <= longueur) {

            retour.append(StringUtils.rightPad(chaine, longueur, ' '));
        } else {

            retour.append(chaine);
            final int index = StringUtils.lastIndexOf(" ", chaine.substring(0, longueur));

            if (index > 0) {
                retour.replace(index, index + 1, "\r\n");
            }

        }

        return retour.toString();
    }
}