import java.util.LinkedList;
import java.util.List;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.File;
public class BoardManager {
protected Board board;
protected List sudokuViews;
public BoardManager() {
sudokuViews = new LinkedList();
}
public void registerSudokuView(Gui f) {
sudokuViews.add(f);
updateSudokuViews();
}
protected void updateSudokuViews() {
for (int i = 0; i < sudokuViews.size(); i++) {
((Gui) sudokuViews.get(i)).update(getBoard());
}
}
public void loadFile(File f) throws IOException {
preLoadWrapper();
board = new Board();
BufferedReader fileReader = new BufferedReader(new FileReader(f));
int digit = (Field.POSSIBILITIES / 10) + 1;
int row = 0;
while (row < Field.POSSIBILITIES) {
String sudokuLine = fileReader.readLine();
int value;
char c;
int extendedInt;
char extendedC;
if (digit == 1) {
for (int i = 0; i < Field.POSSIBILITIES; i++) {
c = sudokuLine.charAt(i);
if (c != '.') {
value = Integer.parseInt(Character.toString(c));
setFieldPrivate(Structure.ROW, row, i, new Field(value,true));
}
}
} else if (digit == 2) {
for (int i = 0; i < Field.POSSIBILITIES * digit; i = i + digit) {
c = sudokuLine.charAt(i);
extendedC = sudokuLine.charAt(i + 1);
if (c != '.') {
value = Integer.parseInt(Character.toString(c)) * 10;
extendedInt = Integer.parseInt(Character.toString(extendedC));
value += extendedInt;
setFieldPrivate(Structure.ROW, row, (i/digit), new Field(value,true));
}
}
}
row++;
}
updateSudokuViews();
}
protected void setFieldPrivate(Structure structure, int structNr, int element, Field f) {
board.setField(structure, structNr, element, f);
}
protected void preSetFieldWrapper(Structure structure, int structNr, int element, Field f) {
}
protected void preLoadWrapper() {
}
public void setField(Structure structure, int structNr, int element, Field f) {
preSetFieldWrapper(structure, structNr, element, f);
setFieldPrivate(structure, structNr, element, f);
updateSudokuViews();
}
public Field getField(Structure structure, int structNr, int element) {
return getBoard().getField(structure, structNr, element);
}
public Board getBoard() {
if (board == null) {
board = new Board();
}
return board;
}
public void setBoard(Board board) {
this.board = board;
}
}