View Javadoc
1   package org.woehlke.computer.kurzweil.tabs.simulatedevolution;
2   
3   import lombok.EqualsAndHashCode;
4   import lombok.Getter;
5   import lombok.ToString;
6   import lombok.extern.log4j.Log4j2;
7   import org.woehlke.computer.kurzweil.commons.tabs.TabContext;
8   import org.woehlke.computer.kurzweil.application.ComputerKurzweilContext;
9   
10  import java.util.concurrent.ForkJoinTask;
11  
12  import static java.lang.Thread.State.NEW;
13  
14  @Log4j2
15  @Getter
16  @ToString(callSuper = false, exclude={"ctx","controller","tab"})
17  @EqualsAndHashCode(callSuper = false, exclude={"ctx","controller","tab"})
18  public class SimulatedEvolutionContext  extends ForkJoinTask<Void> implements TabContext, SimulatedEvolution {
19  
20      private final ComputerKurzweilContext ctx;
21      private final SimulatedEvolutionTab tab;
22      private final SimulatedEvolutionCanvas canvas;
23      private final SimulatedEvolutionModel tabModel;
24  
25      private SimulatedEvolutionController controller;
26  
27      public SimulatedEvolutionContext(
28          SimulatedEvolutionTab tab,
29          ComputerKurzweilContext ctx
30      ) {
31         this.tab = tab;
32         this.ctx = ctx;
33         this.canvas = new SimulatedEvolutionCanvas(   this );
34         this.tabModel = this.canvas.getTabModel();
35         this.controller = new SimulatedEvolutionController(this);
36      }
37  
38      @Override
39      public void stopController() {
40          this.controller.exit();
41          this.controller = null;
42          this.controller = new SimulatedEvolutionController(this);
43      }
44  
45      @Override
46      public void startController() {
47          if(this.controller == null){
48              this.controller = new SimulatedEvolutionController(this);
49          } else {
50              if(this.controller.getState() != NEW){
51                  this.stopController();
52              }
53          }
54      }
55  
56      @Override
57      public Void getRawResult() {
58          return null;
59      }
60  
61      @Override
62      protected void setRawResult(Void value) {
63  
64      }
65  
66      @Override
67      protected boolean exec() {
68          this.tab.update();
69          this.tab.repaint();
70          return true;
71      }
72  }