Create GeneratedFileWriter and basic permission nodes list creater

This commit is contained in:
ljacqu 2015-12-05 14:13:20 +01:00
parent a8b3fe2648
commit e81bcf9bf7
6 changed files with 140 additions and 0 deletions

3
src/tools/README.md Normal file
View File

@ -0,0 +1,3 @@
# About src/tools
This _tools_ folder provides helpers and extended tests useful during the development of AuthMe.
This folder is not included during the build of AuthMe.

View File

@ -0,0 +1,26 @@
package permissionstree;
import fr.xephi.authme.permission.AdminPermission;
import fr.xephi.authme.permission.PermissionNode;
import fr.xephi.authme.permission.PlayerPermission;
import java.util.Set;
import java.util.TreeSet;
/**
* Generate all permission nodes like a tree.
*/
public class PermissionNodesListCreater {
public Set<String> gatherNodes() {
Set<String> nodes = new TreeSet<>();
for (PermissionNode perm : PlayerPermission.values()) {
nodes.add(perm.getNode());
}
for (PermissionNode perm : AdminPermission.values()) {
nodes.add(perm.getNode());
}
return nodes;
}
}

View File

@ -0,0 +1,37 @@
package permissionstree;
import fr.xephi.authme.util.StringUtils;
import utils.CommentType;
import utils.GeneratedFileWriter;
import java.util.Scanner;
import java.util.Set;
/**
* Class responsible for formatting a permissions node list and
* for writing it to a file if desired.
*/
public class PermissionsListWriter {
private static final String PERMISSIONS_TREE_FILE = "gen_permtree.txt";
public static void main(String[] args) {
// Ask if result should be written to file
Scanner scanner = new Scanner(System.in);
System.out.println("Write to file? [y = yes]");
String answer = scanner.next();
boolean writeToFile = "y".equalsIgnoreCase(answer);
// Generate connections and output or write
PermissionNodesListCreater creater = new PermissionNodesListCreater();
Set<String> nodes = creater.gatherNodes();
String output = StringUtils.join("\n", nodes);
if (writeToFile) {
GeneratedFileWriter.createGeneratedFile(PERMISSIONS_TREE_FILE, output, CommentType.YML);
} else {
System.out.println(output);
}
}
}

View File

@ -0,0 +1,2 @@
# About
Helper script to generate a list of all permission nodes.

View File

@ -0,0 +1,11 @@
package utils;
/**
* Enum for different comment formats.
*/
public enum CommentType {
JAVA,
YML
}

View File

@ -0,0 +1,61 @@
package utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;
/**
* Utility class for writing a generated file with a timestamp.
*/
public final class GeneratedFileWriter {
private GeneratedFileWriter() {
}
public static void createGeneratedFile(File file, String contents, CommentType commentFormat) {
validateFile(file);
try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file))) {
osw.write(generateComment(commentFormat));
osw.write(contents);
} catch (IOException e) {
throw new RuntimeException("Could not write to file '" + file.getName() + "'", e);
}
}
public static void createGeneratedFile(String fileName, String contents, CommentType commentFormat) {
createGeneratedFile(new File(fileName), contents, commentFormat);
}
private static String generateComment(CommentType commentFormat) {
String comment = "Auto-generated file, generated on " + new Date() + "\n\n";
switch (commentFormat) {
case JAVA:
return "// " + comment;
case YML:
return "# " + comment;
default:
throw new RuntimeException("Unknown comment format '" + commentFormat + "'");
}
}
private static void validateFile(File file) {
if (!file.exists()) {
System.out.println("File '" + file.getName() + "' doesn't exist; attempting to create it");
try {
boolean success = file.createNewFile();
if (!success) {
throw new RuntimeException("Failed to create file '" + file.getName() + "'");
}
} catch (IOException e) {
throw new RuntimeException("Could not create file '" + file.getName() + "'", e);
}
}
if (!file.canWrite()) {
throw new RuntimeException("File '" + file.getName() + "' is not writable");
}
}
}