package com.it.loratek.sski.controller;
import java.util.ArrayList;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import com.it.loratek.sski.parser.Skier;
import com.it.loratek.sski.parser.TimeToken;
public class DataSetCreator {
public DataSetCreator() {
}
private static final String t1 = "0 - 5'";
private static final String t2 = "5' - 10'";
private static final String t3 = "10' - 15'";
private static final String t4 = "15' - 20'";
private static final String t5 = "20' - 25'";
private static final String t6 = "25' - 30'";
private static final String t7 = "30' - 45'";
private static final String t8 = "35' - 40'";
private static final String t9 = "40' - 45'";
private static final String t10 = "45' - 50'";
private static final String t11 = "50' - 55'";
private static final String t12 = "55' - 60'";
private static final String t13 = "60' - 65'";
private static final String t14 = "65' - 70'";
private static final String t15 = "75' - 80'";
private static final String at1 = "0 - 10'";
private static final String at2 = "10' - 20'";
private static final String at3 = "20' - 30'";
private static final String at4 = "30' - 40'";
private static final String at5 = "40' - 50'";
private static final String at6 = "50' - 60'";
private static final String at7 = "60' - 70'";
private static final String at8 = "80' - 90'";
private final static String time1 = "0 - 10";
private final static String time2 = "10 - 20";
private final static String time3 = "20 - 30";
private final static String time4 = "30 - 40";
private final static String time5 = "40 - 50";
private final static String time6 = "50 - 60";
private final static String time7 = "60 - 70";
private final static String time8 = "70 - 80";
private static final String[] t_5 = { t1, t2, t3, t4, t5, t6, t7, t8, t9,
t10, t11, t12, t13, t14, t15 };
private static final String[] t_10 = { at1, at2, at3, at4, at5, at6, at7,
at7, at8 };
private static final String[] perc_time = { time1, time2, time3, time4,
time5, time6, time7, time8 };
private int[][] values;
private int[] stopped;
public DefaultCategoryDataset createDirectionDataset(boolean is10,
int[] stopped, int[][] arr, String[] label, String direzione) {
values = arr;
this.stopped = stopped;
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
String[] t = null;
if (is10)
t = t_10;
else
t = t_5;
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {
dataset.addValue(values[i][j], direzione + label[i], t[j]);
}
}
for (int j = 0; j < stopped.length; j++) {
dataset.addValue(stopped[j], "sosta in pista", t[j]);
}
return dataset;
}
public XYDataset createDensityDataset(ArrayList<TimeToken> list) {
XYSeries series = new XYSeries("Data");
int x = 5;
for (TimeToken q : list) {
series.add(x, q.getList().size());
x += 5;
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
public DefaultCategoryDataset createSpeedPercentDataset(boolean is10,
ArrayList<Skier> list) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
double [] speeds = new double[6];
int count = 6;
for(int z=5;z>=0;z--){
speeds[z] = computePercent(list, 10*count);
dataset.addValue(speeds[z], "Intervalli", perc_time[z]);
count--;
}
double[][] d = new double[1][];
d[0] = new double[speeds.length];
for (int i = 0; i < speeds.length; i++) {
d[0][i] = speeds[i];
}
return dataset;
}
public DefaultCategoryDataset createMaxSpeedPercentDataset(boolean is10,
ArrayList<Skier> list) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
double [] speeds = new double[6];
int count = 6;
for(int z=5;z>=0;z--){
speeds[z] = computeMaxPercent(list, count);
dataset.addValue(speeds[z], "Intervalli", perc_time[z]);
count--;
}
double[][] d = new double[1][];
d[0] = new double[speeds.length];
for (int i = 0; i < speeds.length; i++) {
d[0][i] = speeds[i];
}
return dataset;
}
private double computePercent(ArrayList<Skier> list, int perc) {
int count = 0;
for(int i=0;i<list.size();i++){
if(list.get(i).getMedSpeed() < perc && list.get(i).getMedSpeed() > (perc -10))
count++;
}
return ((double)((double)count/(double)list.size()))*100;
}
private double computeMaxPercent(ArrayList<Skier> list, int speed) {
int count = 0;
for(int i=0;i<list.size();i++){
int max = 0;
for(int j=0;j< list.get(i).getSpeed().size();j++){
double temp = Double.parseDouble(list.get(i).getSpeed().get(j));
if(temp > max){
max = (int)temp;
}
}
if(max < speed*10 && max > (speed*10)-10)
count++;
}
return ((double)((double)count/(double)list.size()))*100;
}
private DefaultCategoryDataset createDirectionCategoryDataset(boolean is10) {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
String[] t = null;
if (is10)
t = t_10;
else
t = t_5;
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {
dataset.addValue(values[i][j], "verso " + i, t[j]);
}
}
for (int j = 0; j < values[0].length; j++) {
dataset.addValue(stopped[j], "sosta in pista", t[j]);
}
return dataset;
}
}