2020-11-02 14:01:27 +04:00

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;
}
}