View Javadoc

1   /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5   
6   package ar.com.fdvs.dj.test.crosstab;
7   
8   import ar.com.fdvs.dj.core.DJConstants;
9   import ar.com.fdvs.dj.core.DynamicJasperHelper;
10  import ar.com.fdvs.dj.core.layout.ClassicLayoutManager;
11  import ar.com.fdvs.dj.core.layout.LayoutManager;
12  import ar.com.fdvs.dj.domain.*;
13  import ar.com.fdvs.dj.domain.builders.*;
14  import ar.com.fdvs.dj.domain.constants.*;
15  import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn;
16  import ar.com.fdvs.dj.test.ReportExporter;
17  import junit.framework.TestCase;
18  import net.sf.jasperreports.engine.*;
19  import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
20  import net.sf.jasperreports.view.JasperViewer;
21  
22  import java.io.FileNotFoundException;
23  import java.util.*;
24  
25  /**
26   *
27   * @author rve
28   */
29  public class InnerCrossTabBuilder4 extends TestCase {
30  
31      public  DynamicReport buildDynamicReport() {
32          FastReportBuilder drb = null;
33          try {
34              drb = new FastReportBuilder();
35              drb.setGrandTotalLegend("Total");
36              drb.setPageSizeAndOrientation(new Page(585, 842));
37              drb.setUseFullPageWidth(false);
38              drb.setAllowDetailSplit(false);
39              drb.setWhenNoData("No data", null, true, true);
40              drb.setReportName("This is the main report");
41  
42              AbstractColumn colSales = ColumnBuilder.getNew()
43              							.setColumnProperty("sales", Integer.class.getName())
44              							.setTitle("Sales")
45              							.setWidth(50)
46              							.build();
47  
48  
49              AbstractColumn colYear = ColumnBuilder.getNew()
50  //                                           	.setColumnProperty("year", String.class.getName())
51                                             	.setTitle("Year")
52                                             	.setWidth(50)
53           							.setCustomExpression(new CustomExpression() {
54  
55              								public String getClassName() {
56              									return String.class.getName();
57              								}
58  
59              								public Object evaluate(Map fields, Map variables, Map parameters) {
60              									return fields.get("year") + " - " +fields.get("sales");
61              								}
62              							})
63                                             	.build(); //WRONG Class was used, it is Integer
64  
65              AbstractColumn colexp = new ColumnBuilder().setTitle("exp").setCustomExpression(new CustomExpression() {
66  
67  				public String getClassName() {
68  					return String.class.getName();
69  				}
70  
71  				public Object evaluate(Map fields, Map variables, Map parameters) {
72  					return fields.get("year") + " - " +fields.get("sales");
73  				}
74  			}).setWidth(100).build();
75              drb.addColumn(colYear);
76              drb.addColumn(colSales);
77              drb.addColumn(colexp);
78  
79              drb.addGroups(1);
80  
81              drb.addField("year", String.class.getName()); //IMPORTANT!!! this must be declared
82              drb.addField("detail", Collection.class.getName()); //IMPORTANT!!! this must be declared
83  //            drb.addConcatenatedReport(buildInnerDynamicReport(), new ClassicLayoutManager(), "ds_cross", DJConstants.DATA_SOURCE_ORIGIN_PARAMETER, DJConstants.DATA_SOURCE_TYPE_COLLECTION);
84  
85          } catch (ColumnBuilderException ex) {
86              ex.printStackTrace();
87              drb = null;
88          }
89          finally {
90              return drb.build();
91          }
92      }
93  
94      private DynamicReport buildInnerDynamicReport() throws ClassNotFoundException, BuilderException {
95          FastReportBuilder drb = new FastReportBuilder();
96  
97          Style titlestyle = new StyleBuilder(false).setHorizontalAlign(HorizontalAlign.LEFT).setFont(Font.ARIAL_MEDIUM_BOLD).build();
98  
99          drb.addColumn("","year",String.class.getName(),200)
100 		    .addField("detail", Collection.class.getName())
101 		    .setTitleStyle(titlestyle)
102 		    .setUseFullPageWidth(true)
103 		    .setPrintColumnNames(false)
104         	.setAllowDetailSplit(false)
105         	.setWhenNoDataAllSectionNoDetail()
106         	.setReportName("Inner crosstab")
107         	.setTitle("Sales detail by year")
108         	.setPrintColumnNames(false);
109 
110 
111 		drb.addGroups(1, GroupLayout.EMPTY);
112         drb.getGroup(0).addHeaderCrosstab(buildCrosstab());
113 
114         return drb.build();
115     }
116 
117   private static DJCrosstab buildCrosstab() {
118         CrosstabBuilder cb = new CrosstabBuilder().setUseFullWidth(true)
119                              .setAutomaticTitle(false).setMainHeaderTitle("")
120                              .setHeight(50)
121 //                             .setCaption(new DJLabel("\"Sales for year \" + $F{field2}",null,true) )
122                              .setCaption(new DJLabel(new CustomExpression() {
123 
124 								public String getClassName() {
125 									return String.class.getName();
126 								}
127 
128 								public Object evaluate(Map fields, Map variables, Map parameters) {
129 									return "Title from custom expresion for year " + fields.get("year");
130 								}
131 							},null))
132                              .setCellBorder(Border.PEN_1_POINT())
133                              .setDatasource("detail", DJConstants.DATA_SOURCE_ORIGIN_FIELD, DJConstants.DATA_SOURCE_TYPE_COLLECTION);
134 
135         cb.addColumn("Type", "field2", String.class.getName(), false);
136         cb.addRow("Genre", "field3", String.class.getName(), false);
137         cb.addMeasure("field1", Integer.class.getName(), DJCalculation.SUM, "Sales", null);
138 
139         return cb.build();
140     }
141 
142 
143 
144     public static List getList() {
145         List list = new ArrayList();
146 
147         // Add the first line
148         Map result1 = new HashMap();
149         result1.put("sales", new Integer(150));
150         result1.put("year", String.valueOf("2007"));
151 
152         List data1 = new ArrayList();
153         Map data1_1 = new HashMap();
154         data1_1.put("field1", new Integer(25));
155         data1_1.put("field2", String.valueOf("DVD"));
156         data1_1.put("field3", String.valueOf("SF"));
157         data1.add(data1_1);
158 
159         Map data1_2 = new HashMap();
160         data1_2.put("field1", new Integer(25));
161         data1_2.put("field2", String.valueOf("DVD"));
162         data1_2.put("field3", String.valueOf("Fantasy"));
163         data1.add(data1_2);
164 
165         Map data1_3 = new HashMap();
166         data1_3.put("field1", new Integer(50));
167         data1_3.put("field2", String.valueOf("Book"));
168         data1_3.put("field3", String.valueOf("SF"));
169         data1.add(data1_3);
170 
171         Map data1_4 = new HashMap();
172         data1_4.put("field1", new Integer(50));
173         data1_4.put("field2", String.valueOf("Book"));
174         data1_4.put("field3", String.valueOf("Fantasy"));
175         data1.add(data1_4);
176 
177         result1.put("detail", data1);
178 
179         list.add(result1);
180 
181         // Add the second line
182         Map result2 = new HashMap();
183         result2.put("sales", new Integer(250));
184         result2.put("year", String.valueOf("2008"));
185 
186         List data2 = new ArrayList();
187         Map data2_1 = new HashMap();
188         data2_1.put("field1", new Integer(25));
189         data2_1.put("field2", String.valueOf("DVD"));
190         data2_1.put("field3", String.valueOf("SF"));
191         data2.add(data2_1);
192 
193         Map data2_2 = new HashMap();
194         data2_2.put("field1", new Integer(25));
195         data2_2.put("field2", String.valueOf("DVD"));
196         data2_2.put("field3", String.valueOf("Fantasy"));
197         data2.add(data2_2);
198 
199         Map data2_3 = new HashMap();
200         data2_3.put("field1", new Integer(100));
201         data2_3.put("field2", String.valueOf("Book"));
202         data2_3.put("field3", String.valueOf("SF"));
203         data2.add(data2_3);
204 
205         Map data2_4 = new HashMap();
206         data2_4.put("field1", new Integer(100));
207         data2_4.put("field2", String.valueOf("Book"));
208         data2_4.put("field3", String.valueOf("Fantasy"));
209         data2.add(data2_4);
210 
211         result2.put("detail", data2);
212 
213         list.add(result2);
214 
215         // Add the third line
216         Map result3 = new HashMap();
217         result3.put("sales", new Integer(203));
218         result3.put("year", String.valueOf("2009"));
219 
220         List data3 = new ArrayList();
221         Map data3_1 = new HashMap();
222         data3_1.put("field1", new Integer(25));
223         data3_1.put("field2", String.valueOf("DVD"));
224         data3_1.put("field3", String.valueOf("SF"));
225         data3.add(data3_1);
226 
227         Map data3_2 = new HashMap();
228         data3_2.put("field1", new Integer(33));
229         data3_2.put("field2", String.valueOf("DVD"));
230         data3_2.put("field3", String.valueOf("Fantasy"));
231         data3.add(data3_2);
232 
233         Map data3_3 = new HashMap();
234         data3_3.put("field1", new Integer(75));
235         data3_3.put("field2", String.valueOf("Book"));
236         data3_3.put("field3", String.valueOf("SF"));
237         data3.add(data3_3);
238 
239         Map data3_4 = new HashMap();
240         data3_4.put("field1", new Integer(70));
241         data3_4.put("field2", String.valueOf("Book"));
242         data3_4.put("field3", String.valueOf("Fantasy"));
243         data3.add(data3_4);
244 
245         result3.put("detail", data3);
246 
247         list.add(result3);
248 
249         return list;
250     }
251 
252     public static LayoutManager getLayoutManager() {
253         return new ClassicLayoutManager();
254     }
255     JasperReport jr;
256     JasperPrint jp;
257 
258     public void testReport() throws JRException, FileNotFoundException, ClassNotFoundException, BuilderException{
259     	List list = getList();
260     	  JRDataSource ds = new JRBeanCollectionDataSource(list);
261           Map params = new HashMap();
262           params.put("ds_cross", list);
263 
264           jr = DynamicJasperHelper.generateJasperReport(buildDynamicReport(), getLayoutManager(), params);
265 //          jr = DynamicJasperHelper.generateJasperReport(buildInnerDynamicReport(), getLayoutManager(), params);
266           jp = JasperFillManager.fillReport(jr, params,ds);
267 
268           ReportExporter.exportReport(jp, System.getProperty("user.dir") + "/target/" + this.getClass().getName() + ".pdf");
269           DynamicJasperHelper.generateJRXML(jr, "UTF-8",System.getProperty("user.dir") + "/target/" + this.getClass().getName() + ".jrxml");
270 
271     }
272 
273     public static void main(String[] args) throws Exception {
274     	InnerCrossTabBuilder4 test = new InnerCrossTabBuilder4();
275     	test.testReport();
276 	    JasperViewer.viewReport(test.jp);
277     }
278 }