Sunday, November 28, 2010

Create and display dynamic Chart in JSP using Database inputs(jFreeChart Library)

<% // JSP code that generates chart of database(Time-Speed  which was my application requirement) and //returns chart image whenever called  %>

<%// required packages  %>
<%@ page import="java.awt.Image" %>
<%@ page import="java.awt.*"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="java.awt.BasicStroke"%>
<%@ page import ="org.jfree.ui.ApplicationFrame"%>
<%@ page import="java.io.*" %>
<%@ page import="java.io.File"%>
<%@ page import="org.jfree.chart.*" %>
<%@ page import="org.jfree.chart.axis.*" %>
<%@ page import="org.jfree.chart.entity.*" %>
<%@ page import="org.jfree.chart.labels.*" %>
<%@ page import="org.jfree.chart.plot.*" %>
<%@ page import="org.jfree.chart.renderer.category.*" %>
<%@ page import="org.jfree.chart.urls.*" %>
<%@ page import="org.jfree.data.category.*" %>
<%@ page import="org.jfree.data.general.*" %>
<%@ page import="org.jfree.data.time.Minute"%>
<%@ page import="org.jfree.data.time.Hour"%>
<%@ page import="org.jfree.data.time.TimeSeries"%>
<%@ page import="org.jfree.data.time.TimeSeriesCollection"%>
<%@ page import="org.jfree.data.xy.XYDataset"%>
<%@ page import="org.jfree.chart.plot.XYPlot"%>
<%@ page import="org.jfree.chart.renderer.xy.StandardXYItemRenderer"%>
<%@ page import="org.jfree.chart.renderer.xy.XYItemRenderer"%>
 <%@ page import=  "java.sql.Connection" %>
<%@ page import  ="java.sql.DriverManager" %>
<%@ page import = "java.sql.SQLException" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.Statement" %>
 <%@ page import=  "javax.servlet.*" %>
<%@ page import  ="javax.servlet.http.*" %>

<%@ page import="java.awt.image.BufferedImage"%>
<%
 try
 {
 File image = File.createTempFile("image", "tmp");

 //chart class instance
Fms fm = new Fms("Graph");

JFreeChart chart = fm.createChart(fm.dataset);
 ChartUtilities.saveChartAsPNG(image, chart, 500, 400);
//get input stream
 FileInputStream fileInStream = new FileInputStream(image);
//output stream foe returning chart as image
 OutputStream outStream = response.getOutputStream();
 long fileLength;
 byte[] byteStream;
 fileLength = image.length();
 byteStream = new byte[(int)fileLength];
//read chart image
 fileInStream.read(byteStream, 0, (int)fileLength);
//returns chart image whenever called
 response.setContentType("image/png");
 response.setContentLength((int)fileLength);
 response.setHeader("Cache-Control","no-store,no-cache, must-revalidate, post-check=0, pre-check=0");
 response.setHeader("Pragma", "no-cache");
 fileInStream.close();
 outStream.write(byteStream);
 outStream.flush();
 outStream.close();
 }
 catch (IOException e)
 {
 System.err.println("Problem occurred creating chart.");
 }
%>
<%! public class Fms extends ApplicationFrame {  
//Main class
   XYDataset dataset= null;
   public Fms(final String title) {
        super(title);
      dataset= createDataset();
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(700, 570));
        chartPanel.setMouseZoomable(true, false);
        setContentPane(chartPanel);
    }
//chart creation method
   JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart chart = ChartFactory.createTimeSeriesChart(
            "Speed Chart",
            "Time",
            "Speed",
            dataset,
            true,
            true,
            false
        );
        chart.setBackgroundPaint(Color.white);
       final XYPlot plot = chart.getXYPlot();
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        plot.setDomainCrosshairVisible(true);
        plot.setRangeCrosshairVisible(false);
        final XYItemRenderer renderer = plot.getRenderer();
        if (renderer instanceof StandardXYItemRenderer) {
            final StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
            rr.setShapesFilled(true);
            renderer.setSeriesStroke(0, new BasicStroke(1.0f));
            renderer.setSeriesStroke(1, new BasicStroke(1.0f));
           }      
        final DateAxis axis = (DateAxis) plot.getDomainAxis();
        axis.setDateFormatOverride(new SimpleDateFormat("dd:MM"));
        try{
        final ChartRenderingInfo info = new ChartRenderingInfo
(new StandardEntityCollection());
final File file1 = new File("c:/Documents and Settings/accounts/WebApplication2/web/barchart.png");
ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info);
        }catch(Exception e){}
        return chart;
    }  
//data set generation method
    private XYDataset createDataset() {
        final TimeSeriesCollection dataset = new TimeSeriesCollection();
        dataset.setDomainIsPointsInTime(true);      
        final TimeSeries s1 = new TimeSeries("Series 1", Minute.class);
         int str = 0;
         int i =0,j= 0 ;
         String str1 = null;
        try{            
      Class.forName("sun.jdbc.odbc.JdbcOdbc");
      Connection con=DriverManager.getConnection("jdbc:odbc:FMSDB",null,null);
      PreparedStatement st;  
      Statement stmt = con.createStatement();
      String query = "Select * from Job_Status";
      stmt.executeQuery(query);
       ResultSet rs = stmt.executeQuery(query);      
           while( rs.next() )
        {                
         str1= rs.getString("Time");
         String sa = str1.substring(11,13);
         String ha = str1.substring(14,16);
        str= rs.getInt("Speed");
        j=Integer.parseInt(sa);
        i=Integer.parseInt(ha);
        String date = rs.getString("Date");
        String y = date.substring(0,4);
         String m = date.substring(5,7);
          String d = date.substring(8,10);
         s1.add(new Minute(i, j, Integer.parseInt(d), Integer.parseInt(m), Integer.parseInt(y)), str);
          }
          }
          catch(Exception e)
          {            
          }
         System.out.println(str1.substring(11,13));
          System.out.println(str1.substring(14,16)+"\t"+str1);                
        dataset.addSeries(s1);  
        return dataset;
    }
    }
%>



HTML Code for calling this JSP file
exp.jsp is the name of above jsp code file in my application
<html>
<body>
<img src="exp.jsp" alt="Progress chart" />
</body>
</html>

Note: To implement this code you will need jFreeChart Library from jFree Org.



Tuesday, November 16, 2010

Uploading Image in jsp, java, Netbeans

i had spent a lot of time for uploading an image in jsp page.so to help you guys i am writing this blog.
the way to upload the desired image is as below(neteans project)

1. Put the image file in web folder(where all the web pages are placed.)
2. Wright the code

<%String s=request.getContextPath() + "/abc.JPG";%>
<img src="<%=s%>" width = "500" hight = "600" aligh = "center" />

3. Mention the extensions of image carefully i.e(.jpeg, jpg are not treated as same)

for any other query keep posting.
Good Luck!!!

Earn upto Rs. 9,000 pm checking Emails. Join now!