de.invation.code.toval.graphic.misc.AbstractWorkingDirectoryStartup Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of TOVAL Show documentation
Show all versions of TOVAL Show documentation
TOVAL comprises a set of java classes for common programming issues. It includes utils for arrays, lists, sets and collections for convenient handling and modification, but also support for mathematic definitions concerning logic (clauses + resolution) together with some algorithms for permutations, powersets and resolution. Additionally it contains a number of types for multisets, matrices with object keys and much more.
The newest version!
package de.invation.code.toval.graphic.misc;
import de.invation.code.toval.graphic.dialog.MessageDialog;
import de.invation.code.toval.misc.wd.AbstractWorkingDirectoryProperties;
import de.invation.code.toval.properties.PropertyException;
import de.invation.code.toval.validate.ExceptionDialog;
import de.invation.code.toval.validate.ParameterException;
import java.lang.reflect.InvocationTargetException;
import javax.swing.SwingUtilities;
public abstract class AbstractWorkingDirectoryStartup extends AbstractStartup {
@Override
protected final void startApplication() throws Exception {
// Check if there is a path to a simulation directory.
if (!checkSimulationDirectory()) {
// There is no path and it is either not possible to set a path or the user aborted the corresponding dialog.
System.exit(0);
}
MessageDialog.getInstance();
try {
SwingUtilities.invokeAndWait(() -> {
try{
initializeComponentContainer();
} catch(Exception e){
MessageDialog.getInstance().message("Exception while initializing component container: " + e.getMessage());
}
});
} catch (InterruptedException | InvocationTargetException e) {
throw new Exception("Exception during startup.", e);
}
createMainClass();
}
protected abstract void initializeComponentContainer() throws Exception;
protected abstract void createMainClass() throws Exception;
protected boolean chooseWorkingDirectory() {
String workingDirectory;
try {
workingDirectory = launchWorkingDirectoryDialog();
} catch (Exception e) {
ExceptionDialog.showException(null, "Internal Exception", new Exception("Cannot launch \""+getWorkingDirectoryDescriptor().toLowerCase()+"\" dialog", e), true);
return false;
}
if (workingDirectory == null) {
//User aborted
// ExceptionDialog.showException(null, "Invalid Directory", new Exception("Chosen \""+getWorkingDirectoryDescriptor().toLowerCase()+"\" is NULL"), true);
return false;
}
try {
getWorkingDirectoryProperties().setWorkingDirectory(workingDirectory, false);
return true;
} catch (Exception e1) {
ExceptionDialog.showException(null, "Internal Exception", new Exception("Cannot set \""+getWorkingDirectoryDescriptor().toLowerCase()+"\"", e1), true);
return false;
}
}
protected boolean checkSimulationDirectory() {
try {
getWorkingDirectoryProperties().getWorkingDirectory();
return true;
} catch (PropertyException e) {
// There is no recent simulation directory
// -> Let the user choose a path for the simulation directory
return chooseWorkingDirectory();
} catch (ParameterException e) {
// Value for simulation directory is invalid, possibly due to moved directories
// -> Remove entry for actual simulation directory
try {
getWorkingDirectoryProperties().removeWorkingDirectory();
} catch (Exception e1) {
ExceptionDialog.showException(null, "Internal Exception", new Exception("Cannot fix corrupt property entries.", e), true);
return false;
}
// -> Let the user choose a path for the simulation directory
return chooseWorkingDirectory();
} catch (Exception e1) {
ExceptionDialog.showException(null, "Internal Exception", new Exception("Cannot extract working directory", e1), true);
return false;
}
}
protected abstract String getWorkingDirectoryDescriptor();
protected abstract String launchWorkingDirectoryDialog() throws Exception;
protected abstract AbstractWorkingDirectoryProperties getWorkingDirectoryProperties() throws Exception;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy