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.block.BlockBorder;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.chart.title.LegendTitle;
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.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
* Created by danielmarmelo on 13/12/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
;
setInternalCode
(semesterCode
);
setWidth
(300
);
setHeight
(400
);
}
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 {
List
<UnitsLearningResultYear
> years = results.
getYears();
1.5.0/docs/api/java/lang/String.html">String tempName = BytesUtils.
generateHexKey() +
".png";
DefaultCategoryDataset data =
new DefaultCategoryDataset
();
for (UnitsLearningResultYear year : years
) {
for (UnitsLearningResultSemester semester : year.
getSemesters()) {
if (semester.
getSemestre().
equals(getSemesterCode
())) {
for (UnitsLearningResultUc uc : semester.
getUcs()) {
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
getSemElementosPercent()),
"Sem elementos", uc.
getName());
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
getReprovadosPercent()),
"Reprovados", uc.
getName());
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(uc.
getAprovadosPercent()),
"Aprovados", uc.
getName());
}
break;
}
}
}
JFreeChart chart = ChartFactory.
createStackedBarChart(
null,
null,
null,
data,
PlotOrientation.
HORIZONTAL,
true,
false,
false);
chart.
setBackgroundPaint(1.5.0/docs/api/java/awt/Color.html">Color.
WHITE);
CategoryPlot plot =
(CategoryPlot
) chart.
getPlot();
plot.
setBackgroundPaint(1.5.0/docs/api/java/awt/Color.html">Color.
WHITE);
plot.
setRangeGridlinePaint(1.5.0/docs/api/java/awt/Color.html">Color.
GRAY);
plot.
setRangeGridlinesVisible(true);
//plot.setRangeGridlineStroke(new BasicStroke(1.0f));
RectangleInsets chartRectangle =
new RectangleInsets
(0,0,30F,0
);
chart.
setPadding(chartRectangle
);
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.
getRangeAxis().
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
));
StackedBarRenderer renderer =
(StackedBarRenderer
) plot.
getRenderer();
// Remover gradiente das barras
renderer.
setBarPainter(new StandardBarPainter
());
renderer.
setSeriesPaint(0,
new 1.5.0/docs/api/java/awt/Color.html">Color(237,127,32
));
renderer.
setSeriesPaint(1,
new 1.5.0/docs/api/java/awt/Color.html">Color(255,198,0
));
renderer.
setSeriesPaint(2,
new 1.5.0/docs/api/java/awt/Color.html">Color(122,173,38
));
renderer.
setMaximumBarWidth(0.1
);
renderer.
setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator
("{2}",
new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.##'%'")));
renderer.
setBaseItemLabelsVisible(true);
renderer.
setBaseItemLabelFont(new 1.5.0/docs/api/java/awt/Font.html">Font("Helvetica",
1.5.0/docs/api/java/awt/Font.html">Font.
PLAIN,25
));
LegendTitle legend = chart.
getLegend();
legend.
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
));
legend.
setFrame(BlockBorder.
NONE);
1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage image = chart.
createBufferedImage(300
*4, 400
*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
;
}
public static void main
(1.5.0/docs/api/java/lang/String.html">String[] args
) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
1.5.0/docs/api/java/lang/String.html">String tempName =
"test.png";
DefaultCategoryDataset data =
new DefaultCategoryDataset
();
for (int i =
0; i
< 16; i++
) {
int s =
new 1.5.0/docs/api/java/util/Random.html">Random().
nextInt(75
);
int r =
new 1.5.0/docs/api/java/util/Random.html">Random().
nextInt((101 - s
));
int a =
(100 - s - r
);
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(s
),
"Sem elementos",
"Engenharia de Software " + i
);
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(r
),
"Reprovados",
"Engenharia de Software " + i
);
data.
addValue(new 1.5.0/docs/api/java/lang/Double.html">Double(a
),
"Aprovados",
"Engenharia de Software " + i
);
}
JFreeChart chart = ChartFactory.
createStackedBarChart(
null,
null,
null,
data,
PlotOrientation.
HORIZONTAL,
true,
false,
false);
chart.
setBackgroundPaint(1.5.0/docs/api/java/awt/Color.html">Color.
WHITE);
CategoryPlot plot =
(CategoryPlot
) chart.
getPlot();
plot.
setBackgroundPaint(1.5.0/docs/api/java/awt/Color.html">Color.
WHITE);
plot.
setRangeGridlinePaint(1.5.0/docs/api/java/awt/Color.html">Color.
GRAY);
plot.
setRangeGridlinesVisible(true);
//plot.setRangeGridlineStroke(new BasicStroke(1.0f));
RectangleInsets chartRectangle =
new RectangleInsets
(0,0,30F,0
);
chart.
setPadding(chartRectangle
);
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.
getRangeAxis().
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
));
StackedBarRenderer renderer =
(StackedBarRenderer
) plot.
getRenderer();
// Remover gradiente das barras
renderer.
setBarPainter(new StandardBarPainter
());
renderer.
setSeriesPaint(0,
new 1.5.0/docs/api/java/awt/Color.html">Color(237,127,32
));
renderer.
setSeriesPaint(1,
new 1.5.0/docs/api/java/awt/Color.html">Color(255,198,0
));
renderer.
setSeriesPaint(2,
new 1.5.0/docs/api/java/awt/Color.html">Color(122,173,38
));
renderer.
setMaximumBarWidth(0.1
);
renderer.
setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator
("{2}",
new 1.5.0/docs/api/java/text/DecimalFormat.html">DecimalFormat("#.##'%'")));
renderer.
setBaseItemLabelsVisible(true);
renderer.
setBaseItemLabelFont(new 1.5.0/docs/api/java/awt/Font.html">Font("Helvetica",
1.5.0/docs/api/java/awt/Font.html">Font.
PLAIN,25
));
LegendTitle legend = chart.
getLegend();
legend.
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
));
legend.
setFrame(BlockBorder.
NONE);
1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage image = chart.
createBufferedImage( 300
*4, 400
*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
));
}
}