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.*; ...@@ -24,7 +24,7 @@ import java.util.*;
public class Main { public class Main {
private static ActorSystem cSystem; private static ActorSystem cSystem;
static { static {
...@@ -50,8 +50,19 @@ public class Main { ...@@ -50,8 +50,19 @@ public class Main {
ConfigurationSelection[] configs = new ConfigurationSelection[configurations.size()]; ConfigurationSelection[] configs = new ConfigurationSelection[configurations.size()];
configurations.toArray(configs); 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) { 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()); Props theProps = AbstractConfiguration.props(selectedConfig.getConfigurationClass());
cSystem.actorOf(theProps, "Configuration"); cSystem.actorOf(theProps, "Configuration");
...@@ -60,8 +71,16 @@ public class Main { ...@@ -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 { private static List<ConfigurationSelection> getAbstractConfigurations() throws InstantiationException, IllegalAccessException {
List<ClassLoader> classLoadersList = new LinkedList<>(); List<ClassLoader> classLoadersList = new LinkedList<>();
// Lots of reflection magic happening here!
classLoadersList.add(ClasspathHelper.contextClassLoader()); classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader()); classLoadersList.add(ClasspathHelper.staticClassLoader());
...@@ -76,6 +95,7 @@ public class Main { ...@@ -76,6 +95,7 @@ public class Main {
List<ConfigurationSelection> configurations = new ArrayList<>(); 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 -> { allClasses.stream().filter(oneClass -> !Modifier.isAbstract(oneClass.getModifiers()) && AbstractConfiguration.class.isAssignableFrom(oneClass)).forEach(oneClass -> {
ConfigurationSelection cfg = new ConfigurationSelection((Class<AbstractConfiguration>) oneClass); ConfigurationSelection cfg = new ConfigurationSelection((Class<AbstractConfiguration>) oneClass);
configurations.add(cfg); configurations.add(cfg);
......
...@@ -5,7 +5,7 @@ import fucoin.actions.control.ActionWalletSendMoney; ...@@ -5,7 +5,7 @@ import fucoin.actions.control.ActionWalletSendMoney;
import fucoin.configurations.internal.ConfigurationName; import fucoin.configurations.internal.ConfigurationName;
/** /**
* * This configuration is the previous default of 2 wallets with GUI and a supervisor.
*/ */
@ConfigurationName("Default Configuration") @ConfigurationName("Default Configuration")
public class DefaultConfiguration extends AbstractConfiguration { public class DefaultConfiguration extends AbstractConfiguration {
......
...@@ -3,7 +3,7 @@ package fucoin.configurations; ...@@ -3,7 +3,7 @@ package fucoin.configurations;
import fucoin.configurations.internal.ConfigurationName; import fucoin.configurations.internal.ConfigurationName;
/** /**
* * This configuration spawns 200 wallets to demonstrate the spawning of many headless wallets
*/ */
@ConfigurationName("Lots of Wallets") @ConfigurationName("Lots of Wallets")
public class MassWalletConfiguration extends AbstractConfiguration { public class MassWalletConfiguration extends AbstractConfiguration {
......
...@@ -4,7 +4,7 @@ import akka.japi.Creator; ...@@ -4,7 +4,7 @@ import akka.japi.Creator;
import fucoin.configurations.AbstractConfiguration; import fucoin.configurations.AbstractConfiguration;
/** /**
* * This is used by Akka to spawn the Configuration Actor
*/ */
public class ConfigurationCreator implements Creator<AbstractConfiguration> { public class ConfigurationCreator implements Creator<AbstractConfiguration> {
......
...@@ -4,7 +4,8 @@ import java.lang.annotation.Retention; ...@@ -4,7 +4,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; 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) @Retention(RetentionPolicy.RUNTIME)
public @interface ConfigurationName { public @interface ConfigurationName {
......
...@@ -2,10 +2,9 @@ package fucoin.configurations.internal; ...@@ -2,10 +2,9 @@ package fucoin.configurations.internal;
import fucoin.configurations.AbstractConfiguration; 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 { public class ConfigurationSelection {
private Class<AbstractConfiguration> configurationClass; private Class<AbstractConfiguration> configurationClass;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment