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 }