Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1565 → Rev 1566

/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/utils/ChartBuilderUtil.java
4,26 → 4,32
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.xy.XYDifferenceRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.chart.title.Title;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.DefaultValueDataset;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.TextAnchor;
import org.jfree.util.ShapeUtilities;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.DocenteReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosAlunosReport;
import pt.estgp.estgweb.services.questionarios.pedagogico.QuestionariosReport;
 
import javax.imageio.ImageIO;
import java.awt.*;
33,6 → 39,7
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
 
/**
45,6 → 52,10
static Color RED_NOT_OK = new Color(255,200, 164);
static Color NEUTRAL_TOTAL = new Color(83,83,84);
 
static Color COLOR_SECTION_BLUE_DARK = new Color(82, 162,254);
static Color COLOR_SECTION_BLUE = new Color(178,230,254);
static Color COLOR_SECTION_GREEN = new Color(221,253,177);
 
public static Color COLOR_1 = new Color(253, 11, 0);
public static Color COLOR_2 = new Color(255, 190, 0);
public static Color COLOR_3 = new Color(255, 254, 0);
595,14 → 606,15
 
public static void main(String[] args) throws IOException
{
for(int i = 1; i < 100;i++)
createTimeSeries();
/*for(int i = 1; i < 90;i++)
{
createChartRingOneDimension(i, 100, true, true,true,"ring" + i);
}
}*/
 
}
 
public static void createChartRingOneDimension(double value, double max,boolean colorsPercent,boolean degrade,boolean putPercentInCenter, String pathTemplate) throws IOException {
public static String createChartRingOneDimension(double value, double max,boolean colorsPercent,boolean degrade,boolean putPercentInCenter, String pathTemplate) throws IOException {
 
DefaultPieDataset data = new DefaultPieDataset();
 
626,7 → 638,7
//render.setSeriesPaint(0,new Color(255,201,92));
plot.setBackgroundPaint(new Color(255, 255, 255));
plot.setOutlineVisible(false);
 
plot.setSectionDepth(0.12);
if(degrade)
{
double percent = (value/max);
665,8 → 677,153
 
 
BufferedImage image = chart.createBufferedImage( 300, 300);
String pathGraficoTiposAlunos = Globals.TMP_DIR + File.separator + pathTemplate + "graficoContribuicaoUnidades.png";
ImageIO.write(image, "png", new FileOutputStream(pathGraficoTiposAlunos));
String pathRing = Globals.TMP_DIR + File.separator + pathTemplate + "Ring.png";
ImageIO.write(image, "png", new FileOutputStream(pathRing));
return pathRing;
}
 
public static void createTimeSeries() throws IOException {
final XYDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
BufferedImage image = chart.createBufferedImage( 600, 200);
String pathRing = Globals.TMP_DIR + File.separator + "timeSeriesExample.png";
ImageIO.write(image, "png", new FileOutputStream(pathRing));
}
 
private static JFreeChart createChart(final XYDataset dataset) {
 
final JFreeChart chart = ChartFactory.createTimeSeriesChart(
"",
"",
"",
dataset,
true,
false,
false
);
 
chart.setBackgroundPaint(Color.white);//light gray
 
final XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.lightGray);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(false);
 
plot.setRenderer(0, new XYDifferenceRenderer(GREEN_OK,COLOR_1,true));
plot.setRenderer(1, new XYLineAndShapeRenderer(true,true));
XYDifferenceRenderer renderer = (XYDifferenceRenderer) plot.getRenderer();
 
renderer.setBaseItemLabelsVisible(true);
renderer.setItemLabelsVisible(true);
 
renderer.setSeriesPaint(0,COLOR_SECTION_BLUE_DARK);
renderer.setSeriesPaint(1,NEUTRAL_TOTAL);
renderer.setSeriesStroke(0,new BasicStroke(2.0f));
renderer.setSeriesStroke(1,new BasicStroke(2.0f));
 
 
DecimalFormat dfKey = new DecimalFormat("#.##");
 
StandardXYItemLabelGenerator labelGenerator = new StandardXYItemLabelGenerator("{2}", dfKey, dfKey);
 
/*
* {0} - label would be equal to Series expression,
* {1} - label would be equal to Category expression,
* {2} - label would be equal to Value expression
*
*/
 
 
 
renderer.setBaseItemLabelsVisible(true);
 
renderer.setBaseItemLabelGenerator(labelGenerator);
 
renderer.setBaseItemLabelFont(new java.awt.Font("SansSerif", java.awt.Font.PLAIN, 10));
 
/*
renderer.setSeriesPositiveItemLabelPosition(0,
new ItemLabelPosition(ItemLabelAnchor.OUTSIDE3,
TextAnchor.BOTTOM_LEFT,
TextAnchor.BOTTOM_LEFT,
Math.PI));*/
renderer.setSeriesShape(0, ShapeUtilities.createDiamond(1F));
 
//plot.setRenderer(1,new XYLineAndShapeRenderer());
 
/*final XYItemRenderer xyitemrenderer = plot.getRenderer();
if (xyitemrenderer instanceof XYLineAndShapeRenderer) {
final XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) xyitemrenderer;
renderer.setBaseShapesFilled(true);
renderer.setBaseShapesVisible(true);
renderer.setShapesVisible( true );
renderer.setDrawOutlines( true );
 
//sets the joint level size means the dot size which join two points on a graph 2f,3f
Stroke stroke = new BasicStroke(
3f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
renderer.setBaseOutlineStroke(stroke);
 
}*/
 
 
final DateAxis xaxis = (DateAxis) plot.getDomainAxis();
//Change domain axis lable by 180/4=45 degree
//xaxis.setLabelAngle(Math.PI / 4.0);
 
//Sets the Tick Labels means domain value labels by 90 degree
xaxis.setVerticalTickLabels(true);
 
 
//Try to play with it. It will work only in case of horizontal tick mark
 
xaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);
 
//set date format
xaxis.setDateFormatOverride(new SimpleDateFormat("MM-yy"));
 
final NumberAxis yaxis = (NumberAxis) plot.getRangeAxis();
yaxis.setTickLabelsVisible(true);
yaxis.setVisible(true);
yaxis.setRange(0,5);
yaxis.setUpperMargin(0.15);
//To set range values integer only. Default are float
//yaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
 
return chart;
 
}
 
private static XYDataset createDataset() {
 
final TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.setDomainIsPointsInTime(true);
 
final TimeSeries s1 = new TimeSeries("Docente", Second.class);
s1.add(new Second(0, 0, 0, 1, 2, 2012), 4.6);
//s1.add(new Second(0, 0, 0, 1, 5, 2012), 3.5);
s1.add(new Second(0, 0, 0, 3, 8, 2012), 3.4);
 
final TimeSeries s2 = new TimeSeries("Curso", Second.class);
s2.add(new Second(0, 0, 0, 1, 2, 2012), 4.2);
s2.add(new Second(0, 0, 0, 2, 5, 2012), 4.1);
s2.add(new Second(0, 0, 0, 3, 8, 2012), 4.2);
 
/*final TimeSeries s3 = new TimeSeries("Series 2", Second.class);
s3.add(new Second(0, 10, 1, 7, 7, 2012), 52);
s3.add(new Second(0, 20, 12, 7, 7, 2012), 66);
s3.add(new Second(0, 35, 9, 7, 7, 2012), 79);
*/
dataset.addSeries(s1);
dataset.addSeries(s2);
// dataset.addSeries(s3);
 
return dataset;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/OlapGenerationProcessor.java
1,6 → 1,7
package pt.estgp.estgweb.services.questionarios.pedagogico;
 
import jomm.dao.impl.AbstractDao;
import jomm.utils.MyCalendar;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
10,6 → 11,7
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.DatesUtils;
import pt.estgp.estgweb.utils.DistritosUtils;
 
import java.util.*;
549,6 → 551,29
olapEntityQuestionario.setQuestionario(q);
olapEntityQuestionario.setAno(q.getYear());
olapEntityQuestionario.setSemestre(q.getSemestre());
int firstYear = DatesUtils.getFirstFromImportYear(q.getYear());
int secondYear = DatesUtils.getSecondFromImportYear(q.getYear());
 
if(q.getSemestre().equals("T1"))
{
olapEntityQuestionario.setGeneratedTime(new MyCalendar(firstYear,11,1).getTime());
}
else if(q.getSemestre().equals("S1") || q.getSemestre().equals("T2"))
{
olapEntityQuestionario.setGeneratedTime(new MyCalendar(secondYear,2,1).getTime());
}
else if(q.getSemestre().equals("T3"))
{
olapEntityQuestionario.setGeneratedTime(new MyCalendar(secondYear,5,1).getTime());
}
else if(q.getSemestre().equals("S2") || q.getSemestre().equals("T4") || q.getSemestre().equals("A"))
{
olapEntityQuestionario.setGeneratedTime(new MyCalendar(secondYear,8,1).getTime());
}
else
{
logger.error("AVISO, DATA Não tem semestre correcto");
}
return olapEntityQuestionario;
}
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/DocenteReport.java
310,7 → 310,7
Collections.sort(perguntas, new Comparator<PerguntaUnidadeStatAux>() {
@Override
public int compare(PerguntaUnidadeStatAux o1, PerguntaUnidadeStatAux o2) {
double diff = o1.pergunta.getMediaEntidadeEmAvaliacao() - o2.pergunta.getMediaEntidadeEmAvaliacao();
double diff = o2.pergunta.getMediaEntidadeEmAvaliacao() - o1.pergunta.getMediaEntidadeEmAvaliacao();
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;
413,7 → 413,7
Collections.sort(perguntas, new Comparator<PerguntaStats>() {
@Override
public int compare(PerguntaStats o1, PerguntaStats o2) {
double diff = o1.getMediaEntidadeEmAvaliacao() - o2.getMediaEntidadeEmAvaliacao();
double diff = o2.getMediaEntidadeEmAvaliacao() - o1.getMediaEntidadeEmAvaliacao();
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;
462,7 → 462,7
Collections.sort(unidadeStatses, new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
double diff = o1.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia() - o2.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia();
double diff = o2.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia() - o1.getUnidadeStatsGrupoUnidade().getMediasGrupo().getAvaliacaoMedia();
if (diff < 0)
return -1;
if (diff > 0)
478,7 → 478,7
Collections.sort(unidadeStatses, new Comparator<UnidadeStats>() {
@Override
public int compare(UnidadeStats o1, UnidadeStats o2) {
double diff = o1.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia() - o2.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia();
double diff = o2.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia() - o1.getUnidadeStatsGrupoDocente().getMediasGrupo().getAvaliacaoMedia();
if (diff < 0)
return -1;
if (diff > 0)
514,7 → 514,7
Collections.sort(participacoes, new Comparator<ParticipacaoUnidade>() {
@Override
public int compare(ParticipacaoUnidade o1, ParticipacaoUnidade o2) {
return o1.getParticiparamPercentagem() - o2.getParticiparamPercentagem();
return o2.getParticiparamPercentagem() - o1.getParticiparamPercentagem();
}
});
return participacoes;
593,7 → 593,7
Collections.sort(perguntas, new Comparator<PerguntaUnidadeStatAux>() {
@Override
public int compare(PerguntaUnidadeStatAux o1, PerguntaUnidadeStatAux o2) {
double diff = o1.difMedia - o2.difMedia;
double diff = o2.difMedia - o1.difMedia;
if (diff < 0) return -1;
if (diff > 0) return 1;
return 0;