Add loading of files to the core, but not the UI.

This commit is contained in:
Danila Fedorin 2017-11-23 18:59:33 -08:00
parent 095d374949
commit 9bdf188ca7
2 changed files with 41 additions and 4 deletions

View File

@ -23,9 +23,12 @@ import org.nwapw.abacus.EvaluationResult;
import org.nwapw.abacus.tree.nodes.TreeNode;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
import java.util.Set;
import java.util.stream.Collectors;
@ -69,6 +72,7 @@ public class AbacusController implements PluginListener {
* Constant string that is displayed if the calculations are interrupted by an exception.
*/
private static final String ERR_EXCEPTION = "Exception Thrown";
private static final String ERR_DEFINITION = "Definition Error";
@FXML
private TabPane coreTabPane;
@FXML
@ -304,6 +308,30 @@ public class AbacusController implements PluginListener {
reloadAlertShown = false;
}
private void loadDefinitionFile(String fileName){
File definitionFile = new File(fileName);
if(!definitionFile.exists()) return;
try {
FileReader fileReader = new FileReader(definitionFile);
Scanner scanner = new Scanner(fileReader);
while(scanner.hasNext()){
abacus.evaluateTree(abacus.parseString(scanner.nextLine()));
}
} catch (AbacusException abacusError) {
outputText.setText(ERR_DEFINITION + "(" + abacusError.getMessage() + ")");
} catch (RuntimeException runtime) {
outputText.setText(ERR_DEFINITION + "(" + ERR_EXCEPTION + ")");
} catch (FileNotFoundException ignored) {}
}
private void reloadAbacus(){
abacus.reload();
ExtendedConfiguration abacusConfig = (ExtendedConfiguration) abacus.getConfiguration();
for(String fileName: abacusConfig.getDefinitionFiles()) {
loadDefinitionFile(fileName);
}
}
@FXML
public void performScan() {
PluginManager abacusPluginManager = abacus.getPluginManager();
@ -314,13 +342,13 @@ public class AbacusController implements PluginListener {
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
abacus.reload();
reloadAbacus();
}
@FXML
public void performReload() {
alertIfApplyNeeded(true);
abacus.reload();
reloadAbacus();
}
@FXML

View File

@ -17,8 +17,9 @@ import java.io.File
* @param disabledPlugins the list of plugins that should be disabled, same as [Configuration.disabledPlugins]
*/
class ExtendedConfiguration(var computationDelay: Double = 0.0,
implementation: String = "<default>",
disabledPlugins: Array<String> = emptyArray())
definitionFiles: Array<String> = emptyArray(),
implementation: String = "<default>",
disabledPlugins: Array<String> = emptyArray())
: Configuration(implementation, disabledPlugins) {
companion object {
@ -27,6 +28,7 @@ class ExtendedConfiguration(var computationDelay: Double = 0.0,
*/
val DEFAULT_TOML_STRING = """
computationDelay=0.0
definitionFiles=[]
implementation="naive"
disabledPlugins=[]
"""
@ -40,6 +42,11 @@ class ExtendedConfiguration(var computationDelay: Double = 0.0,
val DEFAULT_TOML_WRITER = TomlWriter()
}
/**
* The set of files that definitions should be loaded from.
*/
val definitionFiles: MutableSet<String> = mutableSetOf(*definitionFiles)
/**
* Constructs a new configuration from a file on disk.
* @param tomlFile the file from disk to load.
@ -59,6 +66,8 @@ class ExtendedConfiguration(var computationDelay: Double = 0.0,
numberImplementation = config.numberImplementation
disabledPlugins.clear()
disabledPlugins.addAll(config.disabledPlugins)
definitionFiles.clear()
definitionFiles.addAll(config.definitionFiles)
}
/**