package ge.edu.freeuni.sdp.snake.model; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Caretaker { private Memento savedState; private boolean fileExists; File mementoFile = new File("memento.txt"); public Caretaker() { if (mementoFile.exists()) { restoreMementoFromFile(); } } private void restoreMementoFromFile() { int length = 0; String direction = null; Point head = null; int levelIndex = 0; try { FileReader fileReader = new FileReader(mementoFile); BufferedReader bufferedReader = new BufferedReader(fileReader); length = Integer.parseInt(bufferedReader.readLine()); direction = bufferedReader.readLine(); head = new Point(Integer.parseInt(bufferedReader.readLine()),Integer.parseInt(bufferedReader.readLine())); levelIndex = Integer.parseInt(bufferedReader.readLine()); bufferedReader.close(); } catch(FileNotFoundException ex) { } catch(IOException e) { e.printStackTrace(); } savedState = new Memento(length, direction, head, levelIndex); } public Memento getMemento() { return savedState; } public void addMemento(Memento savedState) { this.savedState = savedState; try { mementoFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } saveInFile(); } private void saveInFile() { try { // Assume default encoding. FileWriter fileWriter = new FileWriter(mementoFile); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(""+savedState.getLength()); bufferedWriter.newLine(); bufferedWriter.write(savedState.getDirectionString()); bufferedWriter.newLine(); bufferedWriter.write(""+savedState.getHead().X); bufferedWriter.newLine(); bufferedWriter.write(""+savedState.getHead().Y); bufferedWriter.newLine(); bufferedWriter.write(""+savedState.getLevelIndex()); bufferedWriter.close(); } catch(IOException e) { e.printStackTrace(); } // BufferedWriter writer = null; // try { // writer = new BufferedWriter(new FileWriter(mementoFile)); // writer.write(savedState.getLength()); // writer.newLine(); // writer.write(savedState.getDirectionString()); // writer.newLine(); // writer.write(); // writer.newLine(); // writer.write(savedState.getHead().Y); // writer.newLine(); // writer.write(savedState.getLevelIndex()); // // writer.close(); // // } catch (IOException e) { // e.printStackTrace(); // } } public boolean hasSavedState() { return fileExists; } }