// Path: src/model/utility/FileHandler.java
// public class FileHandler {
// 
//     private FileHandler() {
//         //FULLY STATIC CLASS
//     }
// 
//     public static String readFile(String path, Charset encoding) throws IOException {
//         byte[] encoded;
//         encoded = Files.readAllBytes(Paths.get(path));
// 
//         assert encoded != null;
//         return new String(encoded, encoding);
//     }
// 
//     public static String readFile(String path) throws IOException {
// 
//         return readFile(path, StandardCharsets.UTF_8);
//     }
// 
//     public static boolean makeDir(String path) {
//         return new File(path).mkdir();
//     }
// 
//     public static void writeFile(String textString, File f, Charset encoding)
//             throws IOException {
// 
//         try (Writer fWriter = new BufferedWriter(new OutputStreamWriter(
//                 new FileOutputStream(f), encoding))) {
//             fWriter.write(textString);
//         }
//     }
// 
//     public static void writeFile(String textString, File f)
//             throws IOException {
//         //System.out.println(f.getCanonicalPath());
//         writeFile(textString, f, StandardCharsets.UTF_8);
//     }
// 
//     public static void writeFile(String textString, String filepath)
//             throws IOException {
//         File f = new File(filepath);
//         writeFile(textString, f, StandardCharsets.UTF_8);
//     }
// 
//     public static File stringToTempFile(String textString) {
//         File f = null;
//         try {
//             f = getExpiringTempFile();
// 
//             writeFile(textString, f);
// 
//             //System.out.println(textString);
//         } catch (Exception e) {
//             e.printStackTrace();
//         }
//         return f;
//     }
// 
//     public static File getExpiringTempFile() {
// 
//         File f = null;
// 
//         try {
//             f = File.createTempFile("JavaFX_pd_", ".tmp");
//             f.deleteOnExit();
//         } catch (Exception e) {
//             e.printStackTrace();
//         }
// 
//         return f;
//     }
// 
// }
// 
// Path: src/view/utils/ExceptionAlerter.java
// public class ExceptionAlerter {
//     public static void showException(Exception e) {
// 
//         if (e != null) {
//             Alert alert = new Alert(Alert.AlertType.ERROR);
//             alert.setTitle("Exception Alert!");
//             alert.setHeaderText("An Exception was thrown.");
//             alert.setContentText(e.getMessage());
// 
// // Create expandable Exception.
//             StringWriter sw = new StringWriter();
//             PrintWriter pw = new PrintWriter(sw);
//             e.printStackTrace(pw);
//             String exceptionText = sw.toString();
// 
//             Label stackTraceHeaderLabel = new Label("The exception stacktrace was:");
// 
//             TextArea stackTraceTextArea = new TextArea(exceptionText);
//             stackTraceTextArea.setEditable(false);
//             stackTraceTextArea.setWrapText(true);
// 
//             stackTraceTextArea.setMaxWidth(Double.MAX_VALUE);
//             stackTraceTextArea.setMaxHeight(Double.MAX_VALUE);
//             GridPane.setVgrow(stackTraceTextArea, Priority.ALWAYS);
//             GridPane.setHgrow(stackTraceTextArea, Priority.ALWAYS);
// 
//             GridPane expContent = new GridPane();
//             expContent.setMaxWidth(Double.MAX_VALUE);
//             expContent.add(stackTraceHeaderLabel, 0, 0);
//             expContent.add(stackTraceTextArea, 0, 1);
// 
// // Set expandable Exception into the dialog pane.
//             alert.getDialogPane().setExpandableContent(expContent);
//             alert.getDialogPane().setExpanded(true);
// 
//             alert.showAndWait();
//         }
//     }
// }
// 
// Path: src/view/utils/TimedUpdaterUtil.java
// public class TimedUpdaterUtil {
//     static final int DEFAULT_WAIT = 2000;
// 
//     public static void callAfter(CallbackVisitor callback) {
//         callAfter(DEFAULT_WAIT, callback);
//     }
// 
//     public static void callAfter(int mseconds, CallbackVisitor callback) {
//         Task<Void> sleeper = new Task<Void>() {
//             @Override
//             protected Void call() throws Exception {
//                 try {
//                     Thread.sleep(mseconds);
//                 } catch (InterruptedException e) {
//                     ExceptionAlerter.showException(e);
//                 }
//                 return null;
//             }
//         };
//         sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
//             @Override
//             public void handle(WorkerStateEvent event) {
//                 callback.call();
//             }
//         });
//         new Thread(sleeper).start();
//     }
// 
//     public static void temporaryLabeledUpdate(int mseconds, Labeled labeled, String newText) {
//         String oldText = labeled.getText();
//         labeled.setText(newText);
// 
//         callAfter(mseconds, new CallbackVisitor() {
//             @Override
//             public void call() {
//                 labeled.setText(oldText);
//             }
//         });
//     }
// 
//     public static void temporaryLabeledUpdate(Labeled labeled, String newText) {
//         temporaryLabeledUpdate(DEFAULT_WAIT, labeled, newText);
//     }
// 
// }


import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import model.utility.FileHandler;
import view.utils.ExceptionAlerter;
import view.utils.TimedUpdaterUtil;
import java.io.IOException;
package view.toml;



/**
 * Created by Sohan Chowdhury on 8/27/16.
 * Website: sohanchy.com
 * Email: sifat3d@gmail.com
 */
public class TomlConfigEditor extends ScrollPane {
    private String filePath;
    private Button saveButton;
    private VBox holderVBox;
    private TomlEditorControl tomlEditorControl;

    public TomlConfigEditor(String filePath) {
        super();

        this.filePath = filePath;

        setupTomlEditorControl();
        holderVBox = new VBox(tomlEditorControl);

        setupSaveButton();

// Path: src/model/utility/FileHandler.java
// public class FileHandler {
// 
//     private FileHandler() {
//         //FULLY STATIC CLASS
//     }
// 
//     public static String readFile(String path, Charset encoding) throws IOException {
//         byte[] encoded;
//         encoded = Files.readAllBytes(Paths.get(path));
// 
//         assert encoded != null;
//         return new String(encoded, encoding);
//     }
// 
//     public static String readFile(String path) throws IOException {
// 
//         return readFile(path, StandardCharsets.UTF_8);
//     }
// 
//     public static boolean makeDir(String path) {
//         return new File(path).mkdir();
//     }
// 
//     public static void writeFile(String textString, File f, Charset encoding)
//             throws IOException {
// 
//         try (Writer fWriter = new BufferedWriter(new OutputStreamWriter(
//                 new FileOutputStream(f), encoding))) {
//             fWriter.write(textString);
//         }
//     }
// 
//     public static void writeFile(String textString, File f)
//             throws IOException {
//         //System.out.println(f.getCanonicalPath());
//         writeFile(textString, f, StandardCharsets.UTF_8);
//     }
// 
//     public static void writeFile(String textString, String filepath)
//             throws IOException {
//         File f = new File(filepath);
//         writeFile(textString, f, StandardCharsets.UTF_8);
//     }
// 
//     public static File stringToTempFile(String textString) {
//         File f = null;
//         try {
//             f = getExpiringTempFile();
// 
//             writeFile(textString, f);
// 
//             //System.out.println(textString);
//         } catch (Exception e) {
//             e.printStackTrace();
//         }
//         return f;
//     }
// 
//     public static File getExpiringTempFile() {
// 
//         File f = null;
// 
//         try {
//             f = File.createTempFile("JavaFX_pd_", ".tmp");
//             f.deleteOnExit();
//         } catch (Exception e) {
//             e.printStackTrace();
//         }
// 
//         return f;
//     }
// 
// }
// 
// Path: src/view/utils/ExceptionAlerter.java
// public class ExceptionAlerter {
//     public static void showException(Exception e) {
// 
//         if (e != null) {
//             Alert alert = new Alert(Alert.AlertType.ERROR);
//             alert.setTitle("Exception Alert!");
//             alert.setHeaderText("An Exception was thrown.");
//             alert.setContentText(e.getMessage());
// 
// // Create expandable Exception.
//             StringWriter sw = new StringWriter();
//             PrintWriter pw = new PrintWriter(sw);
//             e.printStackTrace(pw);
//             String exceptionText = sw.toString();
// 
//             Label stackTraceHeaderLabel = new Label("The exception stacktrace was:");
// 
//             TextArea stackTraceTextArea = new TextArea(exceptionText);
//             stackTraceTextArea.setEditable(false);
//             stackTraceTextArea.setWrapText(true);
// 
//             stackTraceTextArea.setMaxWidth(Double.MAX_VALUE);
//             stackTraceTextArea.setMaxHeight(Double.MAX_VALUE);
//             GridPane.setVgrow(stackTraceTextArea, Priority.ALWAYS);
//             GridPane.setHgrow(stackTraceTextArea, Priority.ALWAYS);
// 
//             GridPane expContent = new GridPane();
//             expContent.setMaxWidth(Double.MAX_VALUE);
//             expContent.add(stackTraceHeaderLabel, 0, 0);
//             expContent.add(stackTraceTextArea, 0, 1);
// 
// // Set expandable Exception into the dialog pane.
//             alert.getDialogPane().setExpandableContent(expContent);
//             alert.getDialogPane().setExpanded(true);
// 
//             alert.showAndWait();
//         }
//     }
// }
// 
// Path: src/view/utils/TimedUpdaterUtil.java
// public class TimedUpdaterUtil {
//     static final int DEFAULT_WAIT = 2000;
// 
//     public static void callAfter(CallbackVisitor callback) {
//         callAfter(DEFAULT_WAIT, callback);
//     }
// 
//     public static void callAfter(int mseconds, CallbackVisitor callback) {
//         Task<Void> sleeper = new Task<Void>() {
//             @Override
//             protected Void call() throws Exception {
//                 try {
//                     Thread.sleep(mseconds);
//                 } catch (InterruptedException e) {
//                     ExceptionAlerter.showException(e);
//                 }
//                 return null;
//             }
//         };
//         sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
//             @Override
//             public void handle(WorkerStateEvent event) {
//                 callback.call();
//             }
//         });
//         new Thread(sleeper).start();
//     }
// 
//     public static void temporaryLabeledUpdate(int mseconds, Labeled labeled, String newText) {
//         String oldText = labeled.getText();
//         labeled.setText(newText);
// 
//         callAfter(mseconds, new CallbackVisitor() {
//             @Override
//             public void call() {
//                 labeled.setText(oldText);
//             }
//         });
//     }
// 
//     public static void temporaryLabeledUpdate(Labeled labeled, String newText) {
//         temporaryLabeledUpdate(DEFAULT_WAIT, labeled, newText);
//     }
// 
// }


// Path: src/view/toml/TomlConfigEditor.java
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import model.utility.FileHandler;
import view.utils.ExceptionAlerter;
import view.utils.TimedUpdaterUtil;
import java.io.IOException;

package view.toml;



/**
 * Created by Sohan Chowdhury on 8/27/16.
 * Website: sohanchy.com
 * Email: sifat3d@gmail.com
 */
public class TomlConfigEditor extends ScrollPane {
    private String filePath;
    private Button saveButton;
    private VBox holderVBox;
    private TomlEditorControl tomlEditorControl;

    public TomlConfigEditor(String filePath) {
        super();

        this.filePath = filePath;

        setupTomlEditorControl();
        holderVBox = new VBox(tomlEditorControl);

        setupSaveButton();

        this.setPrefHeight(650.0);