From fd90efbf6ba5c0066b4dc48c0524aa11cf7d1453 Mon Sep 17 00:00:00 2001 From: Frank Edwards Date: Wed, 14 Feb 2024 21:14:14 -0500 Subject: [PATCH 1/2] Method returns without waiting for CompleteFuture, causing empty string to be returned. --- .../client/functions/LibraryFunctions.java | 212 +++++++++--------- 1 file changed, 109 insertions(+), 103 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java b/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java index d038695320..aa03247b49 100644 --- a/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java +++ b/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java @@ -16,9 +16,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ExecutionException; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.library.Library; import net.rptools.maptool.model.library.LibraryInfo; @@ -30,117 +27,126 @@ import net.rptools.parser.VariableResolver; import net.rptools.parser.function.AbstractFunction; -/** Class that implements player macro functions. */ +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +/** + * Class that implements player macro functions. + */ public class LibraryFunctions extends AbstractFunction { - /** Creates a new {@code PlayerFunctions} object. */ - public LibraryFunctions() { - super( - 0, - 1, - "library.listAddOnLibraries", - "library.getInfo", - "library.listTokenLibraries", - "library.getContents"); - } + /** + * Creates a new {@code PlayerFunctions} object. + */ + public LibraryFunctions() { + super( + 0, + 1, + "library.listAddOnLibraries", + "library.getInfo", + "library.listTokenLibraries", + "library.getContents"); + } - @Override - public Object childEvaluate( - Parser parser, VariableResolver resolver, String functionName, List parameters) - throws ParserException { + @Override + public Object childEvaluate( + Parser parser, VariableResolver resolver, String functionName, List parameters) + throws ParserException { - String fName = functionName.toLowerCase(); - try { - var libraryManager = new LibraryManager(); + String fName = functionName.toLowerCase(); + try { + var libraryManager = new LibraryManager(); - switch (fName) { - case "library.listaddonlibraries" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); - return librariesAsJson(libraryManager.getLibraries(LibraryType.ADD_ON)); - } - case "library.getinfo" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); - String namespace = parameters.get(0).toString(); - Optional libraryInfo = libraryManager.getLibraryInfo(namespace); - if (libraryInfo.isPresent()) { - return libraryAsJson(libraryInfo.get()); - } else { - return ""; - } - } - case "library.listtokenlibraries" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); - return librariesAsJson(libraryManager.getLibraries(LibraryType.TOKEN)); - } + switch (fName) { + case "library.listaddonlibraries" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); + return librariesAsJson(libraryManager.getLibraries(LibraryType.ADD_ON)); + } + case "library.getinfo" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); + String namespace = parameters.get(0).toString(); + Optional libraryInfo = libraryManager.getLibraryInfo(namespace); + if (libraryInfo.isPresent()) { + return libraryAsJson(libraryInfo.get()); + } else { + return ""; + } + } + case "library.listtokenlibraries" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); + return librariesAsJson(libraryManager.getLibraries(LibraryType.TOKEN)); + } - case "library.getcontents" -> { - FunctionUtil.blockUntrustedMacro(functionName); - FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); - String namespace = parameters.get(0).toString(); - Optional library = libraryManager.getLibrary(namespace); - if (library.isPresent()) { - return listLibraryContents(library.get()); - } else { - return ""; - } - } + case "library.getcontents" -> { + FunctionUtil.blockUntrustedMacro(functionName); + FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); + String namespace = parameters.get(0).toString(); + Optional library = libraryManager.getLibrary(namespace); + if (library.isPresent()) { + return listLibraryContents(library.get()); + } else { + return ""; + } + } - default -> throw new ParserException( - I18N.getText("macro.function.general.unknownFunction", functionName)); - } - } catch (InterruptedException | ExecutionException e) { - throw new ParserException(e); + default -> throw new ParserException( + I18N.getText("macro.function.general.unknownFunction", functionName)); + } + } catch (InterruptedException | ExecutionException e) { + throw new ParserException(e); + } } - } - - private JsonArray listLibraryContents(Library library) - throws ExecutionException, InterruptedException { - JsonArray json = new JsonArray(); - library - .getAllFiles() - .thenAccept( - l -> { - l.forEach(json::add); - }); - return json; - } + private JsonArray listLibraryContents(Library library) + throws ExecutionException, InterruptedException { + JsonArray json = new JsonArray(); + library + .getAllFiles() + .thenAccept( + l -> { + l.forEach(json::add); + }) + .get(); - /** - * Returns the list of {@link LibraryInfo} records as a json list. - * - * @param libraries the {@link LibraryInfo} list to convert to json. - * @return the json list. - */ - private JsonArray librariesAsJson(List libraries) { - JsonArray librariesJson = new JsonArray(); - libraries.stream().map(this::libraryAsJson).forEach(librariesJson::add); - return librariesJson; - } + return json; + } - /** - * Returns the json representation of a {@link LibraryInfo} object. - * - * @param library the {@link LibraryInfo} to convert to json. - * @return the json representation. - */ - private JsonObject libraryAsJson(LibraryInfo library) { - JsonObject libraryJson = new JsonObject(); - JsonArray authors = new JsonArray(); - for (String author : library.authors()) { - authors.add(author); + /** + * Returns the list of {@link LibraryInfo} records as a json list. + * + * @param libraries the {@link LibraryInfo} list to convert to json. + * @return the json list. + */ + private JsonArray librariesAsJson(List libraries) { + JsonArray librariesJson = new JsonArray(); + libraries.stream().map(this::libraryAsJson).forEach(librariesJson::add); + return librariesJson; } - libraryJson.addProperty("name", library.name()); - libraryJson.addProperty("namespace", library.namespace()); - libraryJson.addProperty("version", library.version()); - libraryJson.addProperty("website", library.website()); - libraryJson.addProperty("gitUrl", library.gitUrl()); - libraryJson.add("authors", authors); - libraryJson.addProperty("license", library.license()); - libraryJson.addProperty("description", library.description()); - libraryJson.addProperty("shortDescription", library.shortDescription()); - libraryJson.addProperty("allowsUrlAccess", library.allowsUrlAccess()); - return libraryJson; - } + /** + * Returns the json representation of a {@link LibraryInfo} object. + * + * @param library the {@link LibraryInfo} to convert to json. + * @return the json representation. + */ + private JsonObject libraryAsJson(LibraryInfo library) { + JsonObject libraryJson = new JsonObject(); + JsonArray authors = new JsonArray(); + for (String author : library.authors()) { + authors.add(author); + } + libraryJson.addProperty("name", library.name()); + libraryJson.addProperty("namespace", library.namespace()); + libraryJson.addProperty("version", library.version()); + libraryJson.addProperty("website", library.website()); + libraryJson.addProperty("gitUrl", library.gitUrl()); + libraryJson.add("authors", authors); + libraryJson.addProperty("license", library.license()); + libraryJson.addProperty("description", library.description()); + libraryJson.addProperty("shortDescription", library.shortDescription()); + libraryJson.addProperty("allowsUrlAccess", library.allowsUrlAccess()); + + return libraryJson; + } } From 43a4951244b02f71dc80c591751d0d102e788fd8 Mon Sep 17 00:00:00 2001 From: Frank Edwards Date: Wed, 14 Feb 2024 21:47:18 -0500 Subject: [PATCH 2/2] run spotlessApply --- .../client/functions/LibraryFunctions.java | 213 +++++++++--------- 1 file changed, 104 insertions(+), 109 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java b/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java index aa03247b49..a5cfc0fbcd 100644 --- a/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java +++ b/src/main/java/net/rptools/maptool/client/functions/LibraryFunctions.java @@ -16,6 +16,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ExecutionException; import net.rptools.maptool.language.I18N; import net.rptools.maptool.model.library.Library; import net.rptools.maptool.model.library.LibraryInfo; @@ -27,126 +30,118 @@ import net.rptools.parser.VariableResolver; import net.rptools.parser.function.AbstractFunction; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ExecutionException; - -/** - * Class that implements player macro functions. - */ +/** Class that implements player macro functions. */ public class LibraryFunctions extends AbstractFunction { - /** - * Creates a new {@code PlayerFunctions} object. - */ - public LibraryFunctions() { - super( - 0, - 1, - "library.listAddOnLibraries", - "library.getInfo", - "library.listTokenLibraries", - "library.getContents"); - } - - @Override - public Object childEvaluate( - Parser parser, VariableResolver resolver, String functionName, List parameters) - throws ParserException { + /** Creates a new {@code PlayerFunctions} object. */ + public LibraryFunctions() { + super( + 0, + 1, + "library.listAddOnLibraries", + "library.getInfo", + "library.listTokenLibraries", + "library.getContents"); + } - String fName = functionName.toLowerCase(); - try { - var libraryManager = new LibraryManager(); + @Override + public Object childEvaluate( + Parser parser, VariableResolver resolver, String functionName, List parameters) + throws ParserException { - switch (fName) { - case "library.listaddonlibraries" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); - return librariesAsJson(libraryManager.getLibraries(LibraryType.ADD_ON)); - } - case "library.getinfo" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); - String namespace = parameters.get(0).toString(); - Optional libraryInfo = libraryManager.getLibraryInfo(namespace); - if (libraryInfo.isPresent()) { - return libraryAsJson(libraryInfo.get()); - } else { - return ""; - } - } - case "library.listtokenlibraries" -> { - FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); - return librariesAsJson(libraryManager.getLibraries(LibraryType.TOKEN)); - } + String fName = functionName.toLowerCase(); + try { + var libraryManager = new LibraryManager(); - case "library.getcontents" -> { - FunctionUtil.blockUntrustedMacro(functionName); - FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); - String namespace = parameters.get(0).toString(); - Optional library = libraryManager.getLibrary(namespace); - if (library.isPresent()) { - return listLibraryContents(library.get()); - } else { - return ""; - } - } - - default -> throw new ParserException( - I18N.getText("macro.function.general.unknownFunction", functionName)); - } - } catch (InterruptedException | ExecutionException e) { - throw new ParserException(e); + switch (fName) { + case "library.listaddonlibraries" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); + return librariesAsJson(libraryManager.getLibraries(LibraryType.ADD_ON)); + } + case "library.getinfo" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); + String namespace = parameters.get(0).toString(); + Optional libraryInfo = libraryManager.getLibraryInfo(namespace); + if (libraryInfo.isPresent()) { + return libraryAsJson(libraryInfo.get()); + } else { + return ""; + } + } + case "library.listtokenlibraries" -> { + FunctionUtil.checkNumberParam(functionName, parameters, 0, 0); + return librariesAsJson(libraryManager.getLibraries(LibraryType.TOKEN)); } - } - private JsonArray listLibraryContents(Library library) - throws ExecutionException, InterruptedException { - JsonArray json = new JsonArray(); - library - .getAllFiles() - .thenAccept( - l -> { - l.forEach(json::add); - }) - .get(); + case "library.getcontents" -> { + FunctionUtil.blockUntrustedMacro(functionName); + FunctionUtil.checkNumberParam(functionName, parameters, 1, 1); + String namespace = parameters.get(0).toString(); + Optional library = libraryManager.getLibrary(namespace); + if (library.isPresent()) { + return listLibraryContents(library.get()); + } else { + return ""; + } + } - return json; + default -> throw new ParserException( + I18N.getText("macro.function.general.unknownFunction", functionName)); + } + } catch (InterruptedException | ExecutionException e) { + throw new ParserException(e); } + } - /** - * Returns the list of {@link LibraryInfo} records as a json list. - * - * @param libraries the {@link LibraryInfo} list to convert to json. - * @return the json list. - */ - private JsonArray librariesAsJson(List libraries) { - JsonArray librariesJson = new JsonArray(); - libraries.stream().map(this::libraryAsJson).forEach(librariesJson::add); - return librariesJson; - } + private JsonArray listLibraryContents(Library library) + throws ExecutionException, InterruptedException { + JsonArray json = new JsonArray(); + library + .getAllFiles() + .thenAccept( + l -> { + l.forEach(json::add); + }) + .get(); - /** - * Returns the json representation of a {@link LibraryInfo} object. - * - * @param library the {@link LibraryInfo} to convert to json. - * @return the json representation. - */ - private JsonObject libraryAsJson(LibraryInfo library) { - JsonObject libraryJson = new JsonObject(); - JsonArray authors = new JsonArray(); - for (String author : library.authors()) { - authors.add(author); - } - libraryJson.addProperty("name", library.name()); - libraryJson.addProperty("namespace", library.namespace()); - libraryJson.addProperty("version", library.version()); - libraryJson.addProperty("website", library.website()); - libraryJson.addProperty("gitUrl", library.gitUrl()); - libraryJson.add("authors", authors); - libraryJson.addProperty("license", library.license()); - libraryJson.addProperty("description", library.description()); - libraryJson.addProperty("shortDescription", library.shortDescription()); - libraryJson.addProperty("allowsUrlAccess", library.allowsUrlAccess()); + return json; + } - return libraryJson; + /** + * Returns the list of {@link LibraryInfo} records as a json list. + * + * @param libraries the {@link LibraryInfo} list to convert to json. + * @return the json list. + */ + private JsonArray librariesAsJson(List libraries) { + JsonArray librariesJson = new JsonArray(); + libraries.stream().map(this::libraryAsJson).forEach(librariesJson::add); + return librariesJson; + } + + /** + * Returns the json representation of a {@link LibraryInfo} object. + * + * @param library the {@link LibraryInfo} to convert to json. + * @return the json representation. + */ + private JsonObject libraryAsJson(LibraryInfo library) { + JsonObject libraryJson = new JsonObject(); + JsonArray authors = new JsonArray(); + for (String author : library.authors()) { + authors.add(author); } + libraryJson.addProperty("name", library.name()); + libraryJson.addProperty("namespace", library.namespace()); + libraryJson.addProperty("version", library.version()); + libraryJson.addProperty("website", library.website()); + libraryJson.addProperty("gitUrl", library.gitUrl()); + libraryJson.add("authors", authors); + libraryJson.addProperty("license", library.license()); + libraryJson.addProperty("description", library.description()); + libraryJson.addProperty("shortDescription", library.shortDescription()); + libraryJson.addProperty("allowsUrlAccess", library.allowsUrlAccess()); + + return libraryJson; + } }