barChart1.BarChartDemo.java Source code

Java tutorial

Introduction

Here is the source code for barChart1.BarChartDemo.java

Source

package barChart1;

/* ===========================================================
 * JFreeChart : a free chart library for the Java(tm) platform
 * ===========================================================
 *
 * (C) Copyright 2000-2004, by Object Refinery Limited and Contributors.
 *
 * Project Info:  http://www.jfree.org/jfreechart/index.html
 *
 * This library is free software; you can redistribute it and/or modify it under the terms
 * of the GNU Lesser General Public License as published by the Free Software Foundation;
 * either version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with this
 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 *
 * ------------------
 * BarChartDemo7.java
 * ------------------
 * (C) Copyright 2004, by Object Refinery Limited and Contributors.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   -;
 *
 * $Id: BarChartDemo7.java,v 1.13 2004/05/19 09:57:51 mungady Exp $
 *
 * Changes
 * -------
 * 27-Jan-2004 : Version 1, based on BarChartDemo.java (DG);
 *
 */

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.util.concurrent.TimeUnit;

import javax.swing.JOptionPane;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.text.TextUtilities;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.Layer;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;
import org.jfree.util.Log;
import org.jfree.util.PrintStreamLogTarget;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

/**
 * A simple demonstration application showing how to create a bar chart with a custom item
 * label generator.
 */
public class BarChartDemo extends ApplicationFrame {

    /**
    * Creates a new demo instance.
    *
    * @param title  the frame title.
    */
    public BarChartDemo(String title) {

        super(title);
        CategoryDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartPanel chartPanel = new ChartPanel(chart, false);
        chartPanel.setPreferredSize(new Dimension(1300, 1000));
        setContentPane(chartPanel);

    }

    /**
     * Returns a sample dataset.
     * 
     * @return The dataset.
     */
    private static CategoryDataset createDataset() {

        // row keys...
        String series1 = "Belgium";
        String series2 = "Italy";
        String series3 = "Ireland";
        String series4 = "Sweden";

        // column keys...
        String category1 = "Matches";
        String category2 = "Wins";
        String category3 = "Draws";
        String category4 = "Losses";
        //   String category5 = "Category 5";

        // create the dataset...
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        dataset.addValue(1.0, series1, category1);
        dataset.addValue(4.0, series1, category2);
        dataset.addValue(3.0, series1, category3);
        dataset.addValue(5.0, series1, category4);
        //  dataset.addValue(5.0, series1, category5);

        dataset.addValue(5.0, series2, category1);
        dataset.addValue(7.0, series2, category2);
        dataset.addValue(6.0, series2, category3);
        dataset.addValue(8.0, series2, category4);
        //     dataset.addValue(4.0, series2, category5);

        dataset.addValue(4.0, series3, category1);
        dataset.addValue(3.0, series3, category2);
        dataset.addValue(2.0, series3, category3);
        dataset.addValue(3.0, series3, category4);
        //    dataset.addValue(6.0, series3, category5);

        return dataset;

    }

    /**
     * Creates a sample chart.
     * 
     * @param dataset  the dataset.
     * 
     * @return The chart.
     */
    private static JFreeChart createChart(CategoryDataset dataset) {

        // create the chart...
        JFreeChart chart = ChartFactory.createBarChart("Belgium vs Italy vs Ireland ", // chart title
                "Category", // domain axis label
                "Value", // range axis label
                dataset, // data
                PlotOrientation.VERTICAL, // orientation
                true, // include legend
                true, // tooltips?
                false // URLs?
        );

        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

        // set the background color for the chart...
        chart.setBackgroundPaint(Color.white);

        // get a reference to the plot for further customisation...
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setDomainGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.white);

        // set the range axis to display integers only...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        // disable bar outlines...
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);

        // set up gradient paints for series...
        GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f, 0.0f, new Color(0, 0, 64));
        GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 64, 0));
        GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f, 0.0f, new Color(64, 0, 0));

        GradientPaint gp3 = new GradientPaint(0.0f, 0.0f, Color.yellow, 0.0f, 0.0f, new Color(64, 0, 0));
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        renderer.setSeriesPaint(2, gp2);
        renderer.setSeriesPaint(3, gp2);

        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));
        // OPTIONAL CUSTOMISATION COMPLETED.

        return chart;

    }

    private static WebDriverWait wait;

    private static WebDriver driver;

    private static String statistics;

    /**
     * Starting point for the demonstration application.
     *
     * @param args  ignored.
     */
    public static void main(String[] args) {

        // Demo to buy tickets to the EK 2016

        System.out.println("Hello UEFA 2016 !!!");

        statistics = "";

        JOptionPane.showMessageDialog(null, "Belgium versus Italy demo start");

        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver, 500);

        //Open Home Page
        driver.manage().window().maximize();
        driver.get("http://www.uefa.com/");

        wait.until(ExpectedConditions.visibilityOfElementLocated(
                By.xpath("//div/header/nav/div/div/ul/li/a[text() = 'UEFA EURO 2016']")));

        driver.findElement(By.xpath("//div/header/nav/div/div/ul/li/a[text() = 'UEFA EURO 2016']")).click();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div//nav/div/div/ul/li/a[ text() = 'Teams']")));

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div//nav/div/div/ul/li/a[ text() = 'Matches']")))
                .click();

        wait.until(ExpectedConditions.visibilityOfElementLocated(
                By.xpath("//div/div//div//div/a[text() = 'Select your team and follow their EURO journey']")));

        driver.findElement(
                By.xpath("//div/div//div//div/a[text() = 'Select your team and follow their EURO journey']"))
                .click();

        wait2Secs();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div//ul/li/span[text()='Belgium']")));

        driver.findElement(By.xpath("//div/div/div//ul/li/span[text()='Belgium']")).click();

        // Belgium
        wait2Secs();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("(//div/table[1]/tbody/tr/td/div/a[text()='21.00'])[1]")));

        driver.findElement(By.xpath("(//div/table[1]/tbody/tr/td/div/a[text()='21.00'])[1]")).click();

        wait2Secs();

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a/span[text()='Pre-match']")));

        // Go to the statistics

        driver.get("http://www.uefa.com/uefaeuro/season=2016/statistics/index.html");

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a/span[text()='Teams']")));

        driver.findElement(By.xpath("//a/span[text()='Teams']")).click();

        // Look up the statistics for Belgium and Italy

        getOverviewStats("BE", "ITA", "Belgium", "Italy");

        wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Goals']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Goals']")).click();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Belgium");
        ;

        wait2Secs();

        // getGoalsStats("BE","ITA","Belgium","Italy");

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Attempts']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Attempts']")).click();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Belgium");
        ;

        wait2Secs();

        wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Passes']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Passes']")).click();

        wait2Secs();

        // Italy

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Italy");
        ;

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Overview']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Overview']")).click();

        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Italy");
        ;

        wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Goals']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Goals']")).click();

        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Italy");
        ;

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Attempts']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Attempts']")).click();

        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Italy");
        ;

        wait.until(
                ExpectedConditions.visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Passes']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Passes']")).click();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys("Italy");
        ;

        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

        JOptionPane.showMessageDialog(null, "Belgium versus Italy : \n" + statistics);

        BarChartDemo demo = new BarChartDemo("Belgium vs Italy");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }

    /*
     * A method to get the overview statistics
     * 
     */

    public static String getOverviewStats(String country, String secondcountry, String countryName,
            String secondCountryName) {

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/ul/li/a[text()='Overview']")));

        driver.findElement(By.xpath("//div/div/div/ul/li/a[text()='Overview']")).click();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).sendKeys(countryName);
        ;

        wait2Secs();

        String matchesPlayed1 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[2]")).getText();

        String wins1 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[3]")).getText();

        String draws1 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[4]")).getText();

        String losses1 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[5]")).getText();

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).clear();

        wait2Secs();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']"))
                .sendKeys(secondCountryName);
        ;

        wait2Secs();

        // Italy

        String matchesPlayed2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[2]")).getText();

        String wins2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[3]")).getText();

        String draws2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[4]")).getText();

        String losses2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[5]")).getText();

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).clear();

        wait2Secs();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']"))
                .sendKeys(secondCountryName);
        ;

        wait2Secs();

        // Italy

        String matchesPlayed2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[2]")).getText();

        String wins2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[3]")).getText();

        String draws2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[4]")).getText();

        String losses2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[5]")).getText();

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']")).clear();

        wait2Secs();

        wait.until(ExpectedConditions
                .visibilityOfElementLocated(By.xpath("//div/div/div/div/input[@value='Search for a team']")));

        driver.findElement(By.xpath("//div/div/div/div/input[@value='Search for a team']"))
                .sendKeys(secondCountryName);
        ;

        wait2Secs();

        // Italy

        String matchesPlayed2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[2]")).getText();

        String wins2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[3]")).getText();

        String draws2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[4]")).getText();

        String losses2 = driver.findElement(By.xpath("//tbody/tr[@class='off odd']/td[5]")).getText();

        return statistics;
    }

    public static String getGoalsStats(String country) {

        String totalGoalsBE = driver.findElement(By.xpath("//tbody/tr[@class='on odd']/td[2]")).getText();

        statistics = statistics + "Total goals    " + country + ": " + totalGoalsBE + "\n";

        String totalCounterBE = driver.findElement(By.xpath("//tbody/tr[@class='on odd']/td[4]")).getText();

        statistics = statistics + "Total goals  " + country + ": " + totalCounterBE + "\n";

        return statistics;

    }

    public static void wait2Secs() {

        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

    }

}