diff --git a/src/main/java/fr/xephi/authme/DataManager.java b/src/main/java/fr/xephi/authme/DataManager.java index c3847f3b6..451667ad1 100644 --- a/src/main/java/fr/xephi/authme/DataManager.java +++ b/src/main/java/fr/xephi/authme/DataManager.java @@ -203,7 +203,7 @@ public class DataManager { } catch (Exception ignored) { } } - ConsoleLogger.info("AutoPurgeDatabase : Removed " + i + " permissions"); + ConsoleLogger.info("AutoPurgeDatabase : Removed " + i + "permissions"); /*int i = 0; for (String name : cleared) { diff --git a/src/main/java/fr/xephi/authme/command/CommandUtils.java b/src/main/java/fr/xephi/authme/command/CommandUtils.java index 6025a5d9d..11445999c 100644 --- a/src/main/java/fr/xephi/authme/command/CommandUtils.java +++ b/src/main/java/fr/xephi/authme/command/CommandUtils.java @@ -1,10 +1,12 @@ package fr.xephi.authme.command; -import java.util.List; - +import com.google.common.collect.Lists; import fr.xephi.authme.util.CollectionUtils; import fr.xephi.authme.util.StringUtils; +import java.util.ArrayList; +import java.util.List; + public final class CommandUtils { public static int getMinNumberOfArguments(CommandDescription command) { @@ -32,6 +34,16 @@ public final class CommandUtils { return StringUtils.join(" ", labels); } + public static String constructCommandPath(CommandDescription command) { + List labels = new ArrayList<>(); + CommandDescription currentCommand = command; + while (currentCommand != null) { + labels.add(currentCommand.getLabels().get(0)); + currentCommand = currentCommand.getParent(); + } + return "/" + labelsToString(Lists.reverse(labels)); + } + public static double getDifference(List labels1, List labels2, boolean fullCompare) { // Make sure the other reference is correct if (labels1 == null || labels2 == null) { diff --git a/src/test/java/fr/xephi/authme/command/CommandUtilsTest.java b/src/test/java/fr/xephi/authme/command/CommandUtilsTest.java new file mode 100644 index 000000000..d808f8b4f --- /dev/null +++ b/src/test/java/fr/xephi/authme/command/CommandUtilsTest.java @@ -0,0 +1,52 @@ +package fr.xephi.authme.command; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; + +/** + * Test for {@link CommandUtils}. + */ +public class CommandUtilsTest { + + @Test + public void shouldPrintLabels() { + // given + List labels = Arrays.asList("authme", "help", "reload"); + + // when + String result = CommandUtils.labelsToString(labels); + + // then + assertThat(result, equalTo("authme help reload")); + } + + @Test + public void shouldReturnCommandPath() { + // given + CommandDescription base = CommandDescription.builder() + .labels("authme", "auth") + .description("Base") + .detailedDescription("Test base command.") + .executableCommand(mock(ExecutableCommand.class)) + .build(); + CommandDescription command = CommandDescription.builder() + .parent(base) + .labels("help", "h", "?") + .description("Child") + .detailedDescription("Test child command.") + .executableCommand(mock(ExecutableCommand.class)) + .build(); + + // when + String commandPath = CommandUtils.constructCommandPath(command); + + // then + assertThat(commandPath, equalTo("/authme help")); + } +} diff --git a/src/tools/commands/CommandPageCreater.java b/src/tools/commands/CommandPageCreater.java new file mode 100644 index 000000000..4d74dfbae --- /dev/null +++ b/src/tools/commands/CommandPageCreater.java @@ -0,0 +1,70 @@ +package commands; + +import fr.xephi.authme.command.CommandArgumentDescription; +import fr.xephi.authme.command.CommandDescription; +import fr.xephi.authme.command.CommandInitializer; +import fr.xephi.authme.command.CommandPermissions; +import fr.xephi.authme.command.CommandUtils; +import fr.xephi.authme.permission.PermissionNode; +import utils.ANewMap; +import utils.FileUtils; +import utils.TagReplacer; +import utils.ToolTask; +import utils.ToolsConstants; + +import java.util.Map; +import java.util.Scanner; +import java.util.Set; + +public class CommandPageCreater implements ToolTask { + + @Override + public String getTaskName() { + return "createCommandPage"; + } + + @Override + public void execute(Scanner scanner) { + final Set baseCommands = CommandInitializer.getBaseCommands(); + final String template = FileUtils.readFromFile(ToolsConstants.TOOLS_SOURCE_ROOT + + "commands/command_entry.tpl.md"); + + StringBuilder commandsResult = new StringBuilder(); + for (CommandDescription command : baseCommands) { + Map tags = ANewMap + .with("command", CommandUtils.constructCommandPath(command)) + .and("description", command.getDetailedDescription()) + .and("arguments", formatArguments(command.getArguments())) + .and("permissions", formatPermissions(command.getCommandPermissions())) + .build(); + commandsResult.append(TagReplacer.applyReplacements(template, tags)); + } + + FileUtils.generateFileFromTemplate( + ToolsConstants.TOOLS_SOURCE_ROOT + "commands/commands.tpl.md", + ToolsConstants.DOCS_FOLDER + "commands.md", + ANewMap.with("commands", commandsResult.toString()).build()); + } + + private static String formatPermissions(CommandPermissions permissions) { + if (permissions == null) { + return ""; + } + String result = ""; + for (PermissionNode node : permissions.getPermissionNodes()) { + result += node.getNode() + " "; + } + return result; + } + + private static String formatArguments(Iterable arguments) { + StringBuilder result = new StringBuilder(); + for (CommandArgumentDescription argument : arguments) { + String argumentName = argument.isOptional() + ? "[" + argument.getDescription() + "]" + : "<" + argument.getDescription() + ">"; + result.append(argumentName).append(" "); + } + return result.toString(); + } +} diff --git a/src/tools/commands/command_entry.tpl.md b/src/tools/commands/command_entry.tpl.md new file mode 100644 index 000000000..c39b1deb1 --- /dev/null +++ b/src/tools/commands/command_entry.tpl.md @@ -0,0 +1,2 @@ +{command}: {description} _{arguments}_ +[permissions]Permission: {permissions}[/permissions] diff --git a/src/tools/commands/commands.tpl.md b/src/tools/commands/commands.tpl.md new file mode 100644 index 000000000..f2334c1b5 --- /dev/null +++ b/src/tools/commands/commands.tpl.md @@ -0,0 +1,4 @@ +## AuthMe commands +You can use the following commands to use the functions of AuthMe: + +{commands} diff --git a/src/tools/permissions/PermissionsListWriter.java b/src/tools/permissions/PermissionsListWriter.java index 1d06b8ceb..5958e0770 100644 --- a/src/tools/permissions/PermissionsListWriter.java +++ b/src/tools/permissions/PermissionsListWriter.java @@ -47,7 +47,7 @@ public class PermissionsListWriter implements ToolTask { private static void generateAndWriteFile() { final String permissionsTagValue = generatePermissionsList(); - Map tags = ANewMap.with("permissions", permissionsTagValue).build(); + Map tags = ANewMap.with("permissions", permissionsTagValue).build(); FileUtils.generateFileFromTemplate( ToolsConstants.TOOLS_SOURCE_ROOT + "permissions/permission_nodes.tpl.md", PERMISSIONS_OUTPUT_FILE, tags); System.out.println("Wrote to '" + PERMISSIONS_OUTPUT_FILE + "'"); @@ -62,8 +62,8 @@ public class PermissionsListWriter implements ToolTask { StringBuilder sb = new StringBuilder(); for (Map.Entry entry : permissions.entrySet()) { - Map tags = ANewMap. - with("node", entry.getKey()) + Map tags = ANewMap + .with("node", entry.getKey()) .and("description", entry.getValue()) .build(); sb.append(TagReplacer.applyReplacements(template, tags)); diff --git a/src/tools/utils/FileUtils.java b/src/tools/utils/FileUtils.java index 5ad5ab25e..49bcab9f1 100644 --- a/src/tools/utils/FileUtils.java +++ b/src/tools/utils/FileUtils.java @@ -18,10 +18,9 @@ public final class FileUtils { private FileUtils() { } - public static void generateFileFromTemplate(String templateFile, String destinationFile, Map tags) { + public static void generateFileFromTemplate(String templateFile, String destinationFile, Map tags) { String template = readFromFile(templateFile); String result = TagReplacer.applyReplacements(template, tags); - writeToFile(destinationFile, result); } diff --git a/src/tools/utils/TagReplacer.java b/src/tools/utils/TagReplacer.java index 404857b7f..29a9b91c0 100644 --- a/src/tools/utils/TagReplacer.java +++ b/src/tools/utils/TagReplacer.java @@ -1,5 +1,7 @@ package utils; +import fr.xephi.authme.util.StringUtils; + import java.util.Date; import java.util.Map; @@ -21,10 +23,15 @@ public class TagReplacer { * any occurrences of "{foo}" to "bar". * @return The filled template */ - public static String applyReplacements(String template, Map tags) { + public static String applyReplacements(String template, Map tags) { String result = template; - for (Map.Entry tagRule : tags.entrySet()) { - result = result.replace("{" + tagRule.getKey() + "}", tagRule.getValue().toString()); + for (Map.Entry tagRule : tags.entrySet()) { + final String name = tagRule.getKey(); + final String value = tagRule.getValue(); + + String replacement = StringUtils.isEmpty(value) ? "" : "\\1"; + result = result.replaceAll("\\[" + name + "\\](.*?)\\[/" + name + "\\]", replacement); + result = result.replace("{" + tagRule.getKey() + "}", tagRule.getValue()); } return applyReplacements(result);