diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java
index 20949290..f4e40979 100644
--- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/HTMLGenerationTools.java
@@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.HTTPD;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import static org.apache.commons.lang3.StringEscapeUtils.*;
@@ -17,17 +18,33 @@ public class HTMLGenerationTools
return "
" + escapeHtml4(data) + "
\r\n";
}
- public static String mapToHTMLList(Map map)
+ public static String list(Map map)
{
StringBuilder output = new StringBuilder();
output.append("\r\n");
- Iterator> it = map.entrySet().iterator();
+ Iterator> it = map.entrySet().iterator();
while (it.hasNext())
{
- Map.Entry entry = it.next();
- output.append("- ").append(escapeHtml4(entry.getKey() + " = " + entry.getValue())).append("
\r\n");
+ Map.Entry entry = it.next();
+ output.append("- ").append(escapeHtml4(entry.getKey().toString() + " = " + entry.getValue().toString())).append("
\r\n");
+ }
+
+ output.append("
\r\n");
+
+ return output.toString();
+ }
+
+ public static String list(List list)
+ {
+ StringBuilder output = new StringBuilder();
+
+ output.append("\r\n");
+
+ for (T entry : list)
+ {
+ output.append("- ").append(escapeHtml4(entry.toString())).append("
\r\n");
}
output.append("
\r\n");
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java
index fa1d7fed..f3a85b65 100644
--- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_dump.java
@@ -24,11 +24,11 @@ public class Module_dump extends TFM_HTTPD_Module
.append(paragraph("args (Length: " + args.length + "): " + StringUtils.join(args, ",")))
.append(paragraph("Method: " + method.toString()))
.append(paragraph("Headers:"))
- .append(mapToHTMLList(headers))
+ .append(list(headers))
.append(paragraph("Params:"))
- .append(mapToHTMLList(params))
+ .append(list(params))
.append(paragraph("Files:"))
- .append(mapToHTMLList(files));
+ .append(list(files));
return responseBody.toString();
}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_helpNew.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_helpNew.java
new file mode 100644
index 00000000..c17d38b0
--- /dev/null
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/Module_helpNew.java
@@ -0,0 +1,96 @@
+package me.StevenLawson.TotalFreedomMod.HTTPD;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandMap;
+import org.bukkit.command.PluginIdentifiableCommand;
+
+import static me.StevenLawson.TotalFreedomMod.HTTPD.HTMLGenerationTools.*;
+
+public class Module_helpNew extends TFM_HTTPD_Module
+{
+ public Module_helpNew(String uri, NanoHTTPD.Method method, Map headers, Map params, Map files)
+ {
+ super(uri, method, headers, params, files);
+ }
+
+ @Override
+ public String getBody()
+ {
+ StringBuilder responseBody = new StringBuilder();
+
+ CommandMap commandMap;
+ HashMap knownCommands;
+ if ((commandMap = TFM_CommandLoader.getInstance().getCommandMap()) == null
+ || (knownCommands = TFM_CommandLoader.getInstance().getKnownCommands(commandMap)) == null)
+ {
+ return paragraph("Error loading commands.");
+ }
+
+ final Map> commandsByPlugin = new HashMap>();
+
+ final Iterator> itKnownCommands = knownCommands.entrySet().iterator();
+ while (itKnownCommands.hasNext())
+ {
+ final Map.Entry entry = itKnownCommands.next();
+ final String name = entry.getKey();
+ final Command command = entry.getValue();
+ if (name.equalsIgnoreCase(command.getName()))
+ {
+ String pluginName = "Bukkit";
+ if (command instanceof PluginIdentifiableCommand)
+ {
+ pluginName = ((PluginIdentifiableCommand) command).getPlugin().getName();
+ }
+ List pluginCommands = commandsByPlugin.get(pluginName);
+ if (pluginCommands == null)
+ {
+ commandsByPlugin.put(pluginName, pluginCommands = new ArrayList());
+ }
+ pluginCommands.add(command);
+ }
+ }
+
+ final Iterator>> itCommandsByPlugin = commandsByPlugin.entrySet().iterator();
+ while (itCommandsByPlugin.hasNext())
+ {
+ final Map.Entry> entry = itCommandsByPlugin.next();
+ final String pluginName = entry.getKey();
+ final List commands = entry.getValue();
+
+ Collections.sort(commands, new Comparator()
+ {
+ @Override
+ public int compare(Command a, Command b)
+ {
+ return a.getName().compareTo(b.getName());
+ }
+ });
+
+ List descriptions = new ArrayList();
+ for (Command command : commands)
+ {
+ descriptions.add(command.getName() + " (" + command.getUsage().replace("", command.getName()).trim() + "): " + command.getDescription());
+ }
+
+ responseBody
+ .append(paragraph(pluginName))
+ .append(list(descriptions));
+ }
+
+ return responseBody.toString();
+ }
+
+ @Override
+ public String getTitle()
+ {
+ return "TotalFreedomMod :: WebHelp";
+ }
+}
diff --git a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java
index 9feb55ec..2834a472 100644
--- a/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java
+++ b/src/me/StevenLawson/TotalFreedomMod/HTTPD/TFM_HTTPD_Manager.java
@@ -11,7 +11,7 @@ import org.bukkit.Bukkit;
public class TFM_HTTPD_Manager
{
- public static final int PORT = 28966;
+ public static final int PORT = 8748;
//
private final TFM_HTTPD httpd = new TFM_HTTPD(PORT);
@@ -24,6 +24,15 @@ public class TFM_HTTPD_Manager
try
{
httpd.start();
+
+ if (httpd.isAlive())
+ {
+ TFM_Log.info("TFM HTTPd started. Listening on port: " + httpd.getListeningPort());
+ }
+ else
+ {
+ TFM_Log.info("Error starting TFM HTTPd.");
+ }
}
catch (IOException ex)
{
@@ -34,6 +43,8 @@ public class TFM_HTTPD_Manager
public void stop()
{
httpd.stop();
+
+ TFM_Log.info("TFM HTTPd stopped.");
}
private static class TFM_HTTPD extends NanoHTTPD
@@ -56,7 +67,6 @@ public class TFM_HTTPD_Manager
final String[] args = StringUtils.split(uri, "/");
if (args.length >= 1)
{
- // Hop onto the Bukkit thread, so we're safe to access the Bukkit API
Future responseCall = Bukkit.getScheduler().callSyncMethod(TotalFreedomMod.plugin, new Callable()
{
@Override
@@ -72,11 +82,8 @@ public class TFM_HTTPD_Manager
}
else if ("help".equalsIgnoreCase(args[0]))
{
- //The issue is that plugin.getDescription().getCommands() only shows commands in the plugin.yml file.
- //I need to make another version of this that uses the CommandMap.
- return new Module_help(uri, method, headers, params, files).getResponse();
+ return new Module_helpNew(uri, method, headers, params, files).getResponse();
}
-
return null;
}
});