/* Copyright (c) 2007, http://www.codeviation.org project
* This program is made available under the terms of the MIT License.
*/
package hudson.plugins.codeviation;
import hudson.model.ModelObject;
import hudson.util.ChartUtil;
import java.awt.BasicStroke;
import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.logging.Logger;
import javax.servlet.http.Cookie;
import org.codeviation.model.JavaFile;
import org.codeviation.statistics.ChartConf;
import org.codeviation.statistics.ChartConfProvider;
import org.codeviation.statistics.CountsStatHandler;
import org.codeviation.statistics.Graph;
import org.codeviation.statistics.JavaFileHandler;
import org.codeviation.statistics.Statistics;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.openide.util.Lookup;
/**
*
* @author pzajac
*/
public abstract class JavaFileIterableView implements ModelObject {
static String chartType;
static final String CHART_TYPE_PARAM = "ChartType";
public JavaFileIterableView() {
}
private ChartConf selectedChartConf ;
protected abstract Date getMinDate();
protected abstract Date getMaxDate();
protected abstract Iterable<JavaFile> getJavaFiles();
public static List<ChartConf> getChartConfs() {
Lookup lookup = Lookup.getDefault();
List<ChartConf> confs = new ArrayList<ChartConf>();
for (ChartConfProvider prov : lookup.lookupAll(ChartConfProvider.class)) {
for (ChartConf c : prov.getChartConfs()) {
confs.add(c);
}
}
if (confs.size() == 0) {
ChartConfProvider provider = new CountsStatHandler();
for (ChartConf conf :provider.getChartConfs()) {
confs.add(conf);
}
}
return confs;
}
public List<String> getChartConfOptions() {
List<String> values = new ArrayList<String>();
for (ChartConf conf : getChartConfs()) {
values.add("<option VALUE=\""+ conf.getName() + getSelectedOption(conf) + "\">" + conf.getTitle() + "</option>");
}
System.out.println("values:" + values);
return values;
}
private String getSelectedOption(ChartConf conf) {
return (conf.equals(selectedChartConf)) ?
" selected = \"true\" " : "";
}
public static void updateGraphType(StaplerRequest req,StaplerResponse rsp) {
chartType = req.getParameter(CHART_TYPE_PARAM);
Enumeration en = req.getParameterNames();
while(en.hasMoreElements()) {
System.out.println(en.nextElement());
}
if (chartType != null) {
rsp.addCookie(new Cookie(CHART_TYPE_PARAM,chartType));
}
}
public ChartConf getChartConf(StaplerRequest req) {
String chartTypePar = req.getParameter(CHART_TYPE_PARAM);
if (chartTypePar == null) {
Cookie cookies[] = req.getCookies() ;
// cookies are null
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(CHART_TYPE_PARAM)) {
chartTypePar = cookie.getValue();
break;
}
}
}
}
for (ChartConf conf : getChartConfs()) {
if (conf.getName().equals(chartTypePar)) {
selectedChartConf = conf;
return conf;
}
}
selectedChartConf = null;
return null;
}
public void doGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
Lookup lookup = Lookup.getDefault();
ChartConfProvider provider = null;
ChartConf conf = getChartConf(req);
if (lookup != null) {
for (ChartConfProvider prov : lookup.lookupAll(ChartConfProvider.class)) {
for (ChartConf c : prov.getChartConfs()) {
if (c.equals(conf)) {
provider = prov;
}
}
}
}
if (provider == null) {
provider = new CountsStatHandler();
conf = provider.getChartConfs()[0];
}
Graph graph = conf.createGraph();
if (graph == null) {
getLogger().info("Date:" + getMinDate() + "," + getMaxDate());
graph = new Statistics(getMinDate(),getMaxDate());
}
JavaFileHandler handler = conf.getStatHandler();
graph.setJavaFileHandler(handler);
graph.setItemsCount(100);
handler.init(graph);
graph.addJavaFiles(getJavaFiles());
handler.initGraphPaint(conf);
JFreeChart chart = graph.getChart(conf, true);
chart.setBackgroundPaint(Color.WHITE);
chart.setTitle((String)null);
XYPlot plot = (XYPlot) chart.getPlot();
// plot.setDomainGridlinePaint(Color.BLACK);
// plot.setRangeGridlinePaint(Color.BLACK);
//
// plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
//
// plot.setDomainCrosshairVisible(true);
// plot.setRangeCrosshairVisible(true);
//
XYItemRenderer r = plot.getRenderer();
if (r instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
// renderer.setBaseShapesVisible(true);
//// renderer.setBaseShapesFilled(true);
// renderer.setUseFillPaint(true);
//
// // renderer.setSeriesItemLabelsVisible(1, true);
// renderer.setUseOutlinePaint(true);
renderer.setStroke(new BasicStroke(2.0f));
//// renderer.getPlot().setRenderer(1, r)getRenderer(1).setStroke();
//// renderer.setStroke();
//
// // renderer.setS
}
//
ChartUtil.generateGraph(req,rsp,chart,400,400);
}
static Logger getLogger() {
return Logger.getLogger(SourceRootView.class.getName());
}
}