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