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