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