Tuesday, 29 July 2014

Hibernate Named Query with Aggregate function

Code for executing Native SQL Query.

Session session = sessionFactory.getCurrentSession();
 
Query query = session.createSQLQuery(
"SELECT sum(hsd_plt_veh) as hsd_plt_veh,sum(randmCost) as randmCost"+
 "from expenses_profit where monthk=:mon and yeark=:yr");
 .setParameter("mon", 1) 
.setParameter("yr", 2014);
 
Object obj=return query.uniqueResult(); 

When we use Native SQL it returns an object.

************************************************************************************************

If we need column names along with the Object use below code.

Session session = sessionFactory.getCurrentSession();
 
Query query = session.createSQLQuery(
"SELECT sum(hsd_plt_veh) as hsd_plt_veh,sum(randmCost) as randmCost"+
 "from expenses_profit where monthk=:mon and yeark=:yr");
.setParameter("mon", 1) 
.setParameter("yr", 2014); 
Map<String, String> expensesProfits =(Map<String, String>) query.uniqueResult();
query.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
 
//contains column names and values
List<Map<String,Object>> aliasToValueMapList=query.list(); 
********************************************************************************** 
If we use 
 .addEntity(Cost.class) ;
All checks for all columns in the table in query.
Suppose id is 1st column if we dont mention in query 
It gives following error.
 
ERROR org.hibernate.util.JDBCExceptionReporter - Column 'id' not found. 


 
 
 

Sunday, 27 July 2014

Best open sources java web graph library for drawing graphs on jsp webpage

I have found different API's for graphs in which amCharts uses JavaScript/HTML5 have LIVEEDITOR which supports all browsers so powerfull and have motion-charts which change data at run time by default can export charts as images or PDF files.

JSCharts:

JS Charts is a JavaScript based chart generator that requires little or no coding. With JS Charts drawing charts is a simple and easy task, since you only have to use client-side scripting (i.e. performed by your web browser). No additional plugins or server modules are required. Just include our scripts, prepare your chart data in XML, JSON or JavaScript Array and your chart is ready!



http://www.jscharts.com/free-download

JQPlot :

JqPlot is a plotting and charting plugin for the jQuery Javascript framework. jqPlot produces beautiful line, bar and pie charts with many features:
  • Numerous chart style options.
  • Date axes with customizable formatting.
  • Up to 9 Y axes.
  • Rotated axis text.
  • Automatic trend line computation.
  • Tooltips and data point highlighting.
  • Sensible defaults for ease of use.

   http://www.jqplot.com/

amCharts:

We offer JavaScript/HTML5 charts for most of your needs. The set includes serial (column, bar, line, area, step line, step without risers, smoothed line, candlestick and ohlc graphs), pie/donut, radar/polar, y/scatter/bubble, Funnel/Pyramid charts and Angular Gauges. Our charts offer unmatched functionality and performance in a modern, standards compliant package. Our JS charting library is responsive and supported by touch/mobile devices.


http://www.amcharts.com/javascript-charts/.


Tuesday, 15 July 2014

Silent print of PDF using JAVA.

I have used javax.print API to perform printing of PDF without user interaction.
It is running only in MAC still search is going on for Windows.

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;


public class Abc {
  /**
  * @param args
  */
  public static void main(String[] args) {

    new Abc().print();
  }
  public void print() {
  /*
    The format of Page will be PDF.
    We have different types based on what we pass to printer.
  */
    DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

   // Number of printers in network will be recognized.

    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
    FileInputStream psStream = null;  
    try {  
        psStream = new FileInputStream
       ("E:/apache-tomcat-7.0.30/webapps/pdf/TripSheetReport 27-3.pdf");  
        } catch (FileNotFoundException ffne) {  
             ffne.printStackTrace();  
        }  
    if (psStream == null) {  
        return;  
    }       
    if (services.length > 0)
    {
       PrintService myService = null;
       for(PrintService service : services) {
       System.out.println(service.getName());
       // Check whether connected printer is recognized.
          if(service.getName().contains("M1136")) {
            myService = service;
     break;
          }
       }
       DocPrintJob printJob = myService.createPrintJob();
       Doc document = new SimpleDoc(psStream, flavor, null);
       
       try {
 
         // Sends the document to print.
  printJob.print(document, new HashPrintRequestAttributeSet());
     } catch (PrintException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
      }
 }
  else
  {
     System.out.println("No PDF printer available.");
  }       
 }
        // To check the status of Print.

   class PrintJobWatcher {
      boolean done = false;
      PrintJobWatcher(DocPrintJob job) {
         job.addPrintJobListener(new PrintJobAdapter() {
       public void printJobCanceled(PrintJobEvent pje) {
          allDone();
       }
       public void printJobCompleted(PrintJobEvent pje) {
         allDone();
       }
       public void printJobFailed(PrintJobEvent pje) {
         allDone();
       }
       public void printJobNoMoreEvents(PrintJobEvent pje) {
         allDone();
       }
       void allDone() {
         synchronized (PrintJobWatcher.this) {
           done = true;
           System.out.println("Printing done ...");
           PrintJobWatcher.this.notify();
         }
       }
   });
 }
   
}
}