Example usage for org.jfree.chart.plot PiePlot setBackgroundPaint

List of usage examples for org.jfree.chart.plot PiePlot setBackgroundPaint

Introduction

In this page you can find the example usage for org.jfree.chart.plot PiePlot setBackgroundPaint.

Prototype

public void setBackgroundPaint(Paint paint) 

Source Link

Document

Sets the background color of the plot area and sends a PlotChangeEvent to all registered listeners.

Usage

From source file:edu.monash.merc.struts2.action.TLSumChartAction.java

@SuppressWarnings("unchecked")
public String piechart() {
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("Green", l4);
    dataset.setValue("Yellow", l3);
    dataset.setValue("Red", l2);
    dataset.setValue("Black", l1);

    chart = ChartFactory.createPieChart(dt, dataset, true, true, false);
    PiePlot plot = (PiePlot) chart.getPlot();

    plot.setBackgroundPaint(Color.WHITE);
    //no border/*from w  w w.ja  v a  2s  .c  o  m*/
    plot.setOutlineStroke(null);
    //no label
    plot.setLabelGenerator(null);

    NumberFormat percentFormat = NumberFormat.getPercentInstance();
    percentFormat.setMaximumFractionDigits(2);
    plot.setLegendLabelGenerator(
            new StandardPieSectionLabelGenerator("{0}={2}", NumberFormat.getNumberInstance(), percentFormat));
    //set specific colors  green, yellow, red and black
    Color[] colors = { new Color(0, 140, 0), new Color(254, 172, 0), new Color(226, 0, 40),
            new Color(0, 0, 0) };
    setColor(plot, dataset, colors);

    chart.setBackgroundPaint(Color.WHITE);
    chart.getTitle().setFont(chart.getTitle().getFont().deriveFont(11.0f));
    return SUCCESS;
}

From source file:cn.edu.thss.iise.bpmdemo.charts.PieChartDemo4.java

/**
 * Default constructor./*from  w  ww . j  a v  a 2 s  .c  o m*/
 *
 * @param title
 *            the frame title.
 */
public PieChartDemo4(final String title) {

    super(title);
    final PieDataset dataset = createDataset(14);

    // create the chart...
    final JFreeChart chart = ChartFactory.createPieChart("Pie Chart Demo 4", // chart title
            dataset, // dataset
            false, // include legend
            true, false);

    // set the background color for the chart...
    chart.setBackgroundPaint(new Color(222, 222, 255));

    final PiePlot plot = (PiePlot) chart.getPlot();
    plot.setBackgroundPaint(Color.white);
    plot.setCircular(true);
    plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {2}", NumberFormat.getNumberInstance(),
            NumberFormat.getPercentInstance()));
    plot.setNoDataMessage("No data available");

    // add the chart to a panel...
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));

    // add table
    Object[][] data = { { "Kathy0", new Integer(0) }, { "Kathy1", new Integer(2) },
            { "Kathy2", new Integer(5) }, { "Kathy3", new Integer(5) }, { "Kathy4", new Integer(5) },
            { "Kathy5", new Integer(5) }, { "Kathy6", new Integer(5) }, { "Kathy7", new Integer(5) },
            { "Kathy8", new Integer(5) }, { "Kathy9", new Integer(5) } };
    String[] columnNames = { "Model Name", "Reuse Number" };
    JTable table = new JTable(data, columnNames);
    final JPanel panel = new JPanel();
    panel.add(chartPanel);
    panel.add(table);
    setContentPane(panel);
    final Rotator rotator = new Rotator(plot);
    rotator.start();

}

From source file:gavisualizer.PieChart.java

@Override
public void generate() {
    // Creates Pie Chart from variables
    JFreeChart chart = ChartFactory.createPieChart(_title, // chart title
            _dataset, // data
            false, // include legend
            false, false);//from w  ww . j  a  v a2 s.c o  m

    // Set Plot canvas color and direction
    PiePlot plot = (PiePlot) chart.getPlot();
    plot.setDirection(Rotation.CLOCKWISE);
    plot.setForegroundAlpha(0.5f);
    plot.setBackgroundPaint(Color.WHITE);

    /*
    *  Use these to edit the decimal percentage: 
    *       NumberFormat nf = NumberFormat.getPercentInstance();
    *       nf.setRoundingMode(RoundingMode.);
    *       nf.setMinimumFractionDigits(2);
    *       plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}", NumberFormat.getNumberInstance(), nf));
    *  
    *  And remove line 63
    */

    plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {2}"));
    plot.setOutlinePaint(Color.white);

    _chart = chart;
}

From source file:uom.research.thalassemia.util.PieChartCreator.java

/**
 * Creates a chart.//from  www  . ja  va 2s. com
 *
 * @param dataset the dataset.
 *
 * @return A chart.
 */
private JFreeChart createChart(PieDataset dataset) {

    JFreeChart chart = ChartFactory.createPieChart(title, // chart title
            dataset, // data
            true, // no legend
            true, // tooltips
            false // no URL generation
    );

    // set a custom background for the chart
    chart.setBackgroundPaint(
            new GradientPaint(new Point(0, 0), new Color(20, 20, 20), new Point(400, 200), Color.DARK_GRAY));

    // customise the title position and font
    TextTitle t = chart.getTitle();
    t.setHorizontalAlignment(HorizontalAlignment.LEFT);
    t.setPaint(new Color(240, 240, 240));
    t.setFont(new Font("Arial", Font.BOLD, 26));

    PiePlot plot = (PiePlot) chart.getPlot();
    plot.setBackgroundPaint(null);
    plot.setInteriorGap(0.04);
    plot.setOutlineVisible(false);

    // use gradients and white borders for the section colours
    int itemIndex = 0;
    for (Object col : pieDataset.getKeys()) {
        plot.setSectionPaint(col.toString(), gradientPaints[itemIndex]);
        if (itemIndex == pieDataset.getItemCount() - 1) {
            itemIndex = 0;
        }
        itemIndex++;
    }

    plot.setBaseSectionOutlinePaint(Color.WHITE);
    plot.setSectionOutlinesVisible(true);
    plot.setBaseSectionOutlineStroke(new BasicStroke(2.0f));

    // customise the section label appearance
    plot.setLabelFont(new Font("Courier New", Font.BOLD, 20));
    plot.setLabelLinkPaint(Color.WHITE);
    plot.setLabelLinkStroke(new BasicStroke(2.0f));
    plot.setLabelOutlineStroke(null);
    plot.setLabelPaint(Color.WHITE);
    plot.setLabelBackgroundPaint(null);

    // add a subtitle giving the data source
    TextTitle source = new TextTitle("Source: http://www.bbc.co.uk/news/business-15489523",
            new Font("Courier New", Font.PLAIN, 12));
    source.setPaint(Color.WHITE);
    source.setPosition(RectangleEdge.BOTTOM);
    source.setHorizontalAlignment(HorizontalAlignment.RIGHT);
    chart.addSubtitle(source);
    return chart;

}

From source file:cn.edu.thss.iise.bpmdemo.statistics.actions.ModelReusePanel.java

private JPanel createPanel() throws IOException {
    createDataSet();// www . j av  a 2s .  c  o  m

    // create the chart...
    final JFreeChart chart = ChartFactory.createPieChart("Reused Times", // chart
            // title
            data1, // dataset
            false, // include legend
            true, false);

    // set the background color for the chart...
    chart.setBackgroundPaint(new Color(222, 222, 255));

    final PiePlot plot = (PiePlot) chart.getPlot();
    plot.setBackgroundPaint(Color.white);
    plot.setCircular(true);
    plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {2}", NumberFormat.getNumberInstance(),
            NumberFormat.getPercentInstance()));
    plot.setNoDataMessage("No data available");

    // add the chart to a panel...
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));

    String[] columnNames = { "Name", "Reuse Times" };
    JTable table = new JTable(data2, columnNames);
    JPanel panel = new JPanel();
    panel.add(chartPanel);
    panel.add(table);
    final Rotator rotator = new Rotator(plot);
    rotator.start();
    return panel;
}

From source file:Software_Jframes.chart.java

public void piechart(JDesktopPane jDesktopPane1, String pid) {

    DefaultPieDataset piedataset = new DefaultPieDataset();
    try {//from   w ww.j a v  a 2 s.co m
        ResultSet rs = db.statement()
                .executeQuery("select name,cost from project_level_payment where projectid='" + pid + "' ");
        while (rs.next()) {
            String cost = rs.getString("cost");
            int cost_int1 = Integer.parseInt(cost);

            String name = rs.getString("name");

            piedataset.setValue(name, new Integer(cost_int1));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    JFreeChart chart = ChartFactory.createPieChart("Costs for Project", piedataset, true, true, true);
    PiePlot p = (PiePlot) chart.getPlot();
    p.setBackgroundPaint(Color.white);
    ChartPanel panel = new ChartPanel(chart);
    jDesktopPane1.add(panel).setSize(440, 300);
}

From source file:Software_Jframes.chart.java

public void piechart_customer(JDesktopPane jDesktopPane1, String pid) {

    DefaultPieDataset piedataset = new DefaultPieDataset();
    int cost_total = 0;
    try {/* www . j  a va  2 s. c  o  m*/
        ResultSet rs = db.statement().executeQuery("select * from cus_payment where Project_id='" + pid + "' ");
        while (rs.next()) {
            String cost = rs.getString("Amount");
            int cost_int1 = Integer.parseInt(cost);
            cost_total = cost_total + cost_int1;

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    piedataset.setValue("Amount Received", cost_total);
    piedataset.setValue("Amount to be Received", 7854);

    JFreeChart chart = ChartFactory.createPieChart("Costs for Project", piedataset, true, true, true);
    PiePlot p = (PiePlot) chart.getPlot();
    p.setBackgroundPaint(Color.white);
    ChartPanel panel = new ChartPanel(chart);
    jDesktopPane1.add(panel).setSize(500, 230);
}

From source file:com.itemanalysis.jmetrik.graph.piechart.PieChartPanel.java

public void setGraph() {
    if (hasGroupVariable) {
        DefaultCategoryDataset piedat = new DefaultCategoryDataset();
        chart = ChartFactory.createMultiplePieChart(chartTitle, piedat, TableOrder.BY_ROW, showLegend, true,
                false);/*from w  w w . j  a  va  2 s .c  om*/

        if (chartSubtitle != null && !"".equals(chartSubtitle)) {
            TextTitle subtitle1 = new TextTitle(chartSubtitle);
            chart.addSubtitle(subtitle1);
        }

        MultiplePiePlot plot = (MultiplePiePlot) chart.getPlot();
        JFreeChart subchart = plot.getPieChart();
        PiePlot p = (PiePlot) subchart.getPlot();
        p.setBackgroundPaint(Color.WHITE);
        p.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
        if (explode)
            p.setExplodePercent(explodeValue, explodePercent);

        ChartPanel panel = new ChartPanel(chart);
        panel.setPreferredSize(new Dimension(width, height));

        chart.setPadding(new RectangleInsets(20.0, 5.0, 20.0, 5.0));
        this.add(panel);
    } else {
        DefaultPieDataset piedat = new DefaultPieDataset();
        if (command.getSelectOneOption("view").isValueSelected("3D")) {
            chart = ChartFactory.createPieChart3D(chartTitle, piedat, showLegend, true, false);

            PiePlot3D plot = (PiePlot3D) chart.getPlot();
            plot.setStartAngle(290);
            plot.setDirection(Rotation.CLOCKWISE);
            plot.setForegroundAlpha(0.5f);
            plot.setNoDataMessage("No data to display");
            if (explode)
                plot.setExplodePercent(explodeValue, explodePercent);

        } else {
            chart = ChartFactory.createPieChart(command.getFreeOption("title").getString(), piedat, showLegend,
                    true, false);
        }

        if (chartSubtitle != null && !"".equals(chartSubtitle)) {
            TextTitle subtitle = new TextTitle(chartSubtitle);
            chart.addSubtitle(subtitle);
        }

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setLabelGap(0.02);
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
        plot.setBackgroundPaint(Color.WHITE);
        if (explode)
            plot.setExplodePercent(explodeValue, explodePercent);

        ChartPanel panel = new ChartPanel(chart);
        panel.getPopupMenu().addSeparator();
        this.addJpgMenuItem(this, panel.getPopupMenu());
        panel.setPreferredSize(new Dimension(width, height));

        chart.setPadding(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
        this.setBackground(Color.WHITE);
        this.add(panel);
    }

}

From source file:net.footballpredictions.footballstats.swing.ResultsPieChart.java

/**
 * Updates the relative sizes of the pie chart segments.
 *///from w ww  . ja  va  2s.  c om
public void updateGraph(int won, int drawn, int lost) {
    DefaultKeyedValues values = new DefaultKeyedValues();
    values.addValue(messageResources.getString("headToHead.won"), won);
    values.addValue(messageResources.getString("headToHead.drawn"), drawn);
    values.addValue(messageResources.getString("headToHead.lost"), lost);
    PieDataset dataSet = new DefaultPieDataset(values);

    JFreeChart chart = ChartFactory.createPieChart(title, dataSet, false, // Legend.
            true, // Tooltips.
            false); // URLs.
    PiePlot plot = (PiePlot) chart.getPlot();
    plot.setInteriorGap(0);
    plot.setSectionPaint(0, Colours.WIN);
    plot.setSectionPaint(1, Colours.DRAW);
    plot.setSectionPaint(2, Colours.DEFEAT);
    plot.setBackgroundPaint(null);
    plot.setOutlinePaint(null);
    plot.setLabelGenerator(null);
    plot.setToolTipGenerator(new StandardPieToolTipGenerator("{0} {1} ({2})"));
    setChart(chart);
}

From source file:uk.ac.bbsrc.tgac.miso.core.util.ReportsUtils.java

public static String buildHTMLReport(List<? extends Reportable> reportables, String type, List<String> options)
        throws ReportingException {
    Random generator = new Random();
    StringBuilder sb = new StringBuilder();
    Boolean chartbool = false;/*from www  . jav a  2  s. c  o m*/
    if (options.contains("Chart")) {
        chartbool = true;
    }

    // header
    sb.append(
            "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"
                    + "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
                    + "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\">\n" + "<head>\n"
                    + "    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n"
                    + "<meta http-equiv=\"Pragma\" content=\"no-cache\">\n"
                    + "<meta http-equiv=\"Cache-Control\" content=\"no-cache\">\n"
                    + "<meta http-equiv=\"Expires\" content=\"Sat, 01 Dec 2001 00:00:00 GMT\">\n"
                    + "    <link rel=\"stylesheet\" href=\"/styles/style.css\" type=\"text/css\">\n"
                    + "<title>MISO Report</title>"
                    + "</head><body onLoad=\"self.focus()\"><table border=\"0\" width=\"100%\">\n"
                    + "    <tr>\n" + "        <td class=\"headertable\" align=\"left\" \">\n"
                    + "            <img src=\"/styles/images/miso_logo.png\" alt=\"MISO Logo\" name=\"logo\"\n"
                    + "                                  border=\"0\" id=\"misologo\"/>\n" + "        </td>\n"
                    + "        <td class=\"headertable\" align=\"right\" \">\n"
                    + "            <img src=\"/styles/images/tgac_new_logo.png\" alt=\"TGAC Logo\" name=\"logo\"\n"
                    + "                                  border=\"0\" id=\"tgaclogo\"/>\n" + "        </td>\n"
                    + "    </tr>\n" + "</table><hr/>");
    // end of header

    if (type.equals("Project")) {
        Boolean incOverview = false;
        Boolean incSamples = false;
        if (options.contains("Overview")) {
            incOverview = true;
        }
        if (options.contains("Samples")) {
            incSamples = true;
        }

        if (reportables.size() == 1) {
            //Single Project report
            List reportableslist = new ArrayList<Reportable>(reportables);
            Reportable reportable = (Reportable) reportableslist.get(0);
            Project project = (Project) reportable;
            sb.append("<h1>Project Information</h1><br/><div class='report'>");
            sb.append("<b>Project Name: </b> " + project.getName());
            sb.append("<br/><br/>");
            sb.append("<b>Project Alias: </b> " + project.getAlias());
            sb.append("<br/><br/>");
            sb.append("<b>Project Description: </b> " + project.getDescription());
            sb.append("<br/><br/>");
            sb.append("<b>Progress: </b> " + project.getProgress().name());
            sb.append("<br/><br/>");

            if (project.getOverviews().size() > 0 && incOverview) {
                sb.append("<table class=\"list\">\n" + "            <thead>\n" + "            <tr>\n"
                        + "                <th>Principal Investigator</th>\n"
                        + "                <th>Start Date</th>\n" + "                <th>End Date</th>\n"
                        + "                <th>Proposed Samples</th>\n"
                        + "                <th>QC Passed Sample</th>\n" + "            </tr>\n"
                        + "            </thead>\n" + "            <tbody>");
                for (ProjectOverview overview : project.getOverviews()) {
                    sb.append("<tr>\n" + "                    <td>" + overview.getPrincipalInvestigator()
                            + "</td>\n" + "                    <td>" + overview.getStartDate() + "</td>\n"
                            + "                    <td>" + overview.getEndDate() + "</td>\n"
                            + "                    <td>" + overview.getNumProposedSamples().toString()
                            + "</td>\n" + "                    <td>" + overview.getQcPassedSamples().size()
                            + "</td>\n" + "                </tr>");
                }
                sb.append("</tbody>\n" + "        </table>");
            } else {
                if (incOverview) {
                    sb.append("<b>Overview:</b> None.");
                }
            }
            sb.append("<br/>");
            if (project.getSamples().size() > 0 && incSamples) {
                sb.append("<table class=\"list\">\n" + "            <thead>\n" + "            <tr>\n"
                        + "                <th>Sample Name</th>\n" + "                <th>Sample Alias</th>\n"
                        + "                <th>Type</th>\n" + "                <th>QC Passed</th>\n"
                        + "            </tr>\n" + "            </thead>\n" + "            <tbody>");
                for (Sample sample : project.getSamples()) {
                    sb.append("<tr>\n" + "                    <td><b>" + sample.getName() + "</b></td>\n"
                            + "                    <td>" + sample.getAlias() + "</td>\n"
                            + "                    <td>" + sample.getSampleType() + "</td>\n"
                            + "                    <td>" + sample.getQcPassed().toString() + "</td>\n"
                            + "                </tr>");
                }
                sb.append("</tbody>\n" + "        </table>");
            } else {
                if (incSamples) {
                    sb.append("<b>Samples:</b> None.");
                }
            }

        }
        // Lists of Projects report
        else if (reportables.size() > 1) {
            sb.append("<h1>Projects Information</h1><br/><div class='report'>");
            Map<String, Integer> map = new HashMap<String, Integer>();
            sb.append("<table class=\"list\">\n" + "    <thead>\n" + "    <tr>\n"
                    + "        <th>Project Name</th>\n" + "        <th>Project Alias</th>\n"
                    + "        <th>Project Description</th>\n" + "        <th>Progress</th>\n");
            if (incOverview) {
                sb.append("        <th>Overviews</th>\n");
            }
            if (incSamples) {
                sb.append("        <th>Samples</th>\n");
            }
            sb.append("    </tr>\n" + "    </thead>\n" + "    <tbody>");
            for (Reportable reportable : reportables) {
                Project project = (Project) reportable;
                sb.append("<tr><td>" + project.getName());
                sb.append("</td>");
                sb.append("<td> " + project.getAlias());
                sb.append("</td>");
                sb.append("<td> " + project.getDescription());
                sb.append("</td>");
                sb.append("<td> " + project.getProgress().name());
                sb.append("</td>");
                if (incOverview) {
                    sb.append("<td>");
                    if (project.getOverviews().size() > 0) {
                        sb.append("<ul class='bullets'>");
                        for (ProjectOverview overview : project.getOverviews()) {
                            sb.append("<li>Principal Investigator: " + overview.getPrincipalInvestigator()
                                    + "<br/> Start Date: " + overview.getStartDate() + "<br/> End Date: "
                                    + overview.getEndDate() + "<br/> Proposed Samples: "
                                    + overview.getNumProposedSamples().toString() + "<br/> QC Passed Samples: "
                                    + overview.getQcPassedSamples().size() + "</li>");
                        }
                        sb.append("</ul>");
                    } else {
                        sb.append("None");
                    }
                    sb.append("</td>");
                }
                if (incSamples) {
                    sb.append("<td>");
                    if (project.getSamples().size() > 0) {
                        sb.append("<ul class='bullets'>");
                        for (Sample sample : project.getSamples()) {
                            sb.append("<li>" + sample.getAlias() + "</li>");
                        }
                        sb.append("</ul>");
                    } else {
                        sb.append("None");
                    }
                    sb.append("</td>");
                }
                sb.append("</tr>");
                int count = map.containsKey(project.getProgress().getKey())
                        ? map.get(project.getProgress().getKey())
                        : 0;
                count++;
                map.put(project.getProgress().getKey(), count);
            }
            sb.append("    </tbody>\n" + "</table>");
            Integer unknown = map.containsKey("Unknown") ? map.get("Unknown") : 0;
            Integer active = map.containsKey("Active") ? map.get("Active") : 0;
            Integer inactive = map.containsKey("Inactive") ? map.get("Inactive") : 0;
            Integer cancelled = map.containsKey("Cancelled") ? map.get("Cancelled") : 0;
            Integer proposed = map.containsKey("Proposed") ? map.get("Proposed") : 0;
            Integer pending = map.containsKey("Pending") ? map.get("Pending") : 0;
            Integer approved = map.containsKey("Approved") ? map.get("Approved") : 0;
            Integer completed = map.containsKey("Completed") ? map.get("Completed") : 0;
            //jfreechart
            final DefaultPieDataset data = new DefaultPieDataset();
            data.setValue("Unknown " + unknown, unknown);
            data.setValue("Active " + active, active);
            data.setValue("Inactive " + inactive, inactive);
            data.setValue("Cancelled " + cancelled, cancelled);
            data.setValue("Proposed " + proposed, proposed);
            data.setValue("Pending " + pending, pending);
            data.setValue("Approved " + approved, approved);
            data.setValue("Completed " + completed, completed);

            final JFreeChart chart = ChartFactory.createPieChart("Projects Status Information", // chart title
                    data, // data
                    false, // include legend
                    true, false);

            final PiePlot plot = (PiePlot) chart.getPlot();
            plot.setStartAngle(290);
            plot.setDirection(Rotation.CLOCKWISE);
            plot.setBackgroundPaint(Color.white);
            plot.setForegroundAlpha(0.5f);
            plot.setNoDataMessage("No data to display");
            int r = generator.nextInt();
            File projectchart = new File("../webapps/ROOT/styles/images/projectschart" + r + ".png");
            try {
                ChartUtilities.saveChartAsPNG(projectchart, chart, 500, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (chartbool) {
                sb.append("<br/><img src='/styles/images/projectschart" + r + ".png'/>");
            }
        } else {
            sb.append("<h1>Project Information</h1><br/><div class='report'>Nothing to Report.");
        }

    } else if (type.equals("Sample")) {
        Boolean incQC = false;
        if (options.contains("QC")) {
            incQC = true;
        }

        if (reportables.size() == 1) {
            //Single Sample report
            List reportableslist = new ArrayList<Reportable>(reportables);
            Reportable reportable = (Reportable) reportableslist.get(0);
            Sample sample = (Sample) reportable;
            sb.append("<h1>Sample Information</h1><br/><div class='report'>");
            sb.append("<b>Sample Name: </b> " + sample.getName());
            sb.append("<br/><br/>");
            sb.append("<b>Project Alias: </b> " + sample.getProject().getAlias());
            sb.append("<br/><br/>");
            sb.append("<b>Sample Alias: </b> " + sample.getAlias());
            sb.append("<br/><br/>");
            sb.append("<b>Sample Description: </b> " + sample.getDescription());
            sb.append("<br/><br/>");
            sb.append("<b>Scientific Name: </b> " + sample.getScientificName());
            sb.append("<br/><br/>");
            sb.append("<b>Sample Type: </b> " + sample.getSampleType());
            sb.append("<br/><br/>");
            sb.append("<b>QC Passed: </b> " + sample.getQcPassed().toString());
            sb.append("<br/><br/>");

            if (sample.getSampleQCs().size() > 0 && incQC) {
                sb.append("<table class=\"list\">\n" + "            <thead>\n" + "            <tr>\n"
                        + "                <th>QCed By</th>\n" + "                <th>QC Date</th>\n"
                        + "                <th>Method</th>\n" + "                <th>Results</th>\n"
                        + "            </tr>\n" + "            </thead>\n" + "            <tbody>");
                for (SampleQC sampleQC : sample.getSampleQCs()) {
                    sb.append("<tr>\n" + "                    <td>" + sampleQC.getQcCreator() + "</td>\n"
                            + "                    <td>" + sampleQC.getQcDate().toString() + "</td>\n"
                            + "                    <td>" + sampleQC.getQcType().getName() + "</td>\n"
                            + "                    <td>" + sampleQC.getResults().toString()
                            + "ng/&#181;l</td>\n" + "                </tr>");
                }
                sb.append("</tbody>\n" + "        </table>");
            } else {
                if (incQC) {
                    sb.append("<b>QC:</b> None.");
                }
            }

        }
        // Lists of Samples report
        else if (reportables.size() > 1) {
            sb.append("<h1>Samples Information</h1><br/><div class='report'>");
            Map<String, Integer> typeMap = new HashMap<String, Integer>();
            Map<String, Integer> qcMap = new HashMap<String, Integer>();
            sb.append("<table class=\"list\">\n" + "    <thead>\n" + "    <tr>\n"
                    + "        <th>Sample Name</th>\n" + "        <th>Project Alias</th>\n"
                    + "        <th>Sample Alias</th>\n" + "        <th>Sample Description</th>\n"
                    + "        <th>Scientific Name</th>\n" + "        <th>Sample Type</th>\n"
                    + "        <th>QC Passed</th>\n");
            if (incQC) {
                sb.append("        <th>QC</th>\n");
            }
            sb.append("    </tr>\n" + "    </thead>\n" + "    <tbody>");
            for (Reportable reportable : reportables) {
                Sample sample = (Sample) reportable;
                sb.append("<tr><td>" + sample.getName());
                sb.append("</td>");
                sb.append("<td>" + sample.getProject().getAlias());
                sb.append("</td>");
                sb.append("<td> " + sample.getAlias());
                sb.append("</td>");
                sb.append("<td> " + sample.getDescription());
                sb.append("</td>");
                sb.append("<td> " + sample.getScientificName());
                sb.append("</td>");
                sb.append("<td> " + sample.getSampleType());
                sb.append("</td>");
                sb.append("<td> " + sample.getQcPassed().toString());
                sb.append("</td>");
                if (incQC) {
                    sb.append("<td>");
                    if (sample.getSampleQCs().size() > 0) {
                        sb.append("<ul class='bullets'>");
                        for (SampleQC sampleQC : sample.getSampleQCs()) {
                            sb.append("<li>\n" + "                    QCed By: " + sampleQC.getQcCreator()
                                    + "<br/>\n" + "                    QC Date: "
                                    + sampleQC.getQcDate().toString() + "<br/>\n"
                                    + "                    Method: " + sampleQC.getQcType().getName()
                                    + "<br/>\n" + "                    Results: "
                                    + sampleQC.getResults().toString() + "ng/&#181;l</li>");
                        }
                        sb.append("</ul>");
                    } else {
                        sb.append("None");
                    }
                    sb.append("</td>");
                }
                sb.append("</tr>");

                int typecount = typeMap.containsKey(sample.getSampleType())
                        ? typeMap.get(sample.getSampleType())
                        : 0;
                typecount++;
                typeMap.put(sample.getSampleType(), typecount);

                int qccount = qcMap.containsKey(sample.getQcPassed().toString())
                        ? qcMap.get(sample.getQcPassed().toString())
                        : 0;
                qccount++;
                qcMap.put(sample.getQcPassed().toString(), qccount);
            }
            sb.append("    </tbody>\n" + "</table>");
            Integer nonGENOMIC = typeMap.containsKey("NON GENOMIC") ? typeMap.get("NON GENOMIC") : 0;
            Integer genomic = typeMap.containsKey("GENOMIC") ? typeMap.get("GENOMIC") : 0;
            Integer other = typeMap.containsKey("OTHER") ? typeMap.get("OTHER") : 0;
            Integer viralRNA = typeMap.containsKey("VIRAL RNA") ? typeMap.get("VIRAL RNA") : 0;
            Integer synthetic = typeMap.containsKey("SYNTHETIC") ? typeMap.get("SYNTHETIC") : 0;

            //jfreechart for type
            final DefaultPieDataset data = new DefaultPieDataset();
            data.setValue("NON GENOMIC " + nonGENOMIC, nonGENOMIC);
            data.setValue("GENOMIC " + genomic, genomic);
            data.setValue("OTHER " + other, other);
            data.setValue("VIRAL RNA " + viralRNA, viralRNA);
            data.setValue("SYNTHETIC " + synthetic, synthetic);

            final JFreeChart chart = ChartFactory.createPieChart("Samples Type Information", // chart title
                    data, // data
                    false, // include legend
                    true, false);

            final PiePlot plot = (PiePlot) chart.getPlot();
            plot.setStartAngle(290);
            plot.setDirection(Rotation.CLOCKWISE);
            plot.setForegroundAlpha(0.5f);
            plot.setBackgroundPaint(Color.white);
            plot.setNoDataMessage("No data to display");
            int r = generator.nextInt();
            File samplechart = new File("../webapps/ROOT/styles/images/samplestypechart" + r + ".png");
            try {
                ChartUtilities.saveChartAsPNG(samplechart, chart, 500, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (chartbool) {
                sb.append("<br/><img src='/styles/images/samplestypechart" + r + ".png'/>");
            }
            Integer qcpassed = qcMap.containsKey("true") ? qcMap.get("true") : 0;
            Integer qcnotpassed = qcMap.containsKey("false") ? qcMap.get("false") : 0;

            //jfreechart for qc
            final DefaultPieDataset qcdata = new DefaultPieDataset();
            qcdata.setValue("QC Passed " + qcpassed, qcpassed);
            qcdata.setValue("QC Not Passed " + qcnotpassed, qcnotpassed);

            final JFreeChart qcchart = ChartFactory.createPieChart("Samples QC Information", // chart title
                    qcdata, // data
                    false, // include legend
                    true, false);

            final PiePlot qcplot = (PiePlot) qcchart.getPlot();
            qcplot.setStartAngle(290);
            qcplot.setDirection(Rotation.CLOCKWISE);
            qcplot.setForegroundAlpha(0.5f);
            qcplot.setBackgroundPaint(Color.white);
            qcplot.setNoDataMessage("No data to display");
            File sampleqcchart = new File("../webapps/ROOT/styles/images/samplesqcchart" + r + ".png");
            try {
                ChartUtilities.saveChartAsPNG(sampleqcchart, qcchart, 500, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (chartbool) {
                sb.append(" <img src='/styles/images/samplesqcchart" + r + ".png'/>");
            }
        } else {
            sb.append("<h1>Sample Information</h1><br/><div class='report'>Nothing to Report.");
        }

    } else if (type.equals("Run")) {
        Boolean incAlias = false;
        Boolean incDescription = false;
        if (options.contains("Alias")) {
            incAlias = true;
        }
        if (options.contains("Description")) {
            incDescription = true;
        }

        if (reportables.size() == 1) {
            //Single Run report
            List reportableslist = new ArrayList<Reportable>(reportables);
            Reportable reportable = (Reportable) reportableslist.get(0);
            Run run = (Run) reportable;
            sb.append("<h1>Run Information</h1><br/><div class='report'>");
            sb.append("<b>Run Name: </b> " + run.getName());
            sb.append("<br/><br/>");
            sb.append("<b>Platform: </b> " + run.getPlatformType().getKey());
            sb.append("<br/><br/>");
            sb.append("<b>Sequencer: </b> " + run.getSequencerReference().getName());
            sb.append("<br/><br/>");
            if (incAlias) {
                sb.append("<b>Run Alias: </b> " + run.getAlias());
                sb.append("<br/><br/>");
            }
            if (incDescription) {
                sb.append("<b>Run Description: </b> " + run.getDescription());
                sb.append("<br/><br/>");
            }
            sb.append("<b>Pair End: </b> " + run.getPairedEnd().toString());
            sb.append("<br/><br/>");
            sb.append("<b>Status: </b> " + run.getStatus().getHealth().getKey());
            sb.append("<br/><br/>");

        }
        // Lists of Runs report
        else if (reportables.size() > 1) {
            sb.append("<h1>Runs Information</h1><br/><div class='report'>");
            Map<String, Integer> statusMap = new HashMap<String, Integer>();
            Map<String, Integer> platformMap = new HashMap<String, Integer>();
            sb.append(
                    "<table class=\"list\">\n" + "    <thead>\n" + "    <tr>\n" + "        <th>Run Name</th>\n"
                            + "        <th>Platform</th>\n" + "        <th>Sequencer</th>\n");
            if (incAlias) {
                sb.append("        <th>Run Alias</th>\n");
            }
            if (incDescription) {
                sb.append("        <th>Run Description</th>\n");
            }
            sb.append("        <th>Pair End</th>\n" + "        <th>Status</th>\n" + "    </tr>\n"
                    + "    </thead>\n" + "    <tbody>");
            for (Reportable reportable : reportables) {
                Run run = (Run) reportable;
                sb.append("<tr><td>" + run.getName());
                sb.append("</td>");
                sb.append("<td> " + run.getPlatformType().getKey());
                sb.append("</td>");
                sb.append("<td> " + run.getSequencerReference().getName());
                sb.append("</td>");
                if (incAlias) {
                    sb.append("<td> " + run.getAlias());
                    sb.append("</td>");
                }
                if (incDescription) {
                    sb.append("<td> " + run.getDescription());
                    sb.append("</td>");
                }
                sb.append("<td> " + run.getPairedEnd().toString());
                sb.append("</td>");
                sb.append("<td> " + run.getStatus().getHealth().getKey());
                sb.append("</td></tr>");

                int statuscount = statusMap.containsKey(run.getStatus().getHealth().getKey())
                        ? statusMap.get(run.getStatus().getHealth().getKey())
                        : 0;
                statuscount++;
                statusMap.put(run.getStatus().getHealth().getKey(), statuscount);

                int platformcount = platformMap.containsKey(run.getPlatformType().getKey())
                        ? platformMap.get(run.getPlatformType().getKey())
                        : 0;
                platformcount++;
                platformMap.put(run.getPlatformType().getKey(), platformcount);
            }
            sb.append("    </tbody>\n" + "</table>");
            Integer unknown = statusMap.containsKey("Unknown") ? statusMap.get("Unknown") : 0;
            Integer completed = statusMap.containsKey("Completed") ? statusMap.get("Completed") : 0;
            Integer failed = statusMap.containsKey("Failed") ? statusMap.get("Failed") : 0;
            Integer started = statusMap.containsKey("Started") ? statusMap.get("Started") : 0;
            Integer stopped = statusMap.containsKey("Stopped") ? statusMap.get("Stopped") : 0;
            Integer running = statusMap.containsKey("Running") ? statusMap.get("Running") : 0;

            //jfreechart for status
            final DefaultPieDataset data = new DefaultPieDataset();
            data.setValue("Unknown " + unknown, unknown);
            data.setValue("Completed " + completed, completed);
            data.setValue("Failed " + failed, failed);
            data.setValue("Started " + started, started);
            data.setValue("Stopped " + stopped, stopped);
            data.setValue("Running " + running, running);

            final JFreeChart chart = ChartFactory.createPieChart("Run Status Information", // chart title
                    data, // data
                    false, // include legend
                    true, false);

            final PiePlot plot = (PiePlot) chart.getPlot();
            plot.setStartAngle(290);
            plot.setDirection(Rotation.CLOCKWISE);
            plot.setBackgroundPaint(Color.white);
            plot.setForegroundAlpha(0.5f);
            plot.setNoDataMessage("No data to display");
            int r = generator.nextInt();
            File runchart = new File("../webapps/ROOT/styles/images/runsstatuschart" + r + ".png");
            try {
                ChartUtilities.saveChartAsPNG(runchart, chart, 500, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (chartbool) {
                sb.append("<br/><img src='/styles/images/runsstatuschart" + r + ".png'/>");
            }

            //        Integer illumina = platformMap.containsKey("Illumina") ? platformMap.get("Illumina") : 0;
            //        Integer ls454 = platformMap.containsKey("LS454") ? platformMap.get("LS454") : 0;
            //        Integer solid = platformMap.containsKey("Solid") ? platformMap.get("Solid") : 0;

            //jfreechart for platform
            //        final DefaultPieDataset platformdata = new DefaultPieDataset();
            //        platformdata.setValue("Illumina "+illumina, illumina);
            //        platformdata.setValue("LS454 "+ls454, ls454);
            //        platformdata.setValue("Solid "+solid, solid);
            //
            //        final JFreeChart platformchart = ChartFactory.createPieChart(
            //          "Run Platform Information",  // chart title
            //          platformdata,                   // data
            //          false,                   // include legend
            //          true,
            //          false
            //        );
            //
            //        final PiePlot platformplot = (PiePlot) platformchart.getPlot();
            //        platformplot.setStartAngle(290);
            //        platformplot.setDirection(Rotation.CLOCKWISE);
            //        platformplot.setBackgroundPaint(Color.white);
            //        platformplot.setForegroundAlpha(0.5f);
            //        platformplot.setNoDataMessage("No data to display");
            //        File runplatformchart = new File("../webapps/ROOT/styles/images/runsplatformchart" + r + ".png");
            //        try {
            //          ChartUtilities.saveChartAsPNG(runplatformchart, platformchart, 500, 300);
            //        }
            //        catch (IOException e) {
            //          e.printStackTrace();
            //        }
            //        if (chartbool) {
            //          sb.append(" <img src='/styles/images/runsplatformchart" + r + ".png'/>");
            //        }
        } else {
            sb.append("<h1>Run Information</h1><br/><div class='report'>Nothing to Report.");
        }

    }

    // footer
    sb.append("</div>\n" + "<div id=\"footer\">\n" + "    <br/>\n" + "\n"
            + "    <p>&copy; 2010 -2011 <a href=\"http://www.tgac.bbsrc.ac.uk/\" target=\"_blank\">The Genome Analysis Centre</a></p>\n"
            + "</div>\n" + "</body></html>");
    // end of footer
    return sb.toString();

}