diff --git a/src/main/java/ru/ulstu/TimeSeriesUtils.java b/src/main/java/ru/ulstu/TimeSeriesUtils.java index d79e422..901179c 100644 --- a/src/main/java/ru/ulstu/TimeSeriesUtils.java +++ b/src/main/java/ru/ulstu/TimeSeriesUtils.java @@ -22,9 +22,11 @@ public class TimeSeriesUtils { } public static TimeSeries fillDates(TimeSeries timeSeries, long milliseconds) { - timeSeries.getLastValue().setDate(LocalDateTime.now()); - for (int i = timeSeries.getLength() - 2; i >= 0; i--) { - timeSeries.getValues().get(i).setDate(timeSeries.getValues().get(i + 1).getDate().minus(milliseconds, ChronoUnit.MILLIS)); + if (!timeSeries.isEmpty()) { + timeSeries.getLastValue().setDate(LocalDateTime.now()); + for (int i = timeSeries.getLength() - 2; i >= 0; i--) { + timeSeries.getValues().get(i).setDate(timeSeries.getValues().get(i + 1).getDate().minus(milliseconds, ChronoUnit.MILLIS)); + } } return timeSeries; } diff --git a/src/main/java/ru/ulstu/pages/IndexView.java b/src/main/java/ru/ulstu/pages/IndexView.java index 9e288c2..4ce2849 100644 --- a/src/main/java/ru/ulstu/pages/IndexView.java +++ b/src/main/java/ru/ulstu/pages/IndexView.java @@ -1,23 +1,33 @@ package ru.ulstu.pages; -import org.primefaces.model.chart.Axis; 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 LineChartModel lineModel1; + private final static Logger LOG = LoggerFactory.getLogger(IndexView.class); + private LineChartModel model; + private String timeSeriesString = "1,2,3"; - public LineChartModel getLineModel1() { - return lineModel1; - } + @Autowired + private TimeSeriesService timeSeriesService; @PostConstruct public void init() { @@ -30,44 +40,57 @@ public class IndexView implements Serializable { LineChartSeries series1 = new LineChartSeries(); series1.setLabel("Временной ряд"); - series1.set(1, 2); - series1.set(2, 1); - series1.set(3, 3); - series1.set(4, 6); - series1.set(5, 8); + 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()); + } - series2.set(1, 6); - series2.set(2, 3); - series2.set(3, 2); - series2.set(4, 7); - series2.set(5, 9); LineChartSeries series3 = new LineChartSeries(); series3.setLabel("Прогноз"); - - series3.set(1, 6); - series3.set(2, 3); - series3.set(3, 2); - series3.set(4, 7); - series3.set(6, 9); - series3.set(7, 9); - + 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() { - lineModel1 = initLinearModel(); - lineModel1.setTitle("Сглаживание временного ряда"); - lineModel1.setLegendPosition("e"); - Axis yAxis = lineModel1.getAxis(AxisType.Y); - yAxis.setMin(0); - yAxis.setMax(10); + model = initLinearModel(); + model.setTitle("Сглаживание временного ряда"); + model.setLegendPosition("d"); + model.setLegendPlacement(LegendPlacement.OUTSIDE); + 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; } } diff --git a/src/main/resources/META-INF/resources/index.xhtml b/src/main/resources/META-INF/resources/index.xhtml index 2e74ffd..371ddea 100644 --- a/src/main/resources/META-INF/resources/index.xhtml +++ b/src/main/resources/META-INF/resources/index.xhtml @@ -2,18 +2,28 @@ + xmlns:p="http://primefaces.org/ui" + xmlns:h="http://java.sun.com/jsf/html"> -
-
- + +
+
+ + + + + +
-
- +
+
+ +
-
+
\ No newline at end of file