package pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components;
import jomm.utils.BytesUtils;
import jomm.utils.MimeTypeGuesser;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleInsets;
import pt.estgp.estgweb.services.courses.coursereport.documentmodel.CourseReportDocument;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.utils.documentBuilder.ImageComponent;
import pt.estgp.estgweb.web.controllers.utils.FileUploaded;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Created by jorgemachado on 31/10/17.
*/
public class GlobalLearningResultsChartYearImg
extends ImageComponent
{
public FileUploaded generateChart2tmp
(UnitsLearningResultsTable results,CourseReportDocument courseReportDocument
) throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
DefaultCategoryDataset data =
new DefaultCategoryDataset
();
// Ano que não consta no Plano
UnitsLearningResult unitsLearningResult = results.
years.
get(0
);
double aprovadosPercent1013
;
double aprovadosPercent1416
;
double aprovadosPercent1720
;
aprovadosPercent1013 =
((int)(unitsLearningResult.
getAprovados1013Percent()*100.0
))/
100.0;
aprovadosPercent1416 =
((int)(unitsLearningResult.
getAprovados1416Percent()*100.0
))/
100.0;
aprovadosPercent1720 =
((int)(unitsLearningResult.
getAprovados1720Percent()*100.0
))/
100.0;
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1013
),
"Aprovados 10-13 " ,
(results.
years.
get(0).
getAno()) +
" Ano " );
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1416
),
"Aprovados 14-16 " ,
(results.
years.
get(0).
getAno()) +
" Ano " );
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aprovadosPercent1720
),
"Aprovados 17-20 " ,
(results.
years.
get(0).
getAno()) +
" Ano " );
float aaprovados1013
[] =
new float[10
];
float aaprovados1416
[]=
new float[10
];
float aaprovados1720
[]=
new float[10
];
double aaprovadosPercent1013
[]=
new double[10
];
double aaprovadosPercent1416
[]=
new double[10
];
double aaprovadosPercent1720
[]=
new double[10
];
int yearCounter
[] =
new int[10
]; //Total de anos existentes na tabela
float totalAlunos =
0;
float totalAlunos1013 =
0;
float totalAlunos1416 =
0;
float totalAlunos1720 =
0;
double totalAlunosPercent1013
;
double totalAlunosPercent1416
;
double totalAlunosPercent1720
;
// Inicialização de Valores
for(int i =
1; i
< 6; i++
)
{
aaprovados1013
[i
] =
0;
aaprovados1416
[i
] =
0;
aaprovados1720
[i
] =
0;
aaprovadosPercent1013
[i
] =
0;
aaprovadosPercent1416
[i
] =
0;
aaprovadosPercent1720
[i
] =
0;
yearCounter
[i
] =
0;
}
// Extrair os dados recebidos
for(int i =
1; i
< 6; i++
) //Years(between 1 and 5)
{
for (int j =
0; j
< results.
years.
size(); j++
) //Years existent on array (between 0 and X)
{
UnitsLearningResult ola = results.
years.
get(j
);
if (results.
years.
get(j
).
getAno() == i
)
{
aaprovados1013
[i
] += ola.
getAprovados1013();
aaprovados1416
[i
] += ola.
getAprovados1416();
aaprovados1720
[i
] += ola.
getAprovados1720();
aaprovadosPercent1013
[i
] +=
((int)(ola.
getAprovados1013Percent()*100.0
))/
100.0;
aaprovadosPercent1416
[i
] +=
((int)(ola.
getAprovados1416Percent()*100.0
))/
100.0;
aaprovadosPercent1720
[i
] +=
((int)(ola.
getAprovados1720Percent()*100.0
))/
100.0;
yearCounter
[i
] +=
1;
}
}
}
// Adicionar os dados ao gráfico
for (int i =
1; i
<6; i++
)
{
aaprovadosPercent1013
[i
] = aaprovadosPercent1013
[i
] / yearCounter
[i
];
aaprovadosPercent1416
[i
] = aaprovadosPercent1416
[i
] / yearCounter
[i
];
aaprovadosPercent1720
[i
] = aaprovadosPercent1720
[i
] / yearCounter
[i
];
totalAlunos += aaprovados1013
[i
] * 2;
totalAlunos += aaprovados1416
[i
] * 2;
totalAlunos += aaprovados1720
[i
] * 2;
totalAlunos1013 += aaprovados1013
[i
] * 2;
totalAlunos1416 += aaprovados1416
[i
] * 2;
totalAlunos1720 += aaprovados1720
[i
] * 2;
/*Descomentar linhas seguintes para apenas aparecerem os anos com cadeires*/
//if(yearCounter[i] != 0)
//{
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1013
[i
]),
"Aprovados 10-13 " ,i +
"º Ano " );
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1416
[i
]),
"Aprovados 14-16 " ,i +
"º Ano " );
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(aaprovadosPercent1720
[i
]),
"Aprovados 17-20 " ,i +
"º Ano " );
//}
}
// Coluna Total do Gráfico
totalAlunosPercent1013 = totalAlunos1013/totalAlunos
* 100.0;
totalAlunosPercent1416 = totalAlunos1416/totalAlunos
* 100.0;
totalAlunosPercent1720 = totalAlunos1720/totalAlunos
* 100.0;
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1013
),
"Aprovados 10-13 " ,
"Total");
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1416
),
"Aprovados 14-16 " ,
"Total");
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(totalAlunosPercent1720
),
"Aprovados 17-20 " ,
"Total");
1.5.0/docs/api/java/lang/String.html">String tempName = BytesUtils.
generateHexKey() +
".png";
//Grafico Barras
JFreeChart chart = ChartFactory.
createStackedBarChart(null,
null,
null,data, PlotOrientation.
VERTICAL,
true,
true,
false);
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
));
RectangleInsets rectangleInsets =
new RectangleInsets
(0,0,30F,0
);
chart.
setPadding(rectangleInsets
);
chart.
setBackgroundPaint(new 1.5.0/docs/api/java/awt/Color.html">Color(255, 231, 242
));
CategoryPlot plot = chart.
getCategoryPlot();
plot.
setRangeGridlinePaint(1.5.0/docs/api/java/awt/Color.html">Color.
black);
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
));
plot.
getRenderer().
setSeriesPaint(0,
new 1.5.0/docs/api/java/awt/Color.html">Color(255, 171, 28
));
plot.
getRenderer().
setSeriesPaint(1,
new 1.5.0/docs/api/java/awt/Color.html">Color(255, 253, 44
));
plot.
getRenderer().
setSeriesPaint(2,
new 1.5.0/docs/api/java/awt/Color.html">Color(0, 255, 0
));
plot.
setBackgroundPaint(new 1.5.0/docs/api/java/awt/Color.html">Color(249, 231, 236
));
1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage image = chart.
createBufferedImage( 300
*3, 200
*3
);
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
;
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
);
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
));
FileUploaded fileUploaded =
new FileUploaded
();
fileUploaded.
setTmpName(tempName
);
fileUploaded.
setTitle("Taxa global de aproveitamento");
fileUploaded.
setDescription("Curso: " + courseReportDocument.
getCourseName() +
" (" + courseReportDocument.
getCourseCode()+
") ano " + courseReportDocument.
getYear());
fileUploaded.
setContentType(MimeTypeGuesser.
getInstance().
guessMimeType(output
));
fileUploaded.
setFileSize(output.
length());
fileUploaded.
setExtension("png");
return fileUploaded
;
}
}