package pt.estgp.estgweb.services.courses.coursereport.documentmodel.learningresults.components;
//import pt.estgp.estgweb.utils.documentBuilder.AutoImageWraperComponent;
import jomm.utils.BytesUtils;
import jomm.utils.MimeTypeGuesser;
import org.apache.log4j.Category;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
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.text.DecimalFormat;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
/**
* Created by jorgemachado on 31/10/17.
*/
public class LearningResultsChartSem
extends ImageComponent
{
1.5.0/docs/api/java/lang/String.html">String semesterCode
;
public LearningResultsChartSem
() {
}
public LearningResultsChartSem
(1.5.0/docs/api/java/lang/String.html">String semesterCode
) {
this.
semesterCode = semesterCode
;
}
public 1.5.0/docs/api/java/lang/String.html">String getSemesterCode
() {
return semesterCode
;
}
public void setSemesterCode
(1.5.0/docs/api/java/lang/String.html">String semesterCode
) {
this.
semesterCode = semesterCode
;
}
public FileUploaded generateChart2tmp
(UnitsLearningResultsTable results,CourseReportDocument courseReportDocument
) throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
5+0%2Fdocs%2Fapi+List">List <UnitsLearningResultYear
> years = results.
getYears();
List
<UnitsLearningResultSemester
> semester = years.
get(0
).
semesters;
List
<UnitsLearningResultUc
> uc
;
DefaultCategoryDataset data =
new DefaultCategoryDataset
();
// Ano que não consta no Plano
uc = semester.
get(0
).
ucs;
for(int k =
0; k
< uc.
size(); k++
)
{
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getAprovadosPercent()),
"Aprovados " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getSemElementosPercent()),
"SemElementos " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getReprovadosPercent()),
"Reprovados " , uc.
get(k
).
getName());
}
uc = semester.
get(1
).
ucs;
for(int k =
0; k
< uc.
size(); k++
)
{
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getAprovadosPercent()),
"Aprovados " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getSemElementosPercent()),
"SemElementos " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getReprovadosPercent()),
"Reprovados " , uc.
get(k
).
getName());
}
for(int i =
1; i
< 6; i++
) //Years(between 1 and 5)
{
for(int j =
0; j
< years.
size(); j++
) //Years existent on array (between 0 and X)
{
if(results.
years.
get(j
).
getAno() == i
)
{
semester = years.
get(j
).
semesters;
for(int h =
0; h
< semester.
size(); h++
) //Semesters (between 1 and 2)
{
uc = semester.
get(h
).
ucs;
for(int k =
0; k
< uc.
size(); k++
)
{
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getAprovadosPercent()),
"Aprovados " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getSemElementosPercent()),
"SemElementos " , uc.
get(k
).
getName());
data.
setValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
get(k
).
getReprovadosPercent()),
"Reprovados " , uc.
get(k
).
getName());
}
}
}
}
}
1.5.0/docs/api/java/lang/String.html">String tempName = BytesUtils.
generateHexKey() +
".png";
JFreeChart chart = ChartFactory.
createStackedBarChart(null,
null,
null,data, PlotOrientation.
HORIZONTAL,
true,
true,
false);
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(0, 255, 0
));
plot.
getRenderer().
setSeriesPaint(1,
new 1.5.0/docs/api/java/awt/Color.html">Color(200, 200, 200
));
plot.
getRenderer().
setSeriesPaint(2,
new 1.5.0/docs/api/java/awt/Color.html">Color(255, 0, 0
));
plot.
setBackgroundPaint(new 1.5.0/docs/api/java/awt/Color.html">Color(249, 231, 236
));
plot.
getRenderer().
setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator
("{2}",
new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.#'%'")));
plot.
getRenderer().
setBaseItemLabelsVisible(true);
plot.
getRenderer().
setBaseItemLabelFont(new 1.5.0/docs/api/java/awt/Font.html">Font("Helvetica",
1.5.0/docs/api/java/awt/Font.html">Font.
PLAIN,35
));
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,25
)); //Letra Legenda
1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage image = chart.
createBufferedImage( 300
*4, 200
*4
);
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
;
}
}