Skip to content
Snippets Groups Projects
Unverified Commit 0d61ebd9 authored by David Bohn's avatar David Bohn
Browse files

Add comments

parent a1edc561
No related branches found
No related tags found
1 merge request!5Configuration system
......@@ -24,7 +24,7 @@ import java.util.*;
public class Main {
private static ActorSystem cSystem;
static {
......@@ -50,8 +50,19 @@ public class Main {
ConfigurationSelection[] configs = new ConfigurationSelection[configurations.size()];
configurations.toArray(configs);
ConfigurationSelection selectedConfig = (ConfigurationSelection) JOptionPane.showInputDialog(null, "Select a configuration to run", "Configuration Selection", JOptionPane.QUESTION_MESSAGE, null, configs, configurations.get(0));
// Display the selection dialog to select a configuration
ConfigurationSelection selectedConfig = (ConfigurationSelection) JOptionPane.showInputDialog(
null,
"Select a configuration to run",
"Configuration Selection",
JOptionPane.QUESTION_MESSAGE,
null,
configs,
configurations.get(0)
);
if (selectedConfig != null) {
// The Configuration will be an actor in the system, so we tell akka to create the actor
Props theProps = AbstractConfiguration.props(selectedConfig.getConfigurationClass());
cSystem.actorOf(theProps, "Configuration");
......@@ -60,8 +71,16 @@ public class Main {
}
}
/**
* This method crawls the fucoin.configurations package for classes extending the AbstractConfiguration.
*
* @return The list contains all non abstract extensions of AbstractConfiguration in the namespace, wrapped in ConfigurationSelection objects
* @throws InstantiationException
* @throws IllegalAccessException
*/
private static List<ConfigurationSelection> getAbstractConfigurations() throws InstantiationException, IllegalAccessException {
List<ClassLoader> classLoadersList = new LinkedList<>();
// Lots of reflection magic happening here!
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
......@@ -76,6 +95,7 @@ public class Main {
List<ConfigurationSelection> configurations = new ArrayList<>();
// Filter the found classes for non abstract classes, that inherit from AbstractConfiguration
allClasses.stream().filter(oneClass -> !Modifier.isAbstract(oneClass.getModifiers()) && AbstractConfiguration.class.isAssignableFrom(oneClass)).forEach(oneClass -> {
ConfigurationSelection cfg = new ConfigurationSelection((Class<AbstractConfiguration>) oneClass);
configurations.add(cfg);
......
......@@ -5,7 +5,7 @@ import fucoin.actions.control.ActionWalletSendMoney;
import fucoin.configurations.internal.ConfigurationName;
/**
*
* This configuration is the previous default of 2 wallets with GUI and a supervisor.
*/
@ConfigurationName("Default Configuration")
public class DefaultConfiguration extends AbstractConfiguration {
......
......@@ -3,7 +3,7 @@ package fucoin.configurations;
import fucoin.configurations.internal.ConfigurationName;
/**
*
* This configuration spawns 200 wallets to demonstrate the spawning of many headless wallets
*/
@ConfigurationName("Lots of Wallets")
public class MassWalletConfiguration extends AbstractConfiguration {
......
......@@ -4,7 +4,7 @@ import akka.japi.Creator;
import fucoin.configurations.AbstractConfiguration;
/**
*
* This is used by Akka to spawn the Configuration Actor
*/
public class ConfigurationCreator implements Creator<AbstractConfiguration> {
......
......@@ -4,7 +4,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* This Annotation can be used by Configurations to display
* a more friendly title than the class name in the startup dialog
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface ConfigurationName {
......
......@@ -2,10 +2,9 @@ package fucoin.configurations.internal;
import fucoin.configurations.AbstractConfiguration;
import java.util.Arrays;
/**
*
* A ConfigurationSelection is a wrapper around the configuration class objects
* to display a custom text in the configuration selection dropdown.
*/
public class ConfigurationSelection {
private Class<AbstractConfiguration> configurationClass;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment