From 0d61ebd9498d92978a0e223f1f90353773a32fe4 Mon Sep 17 00:00:00 2001 From: David Bohn <davbohn@googlemail.com> Date: Wed, 22 Jun 2016 22:29:59 +0200 Subject: [PATCH] Add comments --- src/main/java/fucoin/Main.java | 24 +++++++++++++++++-- .../configurations/DefaultConfiguration.java | 2 +- .../MassWalletConfiguration.java | 2 +- .../internal/ConfigurationCreator.java | 2 +- .../internal/ConfigurationName.java | 3 ++- .../internal/ConfigurationSelection.java | 5 ++-- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/fucoin/Main.java b/src/main/java/fucoin/Main.java index 3d9aee4..a42c388 100644 --- a/src/main/java/fucoin/Main.java +++ b/src/main/java/fucoin/Main.java @@ -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); diff --git a/src/main/java/fucoin/configurations/DefaultConfiguration.java b/src/main/java/fucoin/configurations/DefaultConfiguration.java index ff6df01..81e59cc 100644 --- a/src/main/java/fucoin/configurations/DefaultConfiguration.java +++ b/src/main/java/fucoin/configurations/DefaultConfiguration.java @@ -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 { diff --git a/src/main/java/fucoin/configurations/MassWalletConfiguration.java b/src/main/java/fucoin/configurations/MassWalletConfiguration.java index 0439612..1ebb3ee 100644 --- a/src/main/java/fucoin/configurations/MassWalletConfiguration.java +++ b/src/main/java/fucoin/configurations/MassWalletConfiguration.java @@ -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 { diff --git a/src/main/java/fucoin/configurations/internal/ConfigurationCreator.java b/src/main/java/fucoin/configurations/internal/ConfigurationCreator.java index 423e495..46e7f0a 100644 --- a/src/main/java/fucoin/configurations/internal/ConfigurationCreator.java +++ b/src/main/java/fucoin/configurations/internal/ConfigurationCreator.java @@ -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> { diff --git a/src/main/java/fucoin/configurations/internal/ConfigurationName.java b/src/main/java/fucoin/configurations/internal/ConfigurationName.java index de15502..9f18a0b 100644 --- a/src/main/java/fucoin/configurations/internal/ConfigurationName.java +++ b/src/main/java/fucoin/configurations/internal/ConfigurationName.java @@ -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 { diff --git a/src/main/java/fucoin/configurations/internal/ConfigurationSelection.java b/src/main/java/fucoin/configurations/internal/ConfigurationSelection.java index 935ba07..f43ec8a 100644 --- a/src/main/java/fucoin/configurations/internal/ConfigurationSelection.java +++ b/src/main/java/fucoin/configurations/internal/ConfigurationSelection.java @@ -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; -- GitLab