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