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 }