package com.primesuccess.portal.chart;
import com.primesuccess.portal.chartAttTemplate.LineAttTemplate;
import com.primesuccess.portal.util.JSFUtils;
import java.awt.Color;
import java.awt.Font;
import java.awt.RenderingHints;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.NumberFormat;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseStream;
import java.io.OutputStream;
import java.util.Hashtable;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.imagemap.ImageMapUtilities;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
public class LineBean {
??? CategoryDataset data;
??? LineAttTemplate att;
??? public LineBean(CategoryDataset data, LineAttTemplate att) {
??????? this.data = data;
??????? this.att = att;
??? }
??? static class LabelGenerator extends StandardCategoryItemLabelGenerator {
??????? public String generateItemLabel(CategoryDataset categorydataset, int i,
??????????????????????????????????????? int j) {
??????????? return categorydataset.getRowKey(i).toString();
??????? }
??????? LabelGenerator() {
??????????? super();
??????? }
??? }
???
??? static class StandardCategoryURLGeneratorEx extends StandardCategoryURLGenerator {
??? String prefix="aa.jspx";
??????? public String generateURL(CategoryDataset dataset, int series,
????????????????????????????? int category) {
??????????????????
??????????????????????????? return "#\""+" onclick=\"javascript:window.open('"+ super.generateURL(dataset,series,category)+"','newwindow','height=100,width=400')";
???????
??????? }
//??????? public String getTargeURL(){
//??????????? return
//??????? }
??????? StandardCategoryURLGeneratorEx(String targeturl) {
??????????? super(targeturl);
??????? }
??? }
??? private JFreeChart createChart(String targetUrl) {
??????? JFreeChart jfreechart =
??????????? ChartFactory.createLineChart("", att.getDomaindesc(),
???????????????????????????????????????? att.getRangedesc(), data,
???????????????????????????????????????? PlotOrientation.VERTICAL, true, true,
???????????????????????????????????????? false);
??????? jfreechart.setBackgroundPaint(Color.white);
??????? CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
??????? categoryplot.setBackgroundPaint(att.getBackgroudpaint());
??????? categoryplot.setDomainAxisLocation(att.getDomainaxisloc());
??????? categoryplot.getDomainAxis().setTickLabelFont( new Font("Arial", Font.PLAIN, 8) );
??????? categoryplot.mapDatasetToRangeAxis(1, 1);
???????
??????? LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
??????? if (targetUrl != null && !targetUrl.trim().equals("")) {
???????????
??????????? lineandshaperenderer.setItemURLGenerator(new StandardCategoryURLGeneratorEx(targetUrl));
?????????
??????? }
??????? Hashtable hash=att.getSeriesitemlabelfont();
??????? for(int i=0;i<att.getSeries_count();i++){
??????????? lineandshaperenderer.setSeriesItemLabelFont(i,(Font)hash.get(i),true);
??????? }
??????? lineandshaperenderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
??????? lineandshaperenderer.setItemLabelGenerator(new LabelGenerator());
??????? lineandshaperenderer.setShapesFilled(att.isShapesfilled());
??????? lineandshaperenderer.setShapesVisible(att.isShapesvisible());
??????? categoryplot.setRenderer(lineandshaperenderer);
??????? categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
??????? jfreechart.setTitle(new TextTitle(att.getTitle(),
????????????????????????????????????????? new Font("Arial", Font.BOLD, 15)));
??????? jfreechart.setAntiAlias(false);
??????? jfreechart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
?????????????????????????????????????????? RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
??????? return jfreechart;
??? }
??? public String generateChart(String targetURL, PrintWriter pw, int w,
??????????????????????????????? int h) {
??????? JFreeChart chart = createChart(targetURL);
??????? ChartRenderingInfo info =
??????????? new ChartRenderingInfo(new StandardEntityCollection());
??????? String filename = new String();
??????? try {
??????????? filename =
??????????????????? ServletUtilities.saveChartAsPNG(chart, w, h, info, JSFUtils.getSession());
??????????? ImageMapUtilities.writeImageMap(pw, filename, info);
??????????? pw.flush();
??????? } catch (Exception e) {
??????????? e.printStackTrace();
??????????? filename = "public_error_500x300.png";
??????? }
??????? return filename;
??? }
??? public String[] getLastURLandFilename() throws IOException {
??????? HttpServletResponse resp =
??????????? (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
??????
??????? String filenames =
??????????? generateChart(att.getItemurl(), new PrintWriter((OutputStream)resp.getOutputStream()),
????????????????????????? att.getWidth(), att.getHeight());
??????? return new String[] { "/servlet/DisplayChart?filename=" + filenames,
????????????????????????????? filenames };
??? }
}
?