#336 Create command list generator in tools

- Add new conditional template tags [...] blabla [/...]
- Create logic for generating a list of commands
This commit is contained in:
ljacqu
2015-12-14 21:07:03 +01:00
parent 0fdc8d2810
commit 282f777311
9 changed files with 157 additions and 11 deletions
@@ -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<CommandDescription> 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<String, String> 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<CommandArgumentDescription> arguments) {
StringBuilder result = new StringBuilder();
for (CommandArgumentDescription argument : arguments) {
String argumentName = argument.isOptional()
? "[" + argument.getDescription() + "]"
: "<" + argument.getDescription() + ">";
result.append(argumentName).append(" ");
}
return result.toString();
}
}
+2
View File
@@ -0,0 +1,2 @@
{command}: {description} _{arguments}_
[permissions]Permission: {permissions}[/permissions]
+4
View File
@@ -0,0 +1,4 @@
## AuthMe commands
You can use the following commands to use the functions of AuthMe:
{commands}
@@ -47,7 +47,7 @@ public class PermissionsListWriter implements ToolTask {
private static void generateAndWriteFile() {
final String permissionsTagValue = generatePermissionsList();
Map<String, Object> tags = ANewMap.<String, Object>with("permissions", permissionsTagValue).build();
Map<String, String> 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<String, String> entry : permissions.entrySet()) {
Map<String, Object> tags = ANewMap.<String, Object>
with("node", entry.getKey())
Map<String, String> tags = ANewMap
.with("node", entry.getKey())
.and("description", entry.getValue())
.build();
sb.append(TagReplacer.applyReplacements(template, tags));
+1 -2
View File
@@ -18,10 +18,9 @@ public final class FileUtils {
private FileUtils() {
}
public static void generateFileFromTemplate(String templateFile, String destinationFile, Map<String, Object> tags) {
public static void generateFileFromTemplate(String templateFile, String destinationFile, Map<String, String> tags) {
String template = readFromFile(templateFile);
String result = TagReplacer.applyReplacements(template, tags);
writeToFile(destinationFile, result);
}
+10 -3
View File
@@ -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<String, Object> tags) {
public static String applyReplacements(String template, Map<String, String> tags) {
String result = template;
for (Map.Entry<String, Object> tagRule : tags.entrySet()) {
result = result.replace("{" + tagRule.getKey() + "}", tagRule.getValue().toString());
for (Map.Entry<String, String> 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);