Showing posts with label List. Show all posts
Showing posts with label List. Show all posts

Sunday, March 19, 2017

Jasper Report - Table from List Java


Pada kesempatan yang lalu saya pernah membahas mengenai penggunaan jasper pada java yang dapat dibaca di sini. Disana saya sudah menjelaskan mengenai bagian- bagian yang terdapat pada jasper. Serta bagaimana penggunaanya pada java

Pada kesempatan beberapa waktu saya berkesempatan bermain kembali dengan jasper dan masih menggunakan java untuk penggunaannya. Pada kesempatan kali ini saya akan memberikan contoh penggunaan jasper menggunakan table dengan javabean datasource.

Table tentunya merupakan bagian yang sering ada pada report. Jasper tentunya juga support dengan fitur ini. Penggunaan table pada jasper sebenarnya sangat mudah apabila menggunakan datasource karena sudah ada wizard untuk hal tersebut. Maka dari itu saya tidak akan membahas penggunaan table pada jasper menggunakan datasource melainkan menggunakan java.

Apabila sebelumnya dengan mengirim list sebagai JRDataSource dan langsung dapat digunakan pada detail band. Untuk menggunakan list pada table data dalam bentuk JRDataSource perlu dikirim sebagai bagian dari param.

Mari kita siapkan template reportnya.
    • Buat parameter pada report dengan nama ObjectDataSource dan Class : net.sf.jasperreports.engine.data.JRBeanCollectionDataSource





    • Membuat sebuah datasource yang akan digunakan pada table ( bisa langsung ketika config tablenya juga )

    •  Ambil table dari pallet dan menjalankan wizardnya seperti berikut




    • Membuat field pada datasource yang digunakan untuk table tersebut sesuai dengan object java kita.



    • Tata dalam table.



    • Setelah selesai saya membersihkan band yang ada pada report dan hanya menyisakan band title dan detail saja. Berikut struktut akhir dari template yang digunakan


    Berikut adalah cara pemanggilan reportnya untuk pembuatan report dalam format pdf dari java.

    
    
        List<SimpleReportVO> detail = new ArrayList<>();    
        SimpleReportVO data1 = new SimpleReportVO();    
        data1.setName("Roti Tawar");    
        data1.setPrice(1000);
    
        detail.add(data1);
    String dest = "D://report/report.pdf"; String template = "D://report-template.jasper"; try{ JRDataSource ds = new JRBeanCollectionDataSource(detail); HashMap params = new HashMap();
            params.put("ObjectDataSource", ds);        
            JasperPrint jp  = JasperFillManager.fillReport(template ,
                    params, new JREmptyDataSource());
            JasperExportManager.exportReportToPdfFile(jp, dest);
        }catch (Exception e){
            logger.info(e.getMessage());    
        }

    Object Java : 
    import lombok.Data;
    
    
    @Data
    public class SimpleReportVO {
        private String name;
        private int price;}

    Hasil darinya seperti berikut :



    Demikian cara penggunaan table pada jasper report dari list java. Semoga berguna..
    Sampai bertemu di kesempatan berikutnya.
    Happy Coding :)


    Tuesday, March 15, 2016

    Mengecek nilai atribut dalam List of object di dalam List dengan lambda expression

    Seringkali kita mengalami kasus dimana harus memvalidasi input value dari atribut List of object di dalam sebuah List yang masuk sebelum di proses.
    Sebagai contoh terdapat 3 object yang saling berkaitan :
    RateRequestVO
    public class RateRequestVO extends BaseVO { 
       private String email;  
       private List<OrderRateVO> orders; 
    //getter setter
    }
    
    OrderRateVO :
    public class OrderRateVO {
       private String orderId;
       private List<RateVO> rates;
    
    //getter setter
    }
    RateVO :
    public class RateVO {
       private String param;
       private Double rate;
    
    //getter setter
    }
    Case :
    Input adalah OrderRequestVO
    Setiap request yang masuk harus mengecek nilai rate (di RateVO) tidak boleh negatif.
    DI java sebelum nya kita harus melakukan loop berulang dan mengecek setiap objectnya, namun di Java 8, dengan lamda expression, permasalahan-permasalahan seperti ini bisa diselesaikan hanya dalam 1 baris.
    Berikut merupakan contoh code nya :
    boolean containNullNegative = vo.getOrders().stream().allMatch(
           a -> a.getRates().stream().anyMatch(rate -> rate.getRate() <= 0)
    );
    
    
    selamat mencoba, happy coding ^^v