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; } });