Rev 1993 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1830 | jmachado | 1 | package pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components; |
2 | |||
1992 | grupo5 | 3 | import jomm.utils.BytesUtils; |
4 | import jomm.utils.MimeTypeGuesser; |
||
5 | import org.jfree.chart.ChartFactory; |
||
6 | import org.jfree.chart.JFreeChart; |
||
7 | import org.jfree.chart.plot.CategoryPlot; |
||
8 | import org.jfree.chart.plot.PlotOrientation; |
||
9 | import org.jfree.data.category.DefaultCategoryDataset; |
||
1993 | grupo5 | 10 | import org.jfree.ui.RectangleInsets; |
1992 | grupo5 | 11 | import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument; |
12 | import pt.estgp.estgweb.utils.Globals; |
||
13 | import pt.estgp.estgweb.utils.documentBuilder.ImageComponent; |
||
14 | import pt.estgp.estgweb.web.controllers.utils.FileUploaded; |
||
15 | |||
16 | import javax.imageio.ImageIO; |
||
17 | import java.awt.*; |
||
18 | import java.awt.image.BufferedImage; |
||
19 | import java.io.FileOutputStream; |
||
20 | import java.io.IOException; |
||
21 | |||
1830 | jmachado | 22 | /** |
23 | * Created by jorgemachado on 31/10/17. |
||
24 | */ |
||
1992 | grupo5 | 25 | public class GlobalLearningResultsChartYearImg extends ImageComponent |
1830 | jmachado | 26 | { |
1992 | grupo5 | 27 | public FileUploaded generateChart2tmp(UnitsLearningResultsTable results,CourseReportDocument courseReportDocument) throws 1.5.0/docs/api/java/io/IOException.html">IOException |
28 | { |
||
1995 | grupo5 | 29 | DefaultCategoryDataset data = new DefaultCategoryDataset(); |
1992 | grupo5 | 30 | |
1995 | grupo5 | 31 | |
32 | // Ano que não consta no Plano |
||
33 | UnitsLearningResult unitsLearningResult = results.years.get(0); |
||
34 | |||
35 | double aprovadosPercent1013; |
||
36 | double aprovadosPercent1416; |
||
37 | double aprovadosPercent1720; |
||
38 | |||
39 | aprovadosPercent1013 = ((int)(unitsLearningResult.getAprovados1013Percent()*100.0))/100.0; |
||
40 | aprovadosPercent1416 = ((int)(unitsLearningResult.getAprovados1416Percent()*100.0))/100.0; |
||
41 | aprovadosPercent1720 = ((int)(unitsLearningResult.getAprovados1720Percent()*100.0))/100.0; |
||
42 | |||
43 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1013), "Aprovados 10-13 " ,(results.years.get(0).getAno()) + " Ano " ); |
||
44 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1416), "Aprovados 14-16 " ,(results.years.get(0).getAno()) + " Ano " ); |
||
45 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1720), "Aprovados 17-20 " ,(results.years.get(0).getAno()) + " Ano " ); |
||
46 | |||
47 | |||
48 | |||
49 | float aaprovados1013[] = new float[10]; |
||
50 | float aaprovados1416[]= new float[10]; |
||
51 | float aaprovados1720[]= new float[10]; |
||
52 | double aaprovadosPercent1013[]= new double[10]; |
||
53 | double aaprovadosPercent1416[]= new double[10]; |
||
54 | double aaprovadosPercent1720[]= new double[10]; |
||
55 | |||
56 | int yearCounter[] = new int[10]; //Total de anos existentes na tabela |
||
57 | |||
58 | float totalAlunos = 0; |
||
59 | float totalAlunos1013 = 0; |
||
60 | float totalAlunos1416 = 0; |
||
61 | float totalAlunos1720 = 0; |
||
62 | double totalAlunosPercent1013; |
||
63 | double totalAlunosPercent1416; |
||
64 | double totalAlunosPercent1720; |
||
65 | |||
66 | |||
67 | // Inicialização de Valores |
||
68 | for(int i = 1; i < 6; i++) |
||
1992 | grupo5 | 69 | { |
1995 | grupo5 | 70 | aaprovados1013[i] = 0; |
71 | aaprovados1416[i] = 0; |
||
72 | aaprovados1720[i] = 0; |
||
73 | aaprovadosPercent1013[i] = 0; |
||
74 | aaprovadosPercent1416[i] = 0; |
||
75 | aaprovadosPercent1720[i] = 0; |
||
76 | yearCounter[i] = 0; |
||
77 | } |
||
1992 | grupo5 | 78 | |
79 | |||
1995 | grupo5 | 80 | // Extrair os dados recebidos |
81 | for(int i = 1; i < 6; i++) //Years(between 1 and 5) |
||
82 | { |
||
83 | for (int j = 0; j < results.years.size(); j++) //Years existent on array (between 0 and X) |
||
84 | { |
||
85 | UnitsLearningResult ola = results.years.get(j); |
||
86 | |||
87 | if (results.years.get(j).getAno() == i) |
||
88 | { |
||
89 | aaprovados1013[i] += ola.getAprovados1013(); |
||
90 | aaprovados1416[i] += ola.getAprovados1416(); |
||
91 | aaprovados1720[i] += ola.getAprovados1720(); |
||
92 | aaprovadosPercent1013[i] += ((int)(ola.getAprovados1013Percent()*100.0))/100.0; |
||
93 | aaprovadosPercent1416[i] += ((int)(ola.getAprovados1416Percent()*100.0))/100.0; |
||
94 | aaprovadosPercent1720[i] += ((int)(ola.getAprovados1720Percent()*100.0))/100.0; |
||
95 | yearCounter[i] += 1; |
||
96 | } |
||
97 | } |
||
1992 | grupo5 | 98 | } |
1995 | grupo5 | 99 | |
100 | // Adicionar os dados ao gráfico |
||
101 | for (int i = 1; i <6; i++) |
||
102 | { |
||
103 | aaprovadosPercent1013[i] = aaprovadosPercent1013[i] / yearCounter[i]; |
||
104 | aaprovadosPercent1416[i] = aaprovadosPercent1416[i] / yearCounter[i]; |
||
105 | aaprovadosPercent1720[i] = aaprovadosPercent1720[i] / yearCounter[i]; |
||
106 | |||
107 | totalAlunos += aaprovados1013[i] * 2; |
||
108 | totalAlunos += aaprovados1416[i] * 2; |
||
109 | totalAlunos += aaprovados1720[i] * 2; |
||
110 | |||
111 | totalAlunos1013 += aaprovados1013[i] * 2; |
||
112 | totalAlunos1416 += aaprovados1416[i] * 2; |
||
113 | totalAlunos1720 += aaprovados1720[i] * 2; |
||
114 | |||
115 | |||
116 | /*Descomentar linhas seguintes para apenas aparecerem os anos com cadeires*/ |
||
117 | //if(yearCounter[i] != 0) |
||
118 | //{ |
||
119 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1013[i]), "Aprovados 10-13 " ,i + "º Ano " ); |
||
120 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1416[i]), "Aprovados 14-16 " ,i + "º Ano " ); |
||
121 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1720[i]), "Aprovados 17-20 " ,i + "º Ano " ); |
||
122 | //} |
||
123 | } |
||
124 | |||
125 | // Coluna Total do Gráfico |
||
126 | totalAlunosPercent1013 = totalAlunos1013/totalAlunos * 100.0; |
||
127 | totalAlunosPercent1416 = totalAlunos1416/totalAlunos * 100.0; |
||
128 | totalAlunosPercent1720 = totalAlunos1720/totalAlunos * 100.0; |
||
129 | |||
130 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1013), "Aprovados 10-13 " ,"Total"); |
||
131 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1416), "Aprovados 14-16 " ,"Total"); |
||
132 | data.addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1720), "Aprovados 17-20 " ,"Total"); |
||
133 | |||
134 | |||
1992 | grupo5 | 135 | 1.5.0/docs/api/java/lang/String.html">String tempName = BytesUtils.generateHexKey() + ".png"; |
136 | |||
137 | //Grafico Barras |
||
138 | JFreeChart chart = ChartFactory.createStackedBarChart(null, null,null,data, PlotOrientation.VERTICAL, true,true,false); |
||
139 | |||
1993 | grupo5 | 140 | chart.getLegend().setItemFont(new 1.5.0/docs/api/java/awt/Font.html">Font("Helvetica", 1.5.0/docs/api/java/awt/Font.html">Font.PLAIN, 20)); |
141 | |||
142 | RectangleInsets rectangleInsets = new RectangleInsets(0,0,30F,0); |
||
143 | chart.setPadding(rectangleInsets); |
||
144 | |||
1992 | grupo5 | 145 | chart.setBackgroundPaint(new 1.5.0/docs/api/java/awt/Color.html">Color(255, 231, 242)); |
146 | |||
147 | CategoryPlot plot = chart.getCategoryPlot(); |
||
148 | |||
149 | plot.setRangeGridlinePaint(1.5.0/docs/api/java/awt/Color.html">Color.black); |
||
150 | |||
151 | |||
152 | plot.getDomainAxis().setTickLabelFont(new 1.5.0/docs/api/java/awt/Font.html">Font("Helvetica", 1.5.0/docs/api/java/awt/Font.html">Font.PLAIN, 25)); |
||
153 | |||
154 | plot.getRenderer().setSeriesPaint(0, new 1.5.0/docs/api/java/awt/Color.html">Color(255, 171, 28)); |
||
155 | plot.getRenderer().setSeriesPaint(1, new 1.5.0/docs/api/java/awt/Color.html">Color(255, 253, 44)); |
||
156 | plot.getRenderer().setSeriesPaint(2, new 1.5.0/docs/api/java/awt/Color.html">Color(0, 255, 0)); |
||
157 | plot.setBackgroundPaint(new 1.5.0/docs/api/java/awt/Color.html">Color(249, 231, 236)); |
||
158 | |||
159 | 1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage image = chart.createBufferedImage( 300*3, 200*3); |
||
160 | 1.5.0/docs/api/java/lang/String.html">String pathGraficoTiposAlunos = Globals.TMP_DIR + java.io.1.5.0/docs/api/java/io/File.html">File.separator + tempName; |
||
161 | java.io.1.5.0/docs/api/java/io/File.html">File output = new java.io.1.5.0/docs/api/java/io/File.html">File(pathGraficoTiposAlunos); |
||
162 | 1.5.0/docs/api/javax/imageio/ImageIO.html">ImageIO.write(image, "png", new 1.5.0/docs/api/java/io/FileOutputStream.html">FileOutputStream(output)); |
||
163 | |||
164 | FileUploaded fileUploaded = new FileUploaded(); |
||
165 | fileUploaded.setTmpName(tempName); |
||
166 | fileUploaded.setTitle("Taxa global de aproveitamento"); |
||
167 | fileUploaded.setDescription("Curso: " + courseReportDocument.getCourseName() + " (" + courseReportDocument.getCourseCode()+ ") ano " + courseReportDocument.getYear()); |
||
168 | fileUploaded.setContentType(MimeTypeGuesser.getInstance().guessMimeType(output)); |
||
169 | fileUploaded.setFileSize(output.length()); |
||
170 | fileUploaded.setExtension("png"); |
||
171 | return fileUploaded; |
||
172 | } |
||
1830 | jmachado | 173 | } |