1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package ar.com.fdvs.dj.test.domain.chart.builder;
31
32 import java.awt.Color;
33 import java.util.HashMap;
34 import java.util.Map;
35
36 import net.sf.jasperreports.charts.design.JRDesignBar3DPlot;
37 import net.sf.jasperreports.charts.design.JRDesignCategoryDataset;
38 import net.sf.jasperreports.charts.type.EdgeEnum;
39 import net.sf.jasperreports.engine.JRFont;
40 import net.sf.jasperreports.engine.design.JRDesignChart;
41 import net.sf.jasperreports.engine.design.JRDesignGroup;
42 import net.sf.jasperreports.engine.design.JRDesignVariable;
43 import net.sf.jasperreports.engine.type.LineStyleEnum;
44 import net.sf.jasperreports.view.JasperViewer;
45 import ar.com.fdvs.dj.domain.DJCalculation;
46 import ar.com.fdvs.dj.domain.DJHyperLink;
47 import ar.com.fdvs.dj.domain.DynamicJasperDesign;
48 import ar.com.fdvs.dj.domain.DynamicReport;
49 import ar.com.fdvs.dj.domain.StringExpression;
50 import ar.com.fdvs.dj.domain.Style;
51 import ar.com.fdvs.dj.domain.builders.ColumnBuilder;
52 import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder;
53 import ar.com.fdvs.dj.domain.builders.GroupBuilder;
54 import ar.com.fdvs.dj.domain.chart.DJChart;
55 import ar.com.fdvs.dj.domain.chart.DJChartOptions;
56 import ar.com.fdvs.dj.domain.chart.builder.DJBar3DChartBuilder;
57 import ar.com.fdvs.dj.domain.chart.plot.DJAxisFormat;
58 import ar.com.fdvs.dj.domain.constants.Border;
59 import ar.com.fdvs.dj.domain.constants.Font;
60 import ar.com.fdvs.dj.domain.constants.GroupLayout;
61 import ar.com.fdvs.dj.domain.constants.HorizontalAlign;
62 import ar.com.fdvs.dj.domain.constants.Transparency;
63 import ar.com.fdvs.dj.domain.constants.VerticalAlign;
64 import ar.com.fdvs.dj.domain.entities.DJGroup;
65 import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn;
66 import ar.com.fdvs.dj.domain.entities.columns.PropertyColumn;
67 import ar.com.fdvs.dj.domain.hyperlink.LiteralExpression;
68 import ar.com.fdvs.dj.test.BaseDjReportTest;
69
70 public class Bar3DChartBuilderTest extends BaseDjReportTest {
71 private DynamicReportBuilder drb;
72 private JRDesignChart chart;
73
74 protected void setUp() throws Exception {
75 drb = new DynamicReportBuilder();
76
77 Style headerStyle = new Style();
78 headerStyle.setFont(Font.VERDANA_MEDIUM_BOLD);
79 headerStyle.setBorderBottom(Border.PEN_2_POINT());
80 headerStyle.setHorizontalAlign(HorizontalAlign.CENTER);
81 headerStyle.setVerticalAlign(VerticalAlign.MIDDLE);
82 headerStyle.setBackgroundColor(Color.DARK_GRAY);
83 headerStyle.setTextColor(Color.WHITE);
84 headerStyle.setTransparency(Transparency.OPAQUE);
85 drb.setDefaultStyles(null, null, headerStyle, null);
86
87 AbstractColumn columnState = ColumnBuilder.getNew()
88 .setColumnProperty("state", String.class.getName()).setTitle(
89 "State").setWidth(new Integer(85)).build();
90 AbstractColumn columnBranch = ColumnBuilder.getNew()
91 .setColumnProperty("branch", String.class.getName()).setTitle(
92 "Branch").setWidth(new Integer(85)).build();
93 AbstractColumn columnaQuantity = ColumnBuilder.getNew()
94 .setColumnProperty("quantity", Long.class.getName()).setTitle(
95 "Quantity").setWidth(new Integer(80)).build();
96 AbstractColumn columnAmount = ColumnBuilder.getNew()
97 .setColumnProperty("amount", Float.class.getName()).setTitle(
98 "Amount").setWidth(new Integer(90)).build();
99
100 drb.addColumn(columnState);
101 drb.addColumn(columnBranch);
102 drb.addColumn(columnaQuantity);
103 drb.addColumn(columnAmount);
104
105 GroupBuilder gb1 = new GroupBuilder();
106 DJGroup g1 = gb1.setCriteriaColumn((PropertyColumn) columnState)
107 .addFooterVariable(columnAmount,DJCalculation.SUM)
108 .addFooterVariable(columnaQuantity,DJCalculation.SUM)
109 .addVariable("group_state_name", columnState, DJCalculation.FIRST)
110 .setGroupLayout(GroupLayout.DEFAULT)
111 .build();
112
113
114
115
116
117 drb.addGroup(g1);
118
119
120 drb.setUseFullPageWidth(true);
121
122 DJAxisFormat categoryAxisFormat = new DJAxisFormat("category");
123 categoryAxisFormat.setLabelFont(Font.ARIAL_SMALL);
124 categoryAxisFormat.setLabelColor(Color.DARK_GRAY);
125 categoryAxisFormat.setTickLabelFont(Font.ARIAL_SMALL);
126 categoryAxisFormat.setTickLabelColor(Color.DARK_GRAY);
127 categoryAxisFormat.setTickLabelMask("");
128 categoryAxisFormat.setLineColor(Color.DARK_GRAY);
129
130 DJAxisFormat valueAxisFormat = new DJAxisFormat("value");
131 valueAxisFormat.setLabelFont(Font.ARIAL_SMALL);
132 valueAxisFormat.setLabelColor(Color.DARK_GRAY);
133 valueAxisFormat.setTickLabelFont(Font.ARIAL_SMALL);
134 valueAxisFormat.setTickLabelColor(Color.DARK_GRAY);
135 valueAxisFormat.setTickLabelMask("#,##0.0");
136 valueAxisFormat.setLineColor(Color.DARK_GRAY);
137
138 DJChart djChart = new DJBar3DChartBuilder()
139
140 .setX(20)
141 .setY(10)
142 .setWidth(500)
143 .setHeight(250)
144 .setCentered(false)
145 .setBackColor(Color.LIGHT_GRAY)
146 .setShowLegend(true)
147 .setPosition(DJChartOptions.POSITION_FOOTER)
148 .setTitle(new StringExpression() {
149 public Object evaluate(Map fields, Map variables, Map parameters) {
150 return variables.get("group_state_name");
151 }
152 })
153 .setTitleColor(Color.DARK_GRAY)
154 .setTitleFont(Font.ARIAL_BIG_BOLD)
155 .setSubtitle("subtitle")
156 .setSubtitleColor(Color.DARK_GRAY)
157 .setSubtitleFont(Font.COURIER_NEW_BIG_BOLD)
158 .setLegendColor(Color.DARK_GRAY)
159 .setLegendFont(Font.COURIER_NEW_MEDIUM_BOLD)
160 .setLegendBackgroundColor(Color.WHITE)
161 .setLegendPosition(DJChartOptions.EDGE_BOTTOM)
162 .setTitlePosition(DJChartOptions.EDGE_TOP)
163 .setLineStyle(DJChartOptions.LINE_STYLE_DOTTED)
164 .setLineWidth(1)
165 .setLineColor(Color.DARK_GRAY)
166 .setPadding(5)
167
168 .setCategory((PropertyColumn) columnBranch)
169 .addSerie(columnaQuantity, "quant.")
170 .addSerie(columnAmount)
171
172 .setXOffset(10)
173 .setyOffset(10)
174 .setShowLabels(false)
175 .setCategoryAxisFormat(categoryAxisFormat)
176 .setValueAxisFormat(valueAxisFormat)
177 .build();
178 drb.addChart(djChart);
179
180 DJHyperLink djlink = new DJHyperLink();
181 djlink.setExpression(new StringExpression() {
182 public Object evaluate(Map fields, Map variables, Map parameters) {
183 return "http://thisIsAURL?count=" + variables.get("REPORT_COUNT");
184 }
185 });
186 djlink.setTooltip(new LiteralExpression("I'm a literal tootltip"));
187 djChart.setLink(djlink);
188
189 HashMap vars = new HashMap();
190 vars.put(columnaQuantity, new JRDesignVariable());
191 vars.put(columnAmount, new JRDesignVariable());
192 JRDesignGroup group = new JRDesignGroup();
193 chart = djChart.transform(new DynamicJasperDesign(), "", group, group, vars, 0);
194 }
195
196 public void testChart() {
197 assertEquals(20, chart.getX());
198 assertEquals(10, chart.getY());
199 assertEquals(500, chart.getWidth());
200 assertEquals(250, chart.getHeight());
201 assertEquals(Color.LIGHT_GRAY, chart.getBackcolor());
202 assertEquals(Boolean.TRUE, chart.getShowLegend());
203 assertNotNull(chart.getTitleExpression().getText());
204 assertEquals(Color.DARK_GRAY, chart.getTitleColor());
205 testFont(Font.ARIAL_BIG_BOLD, chart.getTitleFont());
206 assertNotNull(chart.getSubtitleExpression().getText());
207 assertEquals(Color.DARK_GRAY, chart.getSubtitleColor());
208 testFont(Font.COURIER_NEW_BIG_BOLD, chart.getSubtitleFont());
209 assertEquals(Color.DARK_GRAY, chart.getLegendColor());
210 testFont(Font.COURIER_NEW_MEDIUM_BOLD, chart.getLegendFont());
211 assertEquals(Color.WHITE, chart.getLegendBackgroundColor());
212 assertEquals(EdgeEnum.getByValue(new Byte(DJChartOptions.EDGE_BOTTOM)), chart.getLegendPositionValue() );
213 assertEquals(EdgeEnum.getByValue(new Byte(DJChartOptions.EDGE_TOP)), chart.getTitlePositionValue());
214 assertEquals(LineStyleEnum.getByValue(new Byte(DJChartOptions.LINE_STYLE_DOTTED)), chart.getLineBox().getPen().getLineStyleValue());
215 assertEquals(new Float(1), chart.getLineBox().getPen().getLineWidth());
216 assertEquals(Color.DARK_GRAY, chart.getLineBox().getPen().getLineColor());
217 assertEquals(new Integer(5), chart.getLineBox().getPadding());
218 }
219
220 public void testDataset() {
221 JRDesignCategoryDataset dataset = (JRDesignCategoryDataset) chart.getDataset();
222 assertEquals(2, dataset.getSeriesList().size());
223 assertNotNull(dataset.getSeries()[0].getLabelExpression().getText());
224 assertNotNull(dataset.getSeries()[0].getSeriesExpression().getText());
225 }
226
227 public void testPlot() {
228 JRDesignBar3DPlot plot = (JRDesignBar3DPlot) chart.getPlot();
229 assertEquals(new Double(10), plot.getXOffsetDouble());
230 assertEquals(new Double(10), plot.getYOffsetDouble());
231 assertEquals(Boolean.FALSE, plot.getShowLabels());
232
233 assertNotNull(plot.getCategoryAxisLabelExpression().getText());
234 testFont(Font.ARIAL_SMALL, plot.getCategoryAxisLabelFont());
235 assertEquals(Color.DARK_GRAY, plot.getCategoryAxisLabelColor());
236 testFont(Font.ARIAL_SMALL, plot.getCategoryAxisTickLabelFont());
237 assertEquals(Color.DARK_GRAY, plot.getCategoryAxisTickLabelColor());
238 assertEquals("", plot.getCategoryAxisTickLabelMask());
239 assertEquals(Color.DARK_GRAY, plot.getCategoryAxisLineColor());
240
241 assertNotNull(plot.getValueAxisLabelExpression().getText());
242 testFont(Font.ARIAL_SMALL, plot.getValueAxisLabelFont());
243 assertEquals(Color.DARK_GRAY, plot.getValueAxisLabelColor());
244 testFont(Font.ARIAL_SMALL, plot.getValueAxisTickLabelFont());
245 assertEquals(Color.DARK_GRAY, plot.getValueAxisTickLabelColor());
246 assertEquals("#,##0.0", plot.getValueAxisTickLabelMask());
247 assertEquals(Color.DARK_GRAY, plot.getValueAxisLineColor());
248 }
249
250 public DynamicReport buildReport() throws Exception {
251 return drb.build();
252 }
253
254 private void testFont(Font djFont, JRFont jrFont) {
255 assertEquals(djFont.getFontName(), jrFont.getFontName());
256 assertEquals(djFont.getFontSize(), jrFont.getFontSize());
257 assertEquals(djFont.isBold(), jrFont.isBold());
258 assertEquals(djFont.isItalic(), jrFont.isItalic());
259 }
260
261 public static void main(String[] args) throws Exception {
262 Bar3DChartBuilderTest test = new Bar3DChartBuilderTest();
263 test.setUp();
264 test.testReport();
265 JasperViewer.viewReport(test.jp);
266 }
267 }