Message file verifier: allow to simply enter the language code instead of full path
- To check a single file just enter the language file, e.g. "es" - Pass File object to MessageFileVerifier instead of String path that will be constructed to a File again...
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package tools.messages;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -11,7 +12,6 @@ import tools.utils.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -24,9 +24,8 @@ import java.util.Set;
|
||||
*/
|
||||
public class MessageFileVerifier {
|
||||
|
||||
private final String messagesFile;
|
||||
private final File messagesFile;
|
||||
private final Set<String> unknownKeys = new HashSet<>();
|
||||
// Map with the missing key and a boolean indicating whether or not it was added to the file by this object
|
||||
private final List<MissingKey> missingKeys = new ArrayList<>();
|
||||
private final Multimap<String, String> missingTags = HashMultimap.create();
|
||||
|
||||
@@ -35,7 +34,8 @@ public class MessageFileVerifier {
|
||||
*
|
||||
* @param messagesFile The messages file to process
|
||||
*/
|
||||
public MessageFileVerifier(String messagesFile) {
|
||||
public MessageFileVerifier(File messagesFile) {
|
||||
Preconditions.checkArgument(messagesFile.exists(), "Message file '" + messagesFile + "' does not exist");
|
||||
this.messagesFile = messagesFile;
|
||||
verifyKeys();
|
||||
}
|
||||
@@ -70,7 +70,7 @@ public class MessageFileVerifier {
|
||||
}
|
||||
|
||||
private void verifyKeys() {
|
||||
FileConfiguration configuration = YamlConfiguration.loadConfiguration(new File(messagesFile));
|
||||
FileConfiguration configuration = YamlConfiguration.loadConfiguration(messagesFile);
|
||||
|
||||
// Check known keys (their existence + presence of all tags)
|
||||
for (MessageKey messageKey : MessageKey.values()) {
|
||||
@@ -104,8 +104,7 @@ public class MessageFileVerifier {
|
||||
* @param defaultMessages The collection of default messages
|
||||
*/
|
||||
public void addMissingKeys(FileConfiguration defaultMessages) {
|
||||
final List<String> fileLines = new ArrayList<>(
|
||||
Arrays.asList(FileUtils.readFromFile(messagesFile).split("\\n")));
|
||||
final List<String> fileLines = FileUtils.readLinesFromFile(messagesFile.toPath());
|
||||
|
||||
List<MissingKey> keysToAdd = new ArrayList<>();
|
||||
for (MissingKey entry : missingKeys) {
|
||||
@@ -136,7 +135,7 @@ public class MessageFileVerifier {
|
||||
addCommentForMissingTags(fileLines, key, entry.getValue());
|
||||
}
|
||||
|
||||
FileUtils.writeToFile(messagesFile, String.join("\n", fileLines));
|
||||
FileUtils.writeToFile(messagesFile.toPath(), String.join("\n", fileLines));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -150,12 +149,7 @@ public class MessageFileVerifier {
|
||||
private void addCommentForMissingTags(List<String> fileLines, final String key, Collection<String> tags) {
|
||||
int indexForComment = Iterables.indexOf(fileLines, isCommentFor(key));
|
||||
if (indexForComment == -1) {
|
||||
indexForComment = Iterables.indexOf(fileLines, new Predicate<String>() {
|
||||
@Override
|
||||
public boolean apply(String input) {
|
||||
return input.startsWith(key + ": ");
|
||||
}
|
||||
});
|
||||
indexForComment = Iterables.indexOf(fileLines, input -> input.startsWith(key + ": "));
|
||||
if (indexForComment == -1) {
|
||||
System.err.println("Error adding comment for key '" + key + "': couldn't find entry in file lines");
|
||||
return;
|
||||
@@ -174,12 +168,7 @@ public class MessageFileVerifier {
|
||||
}
|
||||
|
||||
private static Predicate<String> isCommentFor(final String key) {
|
||||
return new Predicate<String>() {
|
||||
@Override
|
||||
public boolean apply(String input) {
|
||||
return input.startsWith(commentForKey(key));
|
||||
}
|
||||
};
|
||||
return input -> input.startsWith(commentForKey(key));
|
||||
}
|
||||
|
||||
private static boolean messageKeyExists(String key) {
|
||||
|
||||
@@ -17,8 +17,6 @@ import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.lang.String.format;
|
||||
|
||||
/**
|
||||
* Task to verify the keys in the messages files.
|
||||
*/
|
||||
@@ -28,8 +26,6 @@ public final class VerifyMessagesTask implements ToolTask {
|
||||
private static final String MESSAGES_FOLDER = ToolsConstants.MAIN_RESOURCES_ROOT + "messages/";
|
||||
/** Pattern of the message file names. */
|
||||
private static final Pattern MESSAGE_FILE_PATTERN = Pattern.compile("messages_[a-z]{2,7}\\.yml");
|
||||
/** Tag that is replaced to the messages folder in user input. */
|
||||
private static final String SOURCES_TAG = "{msgdir}";
|
||||
/** File to get default messages from (assumes that it is complete). */
|
||||
private static final String DEFAULT_MESSAGES_FILE = MESSAGES_FOLDER + "messages_en.yml";
|
||||
|
||||
@@ -41,8 +37,8 @@ public final class VerifyMessagesTask implements ToolTask {
|
||||
@Override
|
||||
public void execute(Scanner scanner) {
|
||||
System.out.println("Check a specific file only?");
|
||||
System.out.println("Enter the language code for a specific file (e.g. 'es' for messages_es.yml)");
|
||||
System.out.println("- Empty line will check all files in the resources messages folder (default)");
|
||||
System.out.println(format("- %s will be replaced to the messages folder %s", SOURCES_TAG, MESSAGES_FOLDER));
|
||||
String inputFile = scanner.nextLine();
|
||||
|
||||
System.out.println("Add any missing keys to files? ['y' = yes]");
|
||||
@@ -52,7 +48,7 @@ public final class VerifyMessagesTask implements ToolTask {
|
||||
if (StringUtils.isEmpty(inputFile)) {
|
||||
messageFiles = getMessagesFiles();
|
||||
} else {
|
||||
File customFile = new File(inputFile.replace(SOURCES_TAG, MESSAGES_FOLDER));
|
||||
File customFile = new File(MESSAGES_FOLDER, "messages_" + inputFile + ".yml");
|
||||
messageFiles = Collections.singletonList(customFile);
|
||||
}
|
||||
|
||||
@@ -64,7 +60,7 @@ public final class VerifyMessagesTask implements ToolTask {
|
||||
// Verify the given files
|
||||
for (File file : messageFiles) {
|
||||
System.out.println("Verifying '" + file.getName() + "'");
|
||||
MessageFileVerifier verifier = new MessageFileVerifier(file.getAbsolutePath());
|
||||
MessageFileVerifier verifier = new MessageFileVerifier(file);
|
||||
if (addMissingKeys) {
|
||||
verifyFileAndAddKeys(verifier, defaultMessages);
|
||||
} else {
|
||||
|
||||
@@ -89,7 +89,7 @@ public class ImportMessagesTask implements ToolTask {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
|
||||
MessageFileVerifier verifier = new MessageFileVerifier(fileName);
|
||||
MessageFileVerifier verifier = new MessageFileVerifier(file);
|
||||
VerifyMessagesTask.verifyFileAndAddKeys(verifier, YamlConfiguration.loadConfiguration(
|
||||
new File(MESSAGES_FOLDER + "messages_en.yml")));
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package tools.utils;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.List;
|
||||
@@ -22,10 +23,14 @@ public final class FileUtils {
|
||||
}
|
||||
|
||||
public static void writeToFile(String outputFile, String contents) {
|
||||
writeToFile(Paths.get(outputFile), contents);
|
||||
}
|
||||
|
||||
public static void writeToFile(Path path, String contents) {
|
||||
try {
|
||||
Files.write(Paths.get(outputFile), contents.getBytes());
|
||||
Files.write(path, contents.getBytes());
|
||||
} catch (IOException e) {
|
||||
throw new UnsupportedOperationException("Failed to write to file '" + outputFile + "'", e);
|
||||
throw new UnsupportedOperationException("Failed to write to file '" + path + "'", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,11 +50,11 @@ public final class FileUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> readLinesFromFile(String file) {
|
||||
public static List<String> readLinesFromFile(Path path) {
|
||||
try {
|
||||
return Files.readAllLines(Paths.get(file), StandardCharsets.UTF_8);
|
||||
return Files.readAllLines(path, StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
throw new UnsupportedOperationException("Could not read from file '" + file + "'", e);
|
||||
throw new UnsupportedOperationException("Could not read from file '" + path + "'", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user