97 lines
3.2 KiB
Java
97 lines
3.2 KiB
Java
package ru.ulstu.pages;
|
|
|
|
import org.primefaces.model.chart.AxisType;
|
|
import org.primefaces.model.chart.DateAxis;
|
|
import org.primefaces.model.chart.LegendPlacement;
|
|
import org.primefaces.model.chart.LineChartModel;
|
|
import org.primefaces.model.chart.LineChartSeries;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import ru.ulstu.models.TimeSeries;
|
|
import ru.ulstu.models.TimeSeriesValue;
|
|
import ru.ulstu.models.exceptions.ModelingException;
|
|
import ru.ulstu.services.TimeSeriesService;
|
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.faces.view.ViewScoped;
|
|
import javax.inject.Named;
|
|
import java.io.Serializable;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
@Named
|
|
@ViewScoped
|
|
public class IndexView implements Serializable {
|
|
private final static Logger LOG = LoggerFactory.getLogger(IndexView.class);
|
|
private LineChartModel model;
|
|
private String timeSeriesString = "1,2,3";
|
|
|
|
@Autowired
|
|
private TimeSeriesService timeSeriesService;
|
|
|
|
@PostConstruct
|
|
public void init() {
|
|
createChart();
|
|
}
|
|
|
|
private LineChartModel initLinearModel() {
|
|
LineChartModel model = new LineChartModel();
|
|
|
|
LineChartSeries series1 = new LineChartSeries();
|
|
series1.setLabel("Временной ряд");
|
|
|
|
TimeSeries timeSeries = timeSeriesService.getTimeSeriesFromString(timeSeriesString);
|
|
for (TimeSeriesValue value : timeSeries.getValues()) {
|
|
series1.set(DateTimeFormatter.ISO_LOCAL_DATE.format(value.getDate()), value.getValue());
|
|
}
|
|
|
|
LineChartSeries series2 = new LineChartSeries();
|
|
series2.setLabel("Сглаженный ряд");
|
|
try {
|
|
for (TimeSeriesValue value : timeSeriesService.getForecast(timeSeries, 10).getModel().getModelTimeSeries().getValues()) {
|
|
series2.set(DateTimeFormatter.ISO_LOCAL_DATE.format(value.getDate()), value.getValue());
|
|
}
|
|
} catch (ModelingException ex) {
|
|
LOG.warn(ex.getMessage());
|
|
}
|
|
|
|
|
|
LineChartSeries series3 = new LineChartSeries();
|
|
series3.setLabel("Прогноз");
|
|
try {
|
|
for (TimeSeriesValue value : timeSeriesService.getForecast(timeSeries, 10).getForecastTimeSeries().getValues()) {
|
|
series3.set(DateTimeFormatter.ISO_LOCAL_DATE.format(value.getDate()), value.getValue());
|
|
}
|
|
} catch (ModelingException ex) {
|
|
LOG.warn(ex.getMessage());
|
|
}
|
|
model.addSeries(series1);
|
|
model.addSeries(series2);
|
|
model.addSeries(series3);
|
|
return model;
|
|
}
|
|
|
|
public void createChart() {
|
|
model = initLinearModel();
|
|
model.setTitle("Сглаживание временного ряда");
|
|
model.setLegendPosition("d");
|
|
model.setLegendPlacement(LegendPlacement.OUTSIDEGRID);
|
|
DateAxis xAxis = new DateAxis("Time");
|
|
xAxis.setTickFormat("%#d %b %Y");
|
|
model.getAxes().put(AxisType.X, xAxis);
|
|
}
|
|
|
|
public LineChartModel getModel() {
|
|
return model;
|
|
}
|
|
|
|
public String getTimeSeriesString() {
|
|
createChart();
|
|
return timeSeriesString;
|
|
}
|
|
|
|
public void setTimeSeriesString(String timeSeriesString) {
|
|
this.timeSeriesString = timeSeriesString;
|
|
}
|
|
}
|