1
2
3
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
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
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();
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());
82 drb.addField("detail", Collection.class.getName());
83
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
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
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
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
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
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 }