Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.88 KB | None | 0 0
  1. package currency_markets;
  2.  
  3. import javafx.collections.FXCollections;
  4. import javafx.collections.ObservableList;
  5. import javafx.fxml.FXML;
  6. import javafx.geometry.Point2D;
  7. import javafx.scene.chart.*;
  8. import javafx.scene.control.Label;
  9. import javafx.scene.control.Spinner;
  10. import javafx.scene.control.SpinnerValueFactory;
  11. import javafx.scene.input.MouseEvent;
  12.  
  13. import java.math.BigDecimal;
  14. import java.util.ArrayList;
  15. import java.util.Arrays;
  16. import java.util.List;
  17.  
  18. public class MainWindowController{
  19. /*
  20. * Dependency injection
  21. * makes sure that all injections are done
  22. */
  23. @FXML
  24. private Label labelSummary;
  25.  
  26. @FXML
  27. private LineChart<String, Double> lineChart, lineChartFractalPreview;
  28.  
  29. @FXML
  30. private BarChart<String, Double> barChart;
  31.  
  32. @FXML
  33. private Spinner<Integer> spinnerCoeffCount, spinnerNoOfIterations;
  34.  
  35. @FXML
  36. private Spinner<Double> spinnerX1, spinnerX2, spinnerX3, spinnerX4, spinnerX5,
  37. spinnerY1, spinnerY2, spinnerY3, spinnerY4, spinnerY5;
  38.  
  39. @FXML
  40. private Spinner<Double> spinnerBegYear, spinnerEndYear, spinnerBegValue, spinnerEndValue;
  41.  
  42. private List<Spinner<Double>> spinnerXList;
  43. private List<Spinner<Double>> spinnerYList;
  44. private List<Double> selectedCoeffsXList;
  45. private List<Double> selectedCoeffsYList;
  46. private long renderTimeStart;
  47. private Utilities utils;
  48.  
  49. public MainWindowController(){ System.out.println("MainWindowController ready for duty!"); }
  50.  
  51. @FXML
  52. void initialize(){
  53. utils = new Utilities();
  54. labelSummary.setText("Summary: None");
  55.  
  56. SpinnerValueFactory<Integer> spinnerIntValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(1,5,1);
  57. spinnerCoeffCount.setValueFactory(spinnerIntValueFactory);
  58.  
  59. spinnerIntValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(1,20,1);
  60. spinnerNoOfIterations.setValueFactory(spinnerIntValueFactory);
  61.  
  62. SpinnerValueFactory<Double> spinnerDoubleValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(1900,2100, 2000, 1);
  63. spinnerBegYear.setValueFactory(spinnerDoubleValueFactory);
  64.  
  65. spinnerDoubleValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(1900,2100, 2010, 1);
  66. spinnerEndYear.setValueFactory(spinnerDoubleValueFactory);
  67.  
  68. spinnerDoubleValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0,10.0, 2.0, 0.1);
  69. spinnerBegValue.setValueFactory(spinnerDoubleValueFactory);
  70.  
  71. spinnerDoubleValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0,10.0, 5.0, 0.1);
  72. spinnerEndValue.setValueFactory(spinnerDoubleValueFactory);
  73.  
  74. spinnerXList = Arrays.asList(spinnerX1, spinnerX2, spinnerX3, spinnerX4, spinnerX5);
  75. spinnerYList = Arrays.asList(spinnerY1, spinnerY2, spinnerY3, spinnerY4, spinnerY5);
  76. configureXYSpinners(spinnerXList);
  77. configureXYSpinners(spinnerYList);
  78.  
  79. lineChart.setTitle("PLN / USD");
  80. lineChart.setCreateSymbols(false);
  81. lineChart.setLegendVisible(false);
  82. lineChart.setAnimated(false);
  83.  
  84. barChart.setTitle("PLN / USD delta");
  85. barChart.setLegendVisible(false);
  86. barChart.setAnimated(false);
  87.  
  88. lineChartFractalPreview.setCreateSymbols(false);
  89. lineChartFractalPreview.setLegendVisible(false);
  90.  
  91.  
  92. spinnerCoeffCountClick();
  93. }
  94.  
  95. private void setLineChartData(){
  96. renderTimeStart = System.currentTimeMillis();
  97. List<Point2D> market = utils.getMarket();
  98. ObservableList<XYChart.Data<String, Number>> data = FXCollections.observableArrayList();
  99. for (int i = 0; i < market.size(); i++) {
  100. String xAxisName = utils.getXaxisName(i);
  101. data.add(new XYChart.Data<>(xAxisName, market.get(i).getY()));
  102. }
  103.  
  104. XYChart.Series series = new XYChart.Series(data);
  105. lineChart.getData().clear();
  106. lineChart.layout();
  107. lineChart.getData().add(series);
  108. }
  109.  
  110. private void setBarChartData(){
  111. List<Point2D> market = utils.getMarket();
  112. ObservableList<XYChart.Data<String, Number>> data = FXCollections.observableArrayList();
  113. for (int i = 0; i < market.size() - 1; i++) {
  114. String xAxisName = utils.getXaxisName(i);
  115. double delta = market.get(i + 1).getY() - market.get(i).getY();
  116. data.add(new XYChart.Data<>(xAxisName, delta));
  117. }
  118.  
  119. XYChart.Series series = new XYChart.Series(data);
  120. barChart.getData().clear();
  121. barChart.getData().add(series);
  122.  
  123.  
  124. long renderTimeStop = System.currentTimeMillis();
  125. long renderExecTime = renderTimeStop - renderTimeStart;
  126. labelSummary.setText("No of points: " + market.size() +
  127. " | Generator exec time: " + utils.getExecTime() + " ms" +
  128. " | Render time: " + renderExecTime + " ms");
  129. }
  130.  
  131. public void spinnerCoeffCountClick() {
  132. for (int i = 0; i < spinnerXList.size(); i++){
  133. if (i + 1 <= spinnerCoeffCount.getValue()){
  134. spinnerXList.get(i).setDisable(false);
  135. spinnerYList.get(i).setDisable(false);
  136. }
  137. else {
  138. spinnerXList.get(i).setDisable(true);
  139. spinnerYList.get(i).setDisable(true);
  140. }
  141. }
  142. spinnerClick();
  143. }
  144.  
  145. public void spinnerClick() {
  146. selectedCoeffsXList = new ArrayList<>();
  147. selectedCoeffsYList = new ArrayList<>();
  148.  
  149. for (Spinner<Double> spinner: spinnerXList) { if (!spinner.isDisable()){ selectedCoeffsXList.add(spinner.getValue()); } }
  150. for (Spinner<Double> spinner: spinnerYList) { if (!spinner.isDisable()){ selectedCoeffsYList.add(spinner.getValue()); } }
  151.  
  152. setLineChartFractalPreview(selectedCoeffsXList, selectedCoeffsYList);
  153. }
  154.  
  155. private void setLineChartFractalPreview(List<Double> xCoeffsList, List<Double> yCoeffsList){
  156. Point2D firstPt = new Point2D(spinnerBegYear.getValue(), spinnerBegValue.getValue());
  157. Point2D secondPt = new Point2D(spinnerEndYear.getValue(), spinnerEndValue.getValue());
  158. XYChart.Series series = new XYChart.Series();
  159.  
  160. series.getData().add(new XYChart.Data<>(Double.toString(firstPt.getX()), firstPt.getY()));
  161. for (int i = 0; i < xCoeffsList.size(); i++){
  162. Point2D computedPoint = FractalGenerator.computeNewPoint(firstPt, secondPt, xCoeffsList.get(i), yCoeffsList.get(i));
  163. String xAxisName = utils.chartXAxisParser(computedPoint.getX());
  164. series.getData().add(new XYChart.Data<>(xAxisName, computedPoint.getY()));
  165. }
  166. series.getData().add(new XYChart.Data<>(Double.toString(secondPt.getX()), secondPt.getY()));
  167. lineChartFractalPreview.getData().clear();
  168. lineChartFractalPreview.getData().addAll(series);
  169. }
  170.  
  171. public void buttonSimulationStep(MouseEvent mouseEvent) {
  172. utils.stepSimulation(selectedCoeffsXList, selectedCoeffsYList);
  173. setLineChartData();
  174. setBarChartData();
  175. }
  176.  
  177. public void buttonSimulationStart(MouseEvent mouseEvent) {
  178. utils.startNewSimulation(spinnerNoOfIterations.getValue(), selectedCoeffsXList, selectedCoeffsYList,
  179. spinnerBegYear.getValue(), spinnerEndYear.getValue(), spinnerBegValue.getValue(), spinnerEndValue.getValue());
  180. setLineChartData();
  181. setBarChartData();
  182. }
  183.  
  184. private void configureXYSpinners(List<Spinner<Double>> list){
  185. BigDecimal initialValue = new BigDecimal("0.1");
  186. for (Spinner<Double> spinner: list) {
  187. SpinnerValueFactory<Double> spinnerDoubleValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(-0.9,0.9,initialValue.doubleValue(), 0.1);
  188. spinner.setValueFactory(spinnerDoubleValueFactory);
  189. initialValue = initialValue.add(new BigDecimal("0.1"));
  190. }
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement