1
2
3
4
5 package ecar.servlet.grafico;
6
7 import java.awt.Font;
8 import java.io.IOException;
9 import java.util.ArrayList;
10 import java.util.Iterator;
11 import java.util.List;
12 import java.util.Map;
13 import java.util.Set;
14
15 import javax.servlet.ServletException;
16 import javax.servlet.http.HttpServlet;
17 import javax.servlet.http.HttpServletRequest;
18 import javax.servlet.http.HttpServletResponse;
19
20 import org.apache.log4j.Logger;
21 import org.jfree.chart.ChartFactory;
22 import org.jfree.chart.ChartUtilities;
23 import org.jfree.chart.JFreeChart;
24 import org.jfree.chart.axis.CategoryAxis;
25 import org.jfree.chart.axis.ValueAxis;
26 import org.jfree.chart.labels.CategoryItemLabelGenerator;
27 import org.jfree.chart.labels.ItemLabelAnchor;
28 import org.jfree.chart.labels.ItemLabelPosition;
29 import org.jfree.chart.plot.CategoryPlot;
30 import org.jfree.chart.plot.PlotOrientation;
31 import org.jfree.chart.renderer.category.CategoryItemRenderer;
32 import org.jfree.chart.title.TextTitle;
33 import org.jfree.data.category.CategoryDataset;
34 import org.jfree.data.category.DefaultCategoryDataset;
35 import org.jfree.ui.TextAnchor;
36
37 import comum.util.Data;
38 import comum.util.Pagina;
39
40 import ecar.dao.AcompRealFisicoDao;
41 import ecar.dao.AcompReferenciaItemDao;
42 import ecar.dao.ExercicioDao;
43 import ecar.dao.ItemEstrtIndResulDao;
44 import ecar.exception.ECARException;
45 import ecar.pojo.AcompRealFisicoArf;
46 import ecar.pojo.AcompReferenciaItemAri;
47 import ecar.pojo.ExercicioExe;
48 import ecar.pojo.ItemEstrtIndResulIettr;
49
50
51
52
53
54 public class GraficoRealizadoNoExercicio extends HttpServlet{
55
56
57
58
59 private static final long serialVersionUID = -7922981954605986999L;
60 private Logger logger = null;
61
62
63
64
65
66
67
68
69
70 public GraficoRealizadoNoExercicio() {
71 this.logger = Logger.getLogger(this.getClass());
72
73 }
74
75
76
77
78
79
80
81
82
83
84
85
86 public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
87
88 try {
89 JFreeChart grafico;
90 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
91
92 String categoria = "Total Realizado";
93 String serie = "";
94 String indicador = "";
95 String titulo = "Valores Realizado no Exercício";
96 int numMeses = 0;
97 boolean existeLabelGrupo = false;
98
99 AcompReferenciaItemDao acompRefItemDao = new AcompReferenciaItemDao(null);
100 AcompReferenciaItemAri acompRefItem = (AcompReferenciaItemAri) acompRefItemDao.buscar(AcompReferenciaItemAri.class, Long.valueOf(Pagina.getParamStr(request, "codAri")));
101
102 if(!"".equals(Pagina.getParamStr(request, "codExe"))){
103 ExercicioDao exercicioDao = new ExercicioDao(null);
104 ExercicioExe exercicio = (ExercicioExe) exercicioDao.buscar(ExercicioExe.class, Long.valueOf(Pagina.getParamStr(request, "codExe")));
105
106 titulo = titulo + " " + exercicio.getDescricaoExe() ;
107
108 if(!"".equals(Pagina.getParamStr(request, "codIettir"))){
109 ItemEstrtIndResulDao indResulDao = new ItemEstrtIndResulDao(null);
110 ItemEstrtIndResulIettr indResul = (ItemEstrtIndResulIettr) indResulDao.buscar(ItemEstrtIndResulIettr.class, Long.valueOf(Pagina.getParamStr(request, "codIettir")));
111
112 indicador = indResul.getNomeIettir();
113
114 AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
115
116 List meses = new ArrayList();
117 if(exercicio.equals(acompRefItem.getAcompReferenciaAref().getExercicioExe())){
118 int mesRef = Integer.valueOf(acompRefItem.getAcompReferenciaAref().getMesAref()).intValue();
119 int anoRef = Integer.valueOf(acompRefItem.getAcompReferenciaAref().getAnoAref()).intValue();
120 meses = new ExercicioDao(null).getMesesDentroDoExercicio(exercicio,mesRef,anoRef);
121 }else{
122 meses = new ExercicioDao(null).getMesesDentroDoExercicio(exercicio);
123 }
124
125 Map mapMeses = acompRealFisicoDao.getQtdRealizadaExercicioPorMes(exercicio, indResul);
126
127 Iterator it = meses.iterator();
128
129 while(it.hasNext()){
130 String mes = it.next().toString();
131 String abrvMes = mes.split("-")[0];
132 serie = Data.getAbreviaturaMes(Integer.valueOf(abrvMes).intValue());
133
134 double valor = 0;
135
136 if(mapMeses.get(mes) != null) {
137 valor = Double.parseDouble(mapMeses.get(mes).toString());
138 }
139
140 dataset.addValue(valor, categoria, serie);
141 numMeses++;
142 }
143
144 int anoRefIndicador = Data.getAno(exercicio.getDataInicialExe());
145 int mesRefIndicador = numMeses;
146
147
148
149
150 existeLabelGrupo = indResul.getLabelGraficoGrupoIettir() != null;
151 if(existeLabelGrupo){
152 indicador = "";
153 dataset = imprimeIndicadoresMesmoGrupo(indResul, exercicio, mesRefIndicador, anoRefIndicador, request);
154 }
155
156 }else{
157 serie = exercicio.getDescricaoExe();
158 dataset.addValue(0, categoria, serie);
159 }
160 }else{
161 dataset.addValue(0, categoria, serie);
162 }
163
164 grafico = ChartFactory.createBarChart3D(titulo,
165 "",
166 indicador,
167 dataset,
168 PlotOrientation.VERTICAL,
169 true,
170 true,
171 false);
172
173 CategoryPlot plot = grafico.getCategoryPlot();
174
175
176 CategoryItemRenderer renderer = plot.getRenderer();
177 ItemLabelPosition posicao = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BOTTOM_CENTER,TextAnchor.CENTER,0);
178 renderer.setPositiveItemLabelPosition(posicao);
179 renderer.setItemLabelsVisible(true);
180 Font labelFont = new Font("Times new Roman", 0, 15);
181 renderer.setItemLabelFont(labelFont);
182
183
184
185 TextTitle title = new TextTitle();
186 title.setFont(new Font("Arial", Font.PLAIN, 15));
187 title.setText(titulo);
188
189 grafico.setTitle(title);
190
191 CategoryAxis categoryaxis = plot.getDomainAxis();
192 categoryaxis.setTickLabelFont(new Font("Arial", Font.PLAIN, 8));
193
194 ValueAxis valueaxis = plot.getRangeAxis();
195 valueaxis.setTickLabelFont(new Font("Arial", Font.PLAIN, 8));
196
197
198
199
200
201
202
203
204
205
206
207 if(numMeses < 3){
208 numMeses = 3;
209 }
210
211 response.setContentType("image/jpeg");
212 int aumentaComp = 0;
213 if(existeLabelGrupo){
214 aumentaComp = dataset.getRowCount() * 50;
215 }
216 int comp = (numMeses * 50 + aumentaComp);
217 int altura = 400;
218 ChartUtilities.writeChartAsPNG(response.getOutputStream(), grafico, comp, altura);
219 response.getOutputStream().flush();
220 response.getOutputStream().close();
221
222 }catch (IOException e) {
223 this.logger.error(e);
224 }catch (ECARException e) {
225 this.logger.error(e);
226 }
227 }
228
229
230
231
232
233
234
235
236
237
238
239
240
241 private DefaultCategoryDataset imprimeIndicadoresMesmoGrupo(ItemEstrtIndResulIettr indResul,ExercicioExe exercicio, int mesRef, int anoRef, HttpServletRequest request) throws ECARException{
242
243 ItemEstrtIndResulDao indResulDao = new ItemEstrtIndResulDao(null);
244 AcompRealFisicoDao acompRealFisicoDao = new AcompRealFisicoDao(null);
245 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
246 List listaIndicadoresGrupo = indResulDao.retornaIndicadoresGraficoGrupo(indResul);
247 Iterator itListaIndicadoresGrupo = listaIndicadoresGrupo.iterator();
248 String serie = "";
249
250
251 while(itListaIndicadoresGrupo.hasNext()){
252 ItemEstrtIndResulIettr itemIndicadorIettr = (ItemEstrtIndResulIettr) itListaIndicadoresGrupo.next();
253
254 Set listaIndicadorAcompRealFisico = itemIndicadorIettr.getAcompRealFisicoArfs();
255 Iterator itListaIndicadorAcompRealFisico = listaIndicadorAcompRealFisico.iterator();
256
257
258 while(itListaIndicadorAcompRealFisico.hasNext()){
259 AcompRealFisicoArf indicadorAcompRealFisico = (AcompRealFisicoArf) itListaIndicadorAcompRealFisico.next();
260
261 List exerciciosAnterioresIndicador = new ExercicioDao(request).getExerciciosProjecaoByExercicio(indicadorAcompRealFisico.getItemEstruturaIett().getCodIett(),exercicio.getCodExe());
262 Iterator itExAnterioresIndicador = exerciciosAnterioresIndicador.iterator();
263
264
265 while(itExAnterioresIndicador.hasNext()){
266
267 ExercicioExe exercicioIndicador = (ExercicioExe) itExAnterioresIndicador.next();
268
269 List meses = new ArrayList();
270
271
272 if(exercicio.getCodExe().equals(exercicioIndicador.getCodExe())){
273 meses = new ExercicioDao(null).getMesesDentroDoExercicio(exercicio,mesRef,anoRef);
274
275 Map mapMesesIndicadorGrupo = acompRealFisicoDao.getQtdRealizadaExercicioPorMes(exercicioIndicador, indicadorAcompRealFisico.getItemEstrtIndResulIettr());
276
277 Iterator it = meses.iterator();
278
279
280 while(it.hasNext()){
281 String mes = it.next().toString();
282 String abrvMes = mes.split("-")[0];
283
284 if(Integer.parseInt(abrvMes) <= mesRef){
285
286 serie = Data.getAbreviaturaMes(Integer.valueOf(abrvMes).intValue());
287 double valor = 0;
288 if(mapMesesIndicadorGrupo.get(mes) != null) {
289 valor = Double.parseDouble(mapMesesIndicadorGrupo.get(mes).toString());
290 }
291 dataset.addValue(valor, itemIndicadorIettr.getNomeIettir(), serie);
292 }
293 }
294 }
295 }
296 }
297 }
298 return dataset;
299 }
300
301
302
303
304 static class LabelGenerator implements CategoryItemLabelGenerator {
305
306
307
308
309
310
311
312
313
314
315 public String generateLabel(CategoryDataset dataSet, int series, int category) {
316
317 int valor = dataSet.getValue(series, category).intValue();
318 if(valor == 0){
319 return "";
320 }else{
321 return String.valueOf(valor);
322 }
323 }
324
325 public String generateColumnLabel(CategoryDataset arg0, int arg1) {
326
327 return null;
328 }
329
330 public String generateRowLabel(CategoryDataset arg0, int arg1) {
331
332 return null;
333 }
334 }
335 }