Subversion Repositories bacoAlunos

Rev

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
}