1
22
23 package com.liferay.portlet.polls.action;
24
25 import com.liferay.portal.kernel.language.LanguageUtil;
26 import com.liferay.portal.kernel.util.ParamUtil;
27 import com.liferay.portal.struts.ActionConstants;
28 import com.liferay.portal.theme.ThemeDisplay;
29 import com.liferay.portal.util.WebKeys;
30 import com.liferay.portlet.polls.util.PollsUtil;
31
32 import java.io.OutputStream;
33
34 import javax.servlet.http.HttpServletRequest;
35 import javax.servlet.http.HttpServletResponse;
36 import javax.servlet.jsp.PageContext;
37
38 import org.apache.struts.action.Action;
39 import org.apache.struts.action.ActionForm;
40 import org.apache.struts.action.ActionForward;
41 import org.apache.struts.action.ActionMapping;
42
43 import org.jfree.chart.ChartFactory;
44 import org.jfree.chart.ChartUtilities;
45 import org.jfree.chart.JFreeChart;
46 import org.jfree.chart.plot.PlotOrientation;
47 import org.jfree.data.category.CategoryDataset;
48 import org.jfree.data.general.DatasetUtilities;
49 import org.jfree.data.general.PieDataset;
50
51
57 public class ViewChartAction extends Action {
58
59 public ActionForward execute(
60 ActionMapping mapping, ActionForm form, HttpServletRequest req,
61 HttpServletResponse res)
62 throws Exception {
63
64 try {
65 ThemeDisplay themeDisplay =
66 (ThemeDisplay)req.getAttribute(WebKeys.THEME_DISPLAY);
67
68 long questionId = ParamUtil.getLong(req, "questionId");
69
70 String chartType = ParamUtil.getString(req, "chartType", "pie");
71
72 CategoryDataset dataset = PollsUtil.getVotesDataset(questionId);
73
74 String chartName = LanguageUtil.get(
75 themeDisplay.getCompanyId(), themeDisplay.getLocale(),
76 "vote-results");
77 String xName = LanguageUtil.get(
78 themeDisplay.getCompanyId(), themeDisplay.getLocale(),
79 "choice");
80 String yName = LanguageUtil.get(
81 themeDisplay.getCompanyId(), themeDisplay.getLocale(), "votes");
82
83 JFreeChart chart = null;
84
85 if (chartType.equals("area")) {
86 chart = ChartFactory.createAreaChart(
87 chartName, xName, yName, dataset,
88 PlotOrientation.VERTICAL, true, false, false);
89 }
90 else if (chartType.equals("horizontal_bar")) {
91 chart = ChartFactory.createBarChart(
92 chartName, xName, yName, dataset,
93 PlotOrientation.HORIZONTAL, true, false, false);
94 }
95 else if (chartType.equals("line")) {
96 chart = ChartFactory.createLineChart(
97 chartName, xName, yName, dataset,
98 PlotOrientation.VERTICAL, true, false, false);
99 }
100 else if (chartType.equals("vertical_bar")) {
101 chart = ChartFactory.createBarChart(
102 chartName, xName, yName, dataset,
103 PlotOrientation.VERTICAL, true, false, false);
104 }
105 else {
106 PieDataset pieData =
107 DatasetUtilities.createPieDatasetForRow(dataset, 0);
108
109 chart = ChartFactory.createPieChart(
110 chartName, pieData, true, false, false);
111 }
112
113 res.setContentType("image/jpeg");
114
115 OutputStream out = res.getOutputStream();
116
117 ChartUtilities.writeChartAsJPEG(out, chart, 400, 400);
118
119 return null;
120 }
121 catch (Exception e) {
122 req.setAttribute(PageContext.EXCEPTION, e);
123
124 return mapping.findForward(ActionConstants.COMMON_ERROR);
125 }
126 }
127
128 }