Java tutorial
/* * Copyright (c) 2007 Yahoo! Inc. All rights reserved. * Copyrights licensed under the MIT License. */ package hudson.plugins.plot; import hudson.model.AbstractProject; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import au.com.bytecode.opencsv.CSVReader; /** * Represents a plot report for a single group of plots. * * @author Nigel Daley */ public class PlotReport { private static final Logger LOGGER = Logger.getLogger(PlotReport.class.getName()); private final AbstractProject<?, ?> project; /** * The sorted list of plots that belong to the same group. */ private List<Plot> plots; /** * The group these plots belong to. */ private String group; public PlotReport(AbstractProject<?, ?> project, String group, List<Plot> plots) { Collections.sort(plots); this.plots = plots; this.group = group; this.project = project; } // called from PlotReport/index.jelly public AbstractProject<?, ?> getProject() { return project; } // called from PlotReport/index.jelly public String getGroup() { return group; } // called from PlotReport/index.jelly public List<Plot> getPlots() { return plots; } // called from PlotReport/index.jelly public void doGetPlot(StaplerRequest req, StaplerResponse rsp) { String i = req.getParameter("index"); Plot plot = getPlot(i); try { plot.plotGraph(req, rsp); } catch (IOException ioe) { LOGGER.log(Level.SEVERE, "Exception plotting graph", ioe); } } // called from PlotReport/index.jelly public void doGetPlotMap(StaplerRequest req, StaplerResponse rsp) { String i = req.getParameter("index"); Plot plot = getPlot(i); try { plot.plotGraphMap(req, rsp); } catch (IOException ioe) { LOGGER.log(Level.SEVERE, "Exception plotting graph", ioe); } } // called from PlotReport/index.jelly public boolean getDisplayTableFlag(int i) { Plot plot = getPlot(i); if (CollectionUtils.isNotEmpty(plot.getSeries())) { Series series = plot.getSeries().get(0); return (series instanceof CSVSeries) && ((CSVSeries) series).getDisplayTableFlag(); } return false; } // called from PlotReport/index.jelly public List<List<String>> getTable(int i) { List<List<String>> tableData = new ArrayList<List<String>>(); Plot plot = getPlot(i); // load existing csv file File plotFile = new File(project.getRootDir(), plot.getCsvFileName()); if (!plotFile.exists()) { return tableData; } CSVReader reader = null; try { reader = new CSVReader(new FileReader(plotFile)); // throw away 2 header lines reader.readNext(); reader.readNext(); // array containing header titles List<String> header = new ArrayList<String>(); header.add(Messages.Plot_Build() + " #"); tableData.add(header); String[] nextLine; while ((nextLine = reader.readNext()) != null) { String buildNumber = nextLine[2]; if (!plot.reportBuild(Integer.parseInt(buildNumber))) { continue; } String seriesLabel = nextLine[1]; // index of the column where the value should be located int index = header.lastIndexOf(seriesLabel); if (index <= 0) { // add header label index = header.size(); header.add(seriesLabel); } List<String> tableRow = null; for (int j = 1; j < tableData.size(); j++) { List<String> r = tableData.get(j); if (StringUtils.equals(r.get(0), buildNumber)) { // found table row corresponding to the build number tableRow = r; break; } } // table row corresponding to the build number not found if (tableRow == null) { // create table row with build number at first column tableRow = new ArrayList<String>(); tableRow.add(buildNumber); tableData.add(tableRow); } // set value at index column String value = nextLine[0]; if (index < tableRow.size()) { tableRow.set(index, value); } else { for (int j = tableRow.size(); j < index; j++) { tableRow.add(StringUtils.EMPTY); } tableRow.add(value); } } int lastColumn = tableData.get(0).size(); for (List<String> tableRow : tableData) { for (int j = tableRow.size(); j < lastColumn; j++) { tableRow.add(StringUtils.EMPTY); } } } catch (IOException ioe) { LOGGER.log(Level.SEVERE, "Exception reading csv file", ioe); // ignore } finally { if (reader != null) { try { reader.close(); } catch (IOException ignore) { // ignore } } } return tableData; } private Plot getPlot(int i) { Plot p = plots.get(i); p.setProject(project); return p; } private Plot getPlot(String i) { try { return getPlot(Integer.valueOf(i)); } catch (NumberFormatException ignore) { LOGGER.log(Level.SEVERE, "Exception converting to integer", ignore); return null; } } }