package cellsociety; public class RuleContext { } package cellsociety; public class SimpleCellState implements CellState { public SimpleCellState(int id) public static SimpleCellState gameOfLife(int id) public static SimpleCellState tripleCellState(int id) public int getId() public void setId(int id) public String toString() } package cellsociety; public class PercolationRule implements Rule { public PercolationRule(RuleContext ctx) public GridAction apply (Cell cell) } package cellsociety; public class SimulationControllerPercolation extends SimulationController { public SimulationControllerPercolation(SimulationConfig config) protected boolean shouldStop(Grid grid) public void load() } package cellsociety; public class NoGridAction implements GridAction { public void apply(Grid baseGrid, Map, Cell> updateMap) } package cellsociety; public class RuleRegistry { public static Function getRuleCreator(String simulationType) } package cellsociety; public class MoveGridAction implements GridAction { public MoveGridAction(int fromRow, int fromCol, int toRow, int toCol) public void apply(Grid baseGrid, Map, Cell> updateMap) } package cellsociety; public class SetGridAction implements GridAction { public SetGridAction(int row, int col, CellState targetState) public void apply(Grid baseGrid, Map, Cell> updateMap) } package cellsociety; public class SpreadingOfFireRule implements Rule { public SpreadingOfFireRule(RuleContext ctx) public GridAction apply(Cell cell) } package cellsociety; public class GridController { public GridController(String simulationType) public void initializeGrid(int[][] cellstates) public void commitNextGrid(List actions) public Grid getCurrentGridSnapshot() } package cellsociety; public class Grid implements GridSnapshot{ public Grid(int rows, int cols) public Cell getCell(int row, int col) public int getCellStateId(int row, int col) public void setCell(int row, int col, Cell cell) public int getRows() public int getCols() public List getEmptyCells() public void setEmptyCells(List emptyCells) } package cellsociety; public class SimulationController { public SimulationController() public void setSimulationListener(SimulationListener listener) public void load(SimulationConfig config) public void start() public void pause() public Grid step() public void setSimulationRate(double rate) protected boolean shouldStop(Grid snapshot) } package cellsociety; public interface GridAction { void apply(Grid baseGrid, Map, Cell> updateMap); } package cellsociety; public interface SimulationListener { void onSimulationLoaded(GridSnapshot gridSnapshot); void onSimulationStarted(); void onStepCompleted(int step, GridSnapshot grid); void onSimulationStopped(int step); void onSimulationPaused(); } package cellsociety; public interface GridSnapshot { int getRows(); int getCols(); int getCellStateId(int row, int col); } package cellsociety; public class ViewController implements SimulationListener { public ViewController() public void setView(View view) public void setSimulationController(SimulationController simulationController) public void setConfigParser(ConfigParser parser) public void onSimulationLoaded(GridSnapshot grid) public void onSimulationStarted() public void onStepCompleted(int step, GridSnapshot grid) public void onSimulationStopped(int step) public void onSimulationPaused() public List getSimulationConfigFiles(String simulationType) public Map getSimulationInfo() public void loadSimulation(String filePath) public void startSimulation() public void pauseSimulation() public void setSimulationRate(double rate) } package cellsociety; public interface CellState { int getId(); } package cellsociety; public interface View { void displayGrid(GridSnapshot grid); void setStep(int step); void setSimulationRunning(boolean isRunning); } package cellsociety; public class Main extends Application { public void start(Stage primaryStage) } package cellsociety.model.config; public class XMLConfig { public XMLConfig(String title, public String getTitle() public String getSimulationType() public int getWidth() public int getHeight() public String getCellShape() public List getInitialStates() } package cellsociety.model.config; public class XMLWriter { } package cellsociety.model.config; public class CellConfig { public CellConfig(int x, int y, int state) public int getX() public int getY() public int getState() } package cellsociety.model.config; public class XMLFileManager { public static List getAvailableSimulations() public static String getDisplayName(File file) } package cellsociety.model.config; public class XMLParser { public XMLConfig parse(String filePath) } package cellsociety.model; public class Grid implements GridSnapshot { public Grid(int rows, int cols) public static Grid fromConfig(XMLConfig config) public int getRowCount() public int getColCount() public int getCellState(int row, int col) } package cellsociety.model; public interface GridSnapshot { int getRowCount(); int getColCount(); int getCellState(int row, int col); } package cellsociety.view; public class ControlsBarRenderer { public ControlsBarRenderer() public VBox getControlsBar() public HBox getTopRow() public HBox getBottomRow() public MenuButton getNewButton() public Button getResetButton() public Button getSaveButton() public Button getStartButton() public Button getPauseButton() public Button getStopButton() public Button getInfoToggleButton() public void populateSimulationMenu(MenuButton button) } package cellsociety.view; public class InfoPanelRenderer { public InfoPanelRenderer() public VBox getInfoPane() public void updateInfo(String type, String name, String author, String description) public void updateParameters(Map parameters) public void clear() public VBox getView() } package cellsociety.view; public class GridRenderer { public GridRenderer(int gridSize) public void initializeGrid(GridSnapshot snapshot) public void updateGrid(GridSnapshot snapshot) public void clearGrid() public void setStateColors(Map stateColors) public GridPane getGridPane() } package cellsociety.view; public class AppView { public AppView(Stage stage) public void show() public GridRenderer getGridRenderer() public ControlsBarRenderer getControlsBar() public InfoPanelRenderer getInfoPanel() public Scene getScene() } package cellsociety; public interface Config { String getTitle(); String getSimulationType(); int getWidth(); int getHeight(); String getCellShape(); int[][] getInitialStates(); double getSimulationRate(); // TODO: implement in XMLConfig } package cellsociety; public class CellStateRegistry { public static Function getStateCreator(String simulationType) } package cellsociety; public class SimulationConfig { } package cellsociety; public class Cell { public Cell(int row, int col, String simulationType, int stateId) public CellState getState() public void setState(CellState state) public int getStateId() public int getRow() public int getCol() public void setRow(int row) public void setCol(int col) public String getSimulationType() public Cell copy() } package cellsociety; public class NeighborhoodCalculator { public NeighborhoodCalculator(int rowSize, int colSize) public List> getMooreNeighborhood(int row, int col) public List> getVonNeumannNeighborhood(int row, int col) } package cellsociety; public interface Rule { GridAction apply(Cell cell); } package cellsociety; public class GameOfLifeRule implements Rule { public GameOfLifeRule(RuleContext ctx) public GridAction apply(Cell cell) } package cellsociety; public interface ConfigParser { public Config parse(String filePath); }