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